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种方法还是只有一种?谢谢


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部