Android图片质量压缩
2017-08-28 10:17
411 查看
/** * 质量压缩方法 * * @param imagePath 原图片路劲 * @param size 压缩图片到多少KB以内(单位KB) * @return 返回压缩后图片的绝对路径 */ public static File compressImageToSD(String imagePath, long size) { LogUtil.i("============================开始压缩图片==========================================="); Bitmap image = BitmapFactory.decodeFile(imagePath); ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到字节流中 int options = 90; long fileSize = baos.toByteArray().length / 1024; if (fileSize / size > 5) { options = 20; } else if (fileSize / size > 4) { options = 25; } else if (fileSize / size > 3) { options = 30; } else if (fileSize / size > 2) { options = 50; } while (fileSize > size && options > 0) { // 循环判断如果压缩后图片是否大于1024kb,大于继续压缩 baos.reset(); // 重置baos即清空baos image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到字节流中 LogUtil.i("===========================================" + options); options -= 10;// 每次都减少10 fileSize = baos.toByteArray().length / 1024; } LogUtil.i("============================图片压缩结束==========================================="); InputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的字节存放到ByteArrayInputStream中 Context application = BaseApplication.getContext(); File appDir = new File(application.getExternalFilesDir(null), "temp"); if (!appDir.exists()) { appDir.mkdir(); } String fileName = System.currentTimeMillis() + ".jpg"; File file = new File(appDir, fileName); try { LogUtil.i("============================压缩后的图片保存到SD==========================================="); FileOutputStream fos = new FileOutputStream(file); int temp = isBm.available(); int bytesRead = 0; byte[] buffer = new byte[isBm.available()]; while ((bytesRead = isBm.read(buffer, 0, temp)) != -1) { LogUtil.i("=======================================================================" + bytesRead); fos.write(buffer, 0, bytesRead); } fos.flush(); fos.close(); isBm.close(); LogUtil.i("============================保存到SD成功==========================================="); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return file; }
相关文章推荐
- android 中图片的质量大小和宽高压缩
- Android 图片压缩,基于比例和质量压缩
- Android图片尺寸与质量压缩你用对了吗?inSampleSize与quality的浅析
- Android图片压缩(质量压缩和尺寸压缩)、图片保存(本地和sqlite数据库)
- android图片压缩质量参数Bitmap.Config RGB_565等的含义
- android图片压缩质量参数Bitmap.Config RGB_565 ARGB_8888
- android图片压缩质量参数Bitmap.Config RGB_565等的含义
- Android图片质量压缩以及缩略图生成
- android图片压缩质量参数Bitmap.Config RGB_565等的含义
- Android应用开发之图片(Bitmap)压缩(二)---------质量压缩
- Android图片压缩尺寸及质量
- Android图片压缩-大小与质量压缩
- Android图片压缩尺寸和质量
- android图片压缩 质量压缩 像素压缩 github压缩库
- android图片压缩质量参数Bitmap.Config RGB_565 ARGB_8888
- Android 图片二次采样、质量压缩
- Android图片压缩质量参数Bitmap.Config RGB_565、 ARGB_8888的含义及用法
- Android图片质量压缩和尺寸压缩处理
- android图片压缩质量参数Bitmap.Config RGB_565等的含义
- android 图片过大如何处理?压缩后图片有多大? 分辨率压缩、质量压缩