Android 图片压缩
时间: 2023-11-02 12:55:53 浏览: 115
在Android中,进行res图片压缩是非常常见的开发场景。主要的压缩方法有两种:质量压缩和下采样压缩。质量压缩是通过改变图片的压缩比例来减小图片文件的大小,但同时也会降低图片的质量。而下采样压缩是通过减少图片像素数量来减小图片的尺寸和文件大小,但会导致图片的清晰度降低。
图片压缩在Android应用开发中非常重要。随着手机拍照分辨率的提升,图片的大小也越来越大,加载这些大尺寸的图片会导致内存不足的问题。因此,对于Android应用来说,进行图片压缩是必不可少的。
在Android中,获取每一个像素的argb权重是一项耗费性能的操作,需要循环遍历整个图片的像素信息。为了解决这个问题,早期的Android采用了默认的哈夫曼表进行图片压缩,其中使用了libjpeg和optimize_coding技术。
简而言之,在Android中进行res图片压缩时,可以选择使用质量压缩或下采
相关问题
Android图片压缩
在 Android 中进行图片压缩可以使用以下两种方式:
1. 使用 BitmapFactory 进行图片压缩
```java
public static Bitmap decodeSampledBitmapFromResource(Resources res, int resId,
int reqWidth, int reqHeight) {
// 首先将 inJustDecodeBounds 设置为 true,解析图片的宽高信息,不将图片的像素加载到内存中
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeResource(res, resId, options);
// 根据计算出的 inSampleSize 来进行图片的压缩
options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight);
// 将 inJustDecodeBounds 设置为 false,重新解析图片,这次会将图片的像素加载到内存中
options.inJustDecodeBounds = false;
return BitmapFactory.decodeResource(res, resId, options);
}
public static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
// 获取图片的原始宽高
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;
// 如果图片的宽高比目标宽高大,则进行压缩
if (height > reqHeight || width > reqWidth) {
final int halfHeight = height / 2;
final int halfWidth = width / 2;
// 计算 inSampleSize 的值,确保宽高都不会超过目标宽高
while ((halfHeight / inSampleSize) >= reqHeight
&& (halfWidth / inSampleSize) >= reqWidth) {
inSampleSize *= 2;
}
}
return inSampleSize;
}
```
调用该方法时,可以指定需要压缩到的目标宽高:
```java
Bitmap compressedBitmap = decodeSampledBitmapFromResource(getResources(), R.drawable.image, 500, 500);
```
2. 使用第三方库进行图片压缩
在 Android 中有很多第三方库可以用来进行图片压缩,比如:
- Luban:https://github.com/Curzibn/Luban
- Compressor:https://github.com/zetbaitsu/Compressor
这些库通常都提供了简单易用的 API,可以很方便地进行图片压缩。
android图片压缩工具类
Android图片压缩工具类是一种用于压缩Android应用中的图片文件的工具。根据引用和引用的内容,这个工具类的具体实现可能包括以下功能:
- 通过将图片文件转换为字节数组,以便进行后续的压缩处理。
- 使用缓冲输出流将压缩后的图片数据写入输出流中。
- 通过设置合适的压缩参数,对图片进行压缩操作,减小文件大小但尽量保持良好的图像质量。
- 可能还包括一些其他的图像处理操作,如旋转、裁剪等。
具体的实现细节可以参考引用和引用提供的代码示例。在这些示例中,使用了ByteArrayInputStream和ByteArrayOutputStream类来处理字节数组的输入和输出。通过设置合适的压缩参数,可以实现对图片的压缩操作。此外,还可以使用BufferedOutputStream类来提高输出流的写入性能。
如果想要进一步了解关于Android图片压缩工具类的使用和实现细节,可以参考引用提供的配套资料,该资料可能提供了更详细的解释和示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [Android开发之图片压缩工具类完整实例](https://download.csdn.net/download/weixin_38517904/14018839)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [android图片压缩工具类分享](https://download.csdn.net/download/weixin_38616330/14881444)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [Spring Boot(六十四):SpringBoot集成Gzip压缩数据](https://download.csdn.net/download/u013938578/88221156)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文