我用安卓相機拍了一張照片。結果是一個字節數組。我通過將它寫在SD卡上(FileOutputStream)來保存它。結果是具有近3mb的文件大小的圖像。我想減少這個文件大小,所以壓縮圖像。減少圖像的文件大小
如果在將字節數組寫入輸出流之前可以減少文件大小,那將會很好。這是可能的還是我必須先保存它?
我用安卓相機拍了一張照片。結果是一個字節數組。我通過將它寫在SD卡上(FileOutputStream)來保存它。結果是具有近3mb的文件大小的圖像。我想減少這個文件大小,所以壓縮圖像。減少圖像的文件大小
如果在將字節數組寫入輸出流之前可以減少文件大小,那將會很好。這是可能的還是我必須先保存它?
我通常調整從而降低它的大小的圖像
Bitmap bitmap = resizeBitMapImage1(exsistingFileName, 800, 600);
您也可以使用此代碼
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
_bitmapScaled.compress(Bitmap.CompressFormat.JPEG, 40, bytes);
//you can create a new file name "test.jpg" in sdcard folder.
File f = new File(Environment.getExternalStorageDirectory()
+ File.separator + "test.jpg")
f.createNewFile();
//write the bytes in file
FileOutputStream fo = new FileOutputStream(f);
fo.write(bytes.toByteArray());
// remember close de FileOutput
fo.close();
調整大小碼
public static Bitmap resizeBitMapImage1(String filePath, int targetWidth, int targetHeight) {
Bitmap bitMapImage = null;
try {
Options options = new Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
double sampleSize = 0;
Boolean scaleByHeight = Math.abs(options.outHeight - targetHeight) >= Math.abs(options.outWidth
- targetWidth);
if (options.outHeight * options.outWidth * 2 >= 1638) {
sampleSize = scaleByHeight ? options.outHeight/targetHeight : options.outWidth/targetWidth;
sampleSize = (int) Math.pow(2d, Math.floor(Math.log(sampleSize)/Math.log(2d)));
}
options.inJustDecodeBounds = false;
options.inTempStorage = new byte[128];
while (true) {
try {
options.inSampleSize = (int) sampleSize;
bitMapImage = BitmapFactory.decodeFile(filePath, options);
break;
} catch (Exception ex) {
try {
sampleSize = sampleSize * 2;
} catch (Exception ex1) {
}
}
}
} catch (Exception ex) {
}
return bitMapImage;
}
我知道這種壓縮方式。但是,我如何獲得位圖作爲字節數組的結果? – JavaForAndroid
stream.toByteArray() – MDMalik
@JavaForAndroid是否解決了您的問題 – MDMalik
後壓縮的圖像您碼。 – Blackbelt
哪部分代碼?這是保存圖片的代碼:FileOutputStream outStream = null; 嘗試outStream = new FileOutputStream(「/ sdcard/Image.jpg」);outStream.write(data); outStream.close(); ... – JavaForAndroid