压缩图片大小,尺寸不变
-
将已知路径的图片压缩至不大于目标大小,并保存至指定路径
/** * 质量压缩,通过给定的路径来压缩图片并保存到指定路径 * * @param srcPath * 资源图片的路径 * @param savePath * 图片的保存路径 * @param aimSize * 压缩到图片大小的最大值 */ public static void compressImageByPath(String srcPath, String savePath, int aimSize) { // 注意savePath的文件夹和文件的判断 Bitmap imgBitmap = BitmapFactory.decodeFile(srcPath); ByteArrayOutputStream baos = new ByteArrayOutputStream(); int percent = 100;// 定义压缩比例,初始为不压缩 imgBitmap.compress(Bitmap.CompressFormat.JPEG, percent, baos); int currentSize = baos.toByteArray().length / 1024; while (currentSize > aimSize) {// 循环判断压缩后图片是否大于目的大小,若大于则继续压缩 baos.reset();// 重置baos,即清空baos //注意:此处该方法的第一个参数必须为JPEG,若为PNG则无法压缩。 imgBitmap.compress(Bitmap.CompressFormat.JPEG, percent, baos); currentSize = baos.toByteArray().length / 1024; percent -= 5; if (percent <= 0) { break; } } try {//将数据写入输出流 FileOutputStream fos = new FileOutputStream(savePath); baos.writeTo(fos); } catch (Exception e) { e.printStackTrace(); } finally { try {//清空缓存,关闭流 baos.flush(); baos.close(); } catch (Exception e) { e.printStackTrace(); } } if (!imgBitmap.isRecycled()) { imgBitmap.recycle();//回收图片所占的内存 System.gc();//提醒系统及时回收 } }
绳锯木断,水滴石穿。海纳百川,积少成多。一分耕耘,一份收获。