이미지를 base64 문자열로 변환 한 다음 GZIP을 사용하여 압축 할 수 있는지 확인하고 SMS를 통해 다른 Android 휴대 전화로 보내면 압축이 풀리고 디코딩 된 다음 이미지가 사용자에게 표시됩니까? 그렇다면 가능한 해결책은 무엇입니까?android에서 SMS를 통해 압축 된 이미지 파일 보내기
-1
A
답변
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) –
이미지를 BASE64로 변환하면 다시 압축 할 필요가 없습니다. 먼저 이미지를 압축 한 다음 base64로 변환하고 SMS를 통해 다른 문자로 문자열을 보낼 수 있습니다 –
* SMS *를 통해 ** 이외의 문자는 ** 보낼 수 없습니다 **. * MMS *를 통해 파일을 보낼 수 있습니다. 그러나 * MMS *는 SMS보다 ** 높은 ** 비용이 있습니다. 운영자에 따라 약 5 ~ 10 배. ** 이메일 서비스가 아닌 ** 비용이 많이 드는 서비스 **를 무료로 사용 하시겠습니까? –
예, SMS를 사용하고 싶습니다. –