【Android】图片压缩
来源:互联网 发布:java调用webkit内核 编辑:程序博客网 时间:2024/06/07 02:56
图片是app中必不可少的元素,同时也引出俩个问题:内存和流量。图片压缩可分为尺寸压缩和质量压缩,
//1、图片尺寸压缩 Bitmap bm = getSmallBitmap(path,600,800); File f = new File(path); if (f.exists()) { f.delete(); } //2、图片质量压缩 ByteArrayOutputStream baos = new ByteArrayOutputStream(); bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); // 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中 int options = 100; while (baos.toByteArray().length / 1024 > 150) { // 循环判断如果压缩后图片是否大于150kb,大于继续压缩 baos.reset();// 重置baos即清空baos bm.compress(Bitmap.CompressFormat.JPEG, options, baos); // 这里压缩options%,把压缩后的数据存放到baos中 options -= 10;// 每次都减少10(值越小越精确,压缩时间也越长,自己根据需要调整) if (options <= 0) { break; } } out = new FileOutputStream(path); out.write(baos.toByteArray()); if (!bm.isRecycled()) { bm.recycle(); }
/** * 图片尺寸压缩 * * @param filePath * @return */ public Bitmap getSmallBitmap(String filePath, int reqWidth, int reqHeight) { final BitmapFactory.Options options = new BitmapFactory.Options(); options.inJustDecodeBounds = true;//true表示只读取读片信息,不读入内存,所以要读取图片decodeFile之类的,必须设为false,否则返回null BitmapFactory.decodeFile(filePath, options); if(options.outHeight > options.outWidth) { //竖屏拍,高>宽 options.inSampleSize = calculateInSimpleSize(options, reqWidth, reqHeight); } else { //横屏拍,宽>高 options.inSampleSize = calculateInSimpleSize(options, reqHeight, reqWidth); } options.inJustDecodeBounds = false; return BitmapFactory.decodeFile(filePath, options); } /** * 计算图片压缩比例 * * @param options * @param reqWidth * @param reqHeight * @return */ public int calculateInSimpleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { final int height = options.outHeight; final int width = options.outWidth; int inSimpleSize = 1; if (width > reqWidth || height > reqHeight) { final int halfWidth = width / 2; final int halfHeight = height / 2; // 计算出最大的inSampleSize的值(2的幂),并保持图片宽高比请求的宽高大。 while ((halfWidth / inSimpleSize) > reqWidth && (halfHeight / inSimpleSize) > reqHeight) { inSimpleSize *= 2; } return inSimpleSize * 2; } return inSimpleSize; }
阅读全文
0 0
- android图片压缩方法
- android图片压缩方法
- android图片压缩
- android图片压缩
- Android图片压缩
- android图片压缩
- Android BitmapFactory 图片压缩
- android图片压缩
- android图片压缩总结
- android图片压缩一:
- Android 图片压缩二:
- Android图片压缩总结
- Android开发压缩图片
- Android图片压缩
- android 的图片压缩
- Android关于图片压缩
- android 图片压缩
- android图片压缩上传
- oracle只安装客户端与pl/sql即可远程访问数据库
- <p>42: Encountered illegal body of tag "c:set" tag, given its attributes.</p>
- java代码比较两个字符串的相似程度
- css笔记(一)初识css
- windows 下 MyEclipse 运行hadoop 出错
- 【Android】图片压缩
- 缓存之EHCache(一)
- PAT 1002. 写出这个数
- How not to hate Spring in 2017
- Andorid-的面试题
- 异常值处理
- 为什么要使用SLF4J而不是Log4J
- svn常用命令
- python 字典部分常用方法总结