对于图片的处理,几乎是最普通的需求了,上传图片,图片拷贝,但是往往本地图片会比较大,这个时候就需要压缩处理了,总不能把一张几兆的图片上传给服务器吧,这个是完全没必要的。
1,图片保存文件
/**
* 处理 bitmap,把一张很大的图片压缩到另外一个目录
*/
private void handleBitmap()
{
String imgPath = Environment.getExternalStorageDirectory()
.getPath() + "/IMG_1024.jpg"; // 7M
Log.e("imageSize",new File(imgPath).length()/1024+"KB");
String imgCopyPath = Environment.getExternalStorageDirectory()
.getPath() + "/IMG_1026.jpg";
Bitmap bitmap = BitmapFactory.decodeFile(imgPath);
FileOutputStream fos = null;
try {
fos = new FileOutputStream(imgCopyPath);
bitmap.compress(Bitmap.CompressFormat.JPEG,50,fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
Log.e("imageSize",new File(imgCopyPath).length()/1024+"KB");
}
日志:
12-19 15:31:33.987 28442-28442/? E/imageSize: 7528KB
12-19 15:31:34.488 28442-28442/? E/imageSize: 627KB
大约7.5M 最后压缩到627KB,但是这张图片仍然很大。
2,图片压缩到指定大小
/**
* 处理 bitmap,把一张很大的图片压缩到另外一个目录
*/
private void handleBitmap()
{
String imgPath = Environment.getExternalStorageDirectory()
.getPath() + "/IMG_1024.jpg"; // 7M
Log.e("imageSize",new File(imgPath).length()/1024+"KB");
String imgCopyPath = Environment.getExternalStorageDirectory()
.getPath() + "/IMG_1026.jpg";
Bitmap bitmap = BitmapFactory.decodeFile(imgPath);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);
int options = 90 ;
while(byteArrayOutputStream.size()>1024*300 && options>0)
{
byteArrayOutputStream.reset();
bitmap.compress(Bitmap.CompressFormat.JPEG,options,byteArrayOutputStream);
options -= 10;
// Log.e("imageSize","Compress-----"+(byteArrayOutputStream.size() == byteArrayOutputStream.toByteArray().length));
Log.e("imageSize","Compress-----"+byteArrayOutputStream.toByteArray().length/1024+"KB");
}
FileOutputStream fos = null;
try {
fos = new FileOutputStream(imgCopyPath);
byteArrayOutputStream.writeTo(fos);
fos.flush();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
Log.e("imageSize",new File(imgCopyPath).length()/1024+"KB");
}
日志:
E/imageSize: Compress-----2014KB
E/imageSize: Compress-----1205KB
E/imageSize: Compress-----936KB
E/imageSize: Compress-----752KB
E/imageSize: Compress-----627KB
E/imageSize: Compress-----545KB
E/imageSize: Compress-----453KB
E/imageSize: Compress-----222KB
E/imageSize: 222KB
最终压缩到300K 以下。
参考: