2017-03-08 7 views
-1

이미지를 base64 문자열로 변환 한 다음 GZIP을 사용하여 압축 할 수 있는지 확인하고 SMS를 통해 다른 Android 휴대 전화로 보내면 압축이 풀리고 디코딩 된 다음 이미지가 사용자에게 표시됩니까? 그렇다면 가능한 해결책은 무엇입니까?android에서 SMS를 통해 압축 된 이미지 파일 보내기

+0

이미지를 BASE64로 변환하면 다시 압축 할 필요가 없습니다. 먼저 이미지를 압축 한 다음 base64로 변환하고 SMS를 통해 다른 문자로 문자열을 보낼 수 있습니다 –

+0

* SMS *를 통해 ** 이외의 문자는 ** 보낼 수 없습니다 **. * MMS *를 통해 파일을 보낼 수 있습니다. 그러나 * MMS *는 SMS보다 ** 높은 ** 비용이 있습니다. 운영자에 따라 약 5 ~ 10 배. ** 이메일 서비스가 아닌 ** 비용이 많이 드는 서비스 **를 무료로 사용 하시겠습니까? –

+0

예, SMS를 사용하고 싶습니다. –

답변

0

예, 다음 코드는 파일에서 바이트를 읽고 바이트를 gzip하고 base64로 인코딩합니다. 2GB보다 작은 모든 읽을 수있는 파일에서 작동합니다. Base64.encodeBytes에 전달 된 바이트는 파일에서와 동일한 바이트가되므로 정보가 손실되지 않습니다 (위의 코드와 달리 데이터를 JPEG 형식으로 먼저 변환).

/* 
* imagePath has changed name to path, as the file doesn't have to be an image. 
*/ 
File file = new File(path); 
long length = file.length(); 
BufferedInputStream bis = null; 
try { 
bis = new BufferedInputStream(new FileInputStream(file)); 
if(length > Integer.MAX_VALUE) { 
    throw new IOException("File must be smaller than 2 GB."); 
} 
byte[] data = new byte[(int)length]; 
//Read bytes from file 
bis.read(data); 
} catch (IOException e) { 
e.printStackTrace(); 
} finally { 
if(bis != null) 
    try { bis.close(); } 
    catch(IOException e) { 
    } 
} 
//Gzip and encode to base64 
String base64Str = Base64.encodeBytes(data, Base64.GZIP); 

EDIT2 :이 base64로 문자열을 디코딩하고 파일로 디코딩 된 데이터를 작성해야 : // outputPath는 대상 파일의 경로입니다.

//Decode base64 String (automatically detects and decompresses gzip) 
byte[] data = Base64.decode(base64str); 
FileOutputStream fos = null; 
try { 
    fos = new FileOutputStream(outputPath); 
    //Write data to file 
    fos.write(data); 
} catch(IOException e) { 
    e.printStackTrace(); 
} finally { 
    if(fos != null) 
     try { fos.close(); } 
     catch(IOException e) {} 
} 
+0

안드로이드는'Base64.encodeBytes'와'Base64.ZIP' 옵션을 가지고 있지 않습니다. (https://developer.android.com/reference/android/util/Base64.html) –