一、图片质量压缩 /** * 质量压缩方法 * @param image * @return */ public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 90; w 在Android开发中,图片处理是一项常见的任务,尤其是在内存管理和用户体验方面。本文将详细介绍两种主要的Android图片压缩方法:质量压缩和按比例大小压缩,并提供相应的代码实现。 **一、图片质量压缩** 质量压缩主要是通过调整图片的压缩率来降低图片的大小。在Android中,我们可以使用`Bitmap`对象的`compress`方法来实现。以下是一个质量压缩的示例代码: ```java public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos); // 初始质量设为100,不压缩 int options = 90; while (baos.toByteArray().length / 1024 > 100) { // 循环判断直到压缩后的图片大小小于100KB baos.reset(); // 重置baos image.compress(Bitmap.CompressFormat.JPEG, options, baos); // 压缩options%,再次写入 options -= 10; // 每次减小10% } ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray()); Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null); return bitmap; } ``` 这段代码首先以100%的质量(即不压缩)将图片写入`ByteArrayOutputStream`,然后不断降低压缩质量,直到图片大小小于100KB。 **二、按比例大小压缩** 比例大小压缩是通过调整图片的分辨率来减小图片大小。这通常在加载大图时使用,以防止内存溢出。以下是一个基于路径获取图片并按比例压缩的示例: ```java public static Bitmap getimage(String srcPath) { BitmapFactory.Options newOpts = new BitmapFactory.Options(); newOpts.inJustDecodeBounds = true; // 先获取图片尺寸,不加载图片到内存 Bitmap bitmap = BitmapFactory.decodeFile(srcPath, newOpts); int w = newOpts.outWidth; int h = newOpts.outHeight; float hh = 800f; // 目标高度 float ww = 480f; // 目标宽度 int be = 1; // 缩放比例 if (w > h && w > ww) { be = (int) (newOpts.outWidth / ww); } else if (w < h && h > hh) { be = (int) (newOpts.outHeight / hh); } if (be <= 0) { be = 1; } newOpts.inSampleSize = be; // 设置缩放比例 newOpts.inJustDecodeBounds = false; // 开始加载图片到内存 bitmap = BitmapFactory.decodeFile(srcPath, newOpts); return compressImage(bitmap); // 压缩比例大小后再进行质量压缩 } ``` 这段代码首先获取图片的原始尺寸,然后根据目标尺寸计算缩放比例`be`,最后使用`inSampleSize`属性加载按比例缩小的图片。 **三、按比例大小压缩(Bitmap)** 当图片已加载到内存中(如从网络加载或从资源文件读取),可以使用类似的方法按比例压缩: ```java public static Bitmap compressScale(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos); // 同样的,判断图片大小并压缩 ... } ``` 在这个方法中,我们同样需要检查压缩后的图片大小,以确保满足指定的大小限制。 以上两种方法都是Android中常见的图片压缩策略,可以根据实际需求选择合适的方式。质量压缩适用于对图片质量要求较高,但希望控制图片大小的情况;比例大小压缩则适用于加载大图时,以避免内存问题。在实际应用中,这两种方法也可以结合使用,先按比例压缩减少分辨率,再进行质量压缩,以达到最佳的压缩效果。
- 粉丝: 3
- 资源: 880
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
评论0