50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > android 图片尺寸格式 Android – 降低图片文件大小

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

时间:2023-12-16 13:18:15

相关推荐

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

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

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

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

>使用press压缩图像指定压缩质量。

什么是最好的选择?

我想最初调整图像宽度/高度,直到宽度或高度超过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);

press(pressFormat.JPEG, compressQuality, bmpStream);

byte[] bmpPicByteArray = bmpStream.toByteArray();

streamLength = bmpPicByteArray.length;

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

}

try {

FileOutputStream bmpFile = new FileOutputStream(finalPath);

press(pressFormat.JPEG, compressQuality, bmpFile);

bmpFile.flush();

bmpFile.close();

} catch (Exception e) {

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

}

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。