android 图片尺寸格式,Android – 降低图片文件大小

我有一个URI图像文件,我想减小它的大小上传它。初始图像文件大小取决于从移动到移动(可以是2MB,可以是500KB),但我想要的最终大小是大约200KB,所以我可以上传它。

从我读到的,我有(至少)2个选择:

>使用BitmapFactory.Options.inSampleSize,对原始图像进行子采样并获得较小的图像;

>使用Bitmap.compress压缩图像指定压缩质量。

什么是最好的选择?

我想最初调整图像宽度/高度,直到宽度或高度超过1000px(像1024×768或其他),然后压缩图像质量下降,直到文件大小超过200KB。这里有一个例子:

int MAX_IMAGE_SIZE = 200 * 1024; // max final file size

Bitmap bmpPic = BitmapFactory.decodeFile(fileUri.getPath());

if ((bmpPic.getWidth() >= 1024) && (bmpPic.getHeight() >= 1024)) {

BitmapFactory.Options bmpOptions = new BitmapFactory.Options();

bmpOptions.inSampleSize = 1;

while ((bmpPic.getWidth() >= 1024) && (bmpPic.getHeight() >= 1024)) {

bmpOptions.inSampleSize++;

bmpPic = BitmapFactory.decodeFile(fileUri.getPath(), bmpOptions);

}

Log.d(TAG, "Resize: " + bmpOptions.inSampleSize);

}

int compressQuality = 104; // quality decreasing by 5 every loop. (start from 99)

int streamLength = MAX_IMAGE_SIZE;

while (streamLength >= MAX_IMAGE_SIZE) {

ByteArrayOutputStream bmpStream = new ByteArrayOutputStream();

compressQuality -= 5;

Log.d(TAG, "Quality: " + compressQuality);

bmpPic.compress(Bitmap.CompressFormat.JPEG, compressQuality, bmpStream);

byte[] bmpPicByteArray = bmpStream.toByteArray();

streamLength = bmpPicByteArray.length;

Log.d(TAG, "Size: " + streamLength);

}

try {

FileOutputStream bmpFile = new FileOutputStream(finalPath);

bmpPic.compress(Bitmap.CompressFormat.JPEG, compressQuality, bmpFile);

bmpFile.flush();

bmpFile.close();

} catch (Exception e) {

Log.e(TAG, "Error on saving file");

}

有更好的方法吗?我应该尝试继续使用所有2种方法还是只有一种?谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值