Android 将字节数组图像大小减少到1MB的算法
我想写一个算法,将图像大小减少到1MB左右,然后再将数据发布到android中的数据库中。 我的图像是字节数组,我必须将字节数组发送到数据库 下面是我正在尝试的代码,但有时它会在bm.compress(CompressFormat.JPEG,100,bos)中出现内存不足异常;线路 代码: 此外,我不想使用Bitmap.compress,因为我已经在使用BitmapFactory选项Android 将字节数组图像大小减少到1MB的算法,android,Android,我想写一个算法,将图像大小减少到1MB左右,然后再将数据发布到android中的数据库中。 我的图像是字节数组,我必须将字节数组发送到数据库 下面是我正在尝试的代码,但有时它会在bm.compress(CompressFormat.JPEG,100,bos)中出现内存不足异常;线路 代码: 此外,我不想使用Bitmap.compress,因为我已经在使用BitmapFactory选项 提前谢谢你的帮助 使用100作为质量设置可能会导致非常大的JPEG-我从90开始,尝试使用较低的设置,直到获得正
提前谢谢你的帮助 使用100作为质量设置可能会导致非常大的JPEG-我从90开始,尝试使用较低的设置,直到获得正确的速度/质量权衡。@Paul-我尝试了90,实际图像大小为1.2MB,这次我没有用完内存,图像大小减少到.8MB。问题是,相机的实际图像大小不同,有时是1.2MB,有时是1.8MB,而且不同的手机有不同的相机,可能会有更大的尺寸,我在寻找一个算法。好吧,你可以在代码中做同样的事情。从90开始。如果大于1MB,请尝试降低。如果小于1MB且小于源,请尝试较大的。
MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
if (imgData != null) {
if (imgData.length > 1048576) {
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
Bitmap bm = BitmapFactory.decodeByteArray(imgData, 0, imgData.length,options);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bm.compress(CompressFormat.JPEG, 100, bos);
bm.recycle();
bm = null;
byte[] data = bos.toByteArray();
ByteArrayBody bab = new ByteArrayBody(data, "image.jpg");
reqEntity.addPart("image_data", bab);
} else {
ByteArrayBody bab = new ByteArrayBody(imgData, "image.jpg");
reqEntity.addPart("image_data", bab);
}