Android 图片质量压缩问题

本帖最后由 u013064347 于 2014-01-13 10:22:47 编辑

网上看到一个图片质量压缩法,传入1M以内图片能正常压缩,但是传入2M多的图片就报内存溢出,应该怎么解决?附上代码

Bitmap images=BitmapFactory.decodeFile(filePath);//这里传入图片会报内存溢出!

public Bitmap compressImage(Bitmap image) {

ByteArrayOutputStream baos = new ByteArrayOutputStream();

image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

int options = 90;

int longs=baos.toByteArray().length;

while (baos.toByteArray().length/1024  > 100) { // 循环判断如果压缩后图片是否大于100kb,大于继续压缩

baos.reset();// 重置baos即清空baos

image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 这里压缩options%,把压缩后的数据存放到baos中

longs=baos.toByteArray().length;

options -= 10;// 每次都减少10

}

ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 把压缩后的数据baos存放到ByteArrayInputStream中

Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 把ByteArrayInputStream数据生成图片

return bitmap;

}

分享到:

更多

------解决方案--------------------

// 取得图片

InputStream temp = this.getAssets().open(path);

BitmapFactory.Options options = new BitmapFactory.Options();

// 这个参数代表,不为bitmap分配内存空间,只记录一些该图片的信息(例如图片大小),说白了就是为了内存优化

options.inJustDecodeBounds = true;

// 通过创建图片的方式,取得options的内容(这里就是利用了java的地址传递来赋值)

BitmapFactory.decodeStream(temp, null, options);

// 关闭流

temp.close();

// 生成压缩的图片

int i = 0;

Bitmap bitmap = null;

while (true) {

// 这一步是根据要设置的大小,使宽和高都能满足

if ((options.outWidth >> i <= size)

&& (options.outHeight >> i <= size)) {

// 重新取得流,注意:这里一定要再次加载,不能二次使用之前的流!

temp = this.getAssets().open(path);

// 这个参数表示 新生成的图片为原始图片的几分之一。

options.inSampleSize = (int) Math.pow(2.0D, i);

// 这里之前设置为了true,所以要改为false,否则就创建不出图片

options.inJustDecodeBounds = false;

bitmap = BitmapFactory.decodeStream(temp, null, options);

break;

}

i += 1;

}

return bitmap;

------解决方案--------------------

http://bbs.csdn.net/topics/390432950

android压缩图片质量,Android 图片质量压缩有关问题相关推荐

  1. 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )

    文章目录 一. 图片压缩 二. 图片文件压缩类型 三. Android 原生 API 提供的质量压缩 四. Android 原生 API 提供的尺寸压缩 一. 图片压缩 图片压缩 : ① 文件压缩 : ...

  2. Android性能优化之图片压缩优化

    1 分类 Android图片压缩结合多种压缩方式,常用的有尺寸压缩.质量压缩.采样率压缩以及通过JNI调用libjpeg库来进行压缩. 参考此方法:Android-BitherCompress 备注: ...

  3. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )

    文章目录 一.使用 libjpeg-turbo 压缩图片流程 二.初始化 JPEG 压缩对象 三.打开文件 四.设置压缩参数 五.开始压缩 六.循环写入压缩数据 七.完成图片压缩及收尾 八.libjp ...

  4. 图片压缩 in Android

    图片压缩 背景 成像系统两大核心: 镜头+感光元器件 底大一级压死人 小米11发布会上: 一般全画幅单反/微单相机,厂家设置的有效像素为2400万像素 cmos面积:864mm2 每平方毫米上2.78 ...

  5. Android 最详细的图片压缩攻略(建议收藏)

    以下内容来自公众号code小生,关注每日干货及时送达 作者:Mr.Louis https://blog.csdn.net/weixin_44005563 前言 最近在研究图片压缩原理,看了大量资料,从 ...

  6. android 图片质量,Android微信朋友圈图片不如 IOS的质量好

    由于众所周知的原因,安卓上的微信软件并没有采用Android规范的UI,而是采用了与iOS系统相同的设计语言,这也给用户一个错觉--这安卓和iOS上运行的微信无论是操作还是体验都别无二致.从操作上来看 ...

  7. Android 超清大尺寸图片压缩转Base64中卡顿/速度优化问题整理(在子线程压缩Bitmap卡的主线程进度条走不动了。。。)

    最近遇到需求是前后端传输图片使用的是Base64,但是前端(Android 端)图片很大(尺寸很大4480 × 2520,质量也很大7-10M),需要压缩到一定尺寸(1280 × 960,当然还可以压 ...

  8. 【Android 安装包优化】Android 中使用 7zr 可执行程序 压缩文件

    文章目录 一.Android 中使用 7zr 可执行程序压缩文件 二.完整代码示例 三.参考资料 一.Android 中使用 7zr 可执行程序压缩文件 在上一篇博客 [Android 安装包优化]A ...

  9. Android使用libjpeg实现图片压缩

    一.Android中使用的图片压缩库 Android和IOS 中图片处理使用了一个叫做skia的开源图形处理引擎.他位于android源码的/external/skia 目录.我们平时在java层使用 ...

最新文章

  1. usr share里没有mysql_无法在ubuntu 12.04上安装mysql,找不到消息文件’/usr/share/mysql/errmsg.sys’...
  2. mysql元数据死锁日志_这个未修复的MySQL 5.7死锁Bug,你知道么?
  3. 进阶指南:如何编写可重用程序
  4. 查找重复文件_快速查找、删除重复图片及文件!
  5. 【VS开发】【miscellaneous】 Windows下配置Git
  6. 【评分】个人作业——软件工程实践总结作业
  7. Metropolis Hastings MCMC when the proposal and target have differing support
  8. 智能实验室-全能优化(Guardio) 4.0.0.691 beta 11
  9. php框架 tp laravel,TP框架和Laravel框架的区别是什么
  10. 借助excel工具进行多元线性回归模型的建立及案例分析
  11. Xposed模块开发指南
  12. ssh 反向代理连接内网服务器并配置开机自启动(解决autossh无法开机自启动)
  13. 算法系列——弗洛伊德算法(Floyd)
  14. 国际赛事 中国魅力——天南铜都“中国东川泥石流国际汽车越野赛”
  15. Java单体应用 - 架构模式 - 03.设计模式-10.装饰器模式
  16. 写在2018年岁末之际
  17. iPhone 隐藏底部 “Dock栏 ”教程
  18. mchange-commons-java包下载
  19. Python量化投资——投资组合的评价和可视化(下):使用Matplotlib生成专业的投资回测数据可视化仪表盘【源码+详解】
  20. keystroke java_KeyStroke

热门文章

  1. Element-UI中Cascader 级联选择器使用
  2. JFinalOA导出Excel
  3. 微信小程序---实现输入手机验证码功能
  4. android 参数 attrs.xml,使用attrs.xml自定义属性
  5. java 设计模式 prototype_Java设计模式之Prototype原型模式
  6. mysql c 中文字符串_MySQL字符集中文乱码终极解决方案和mysql查询中文问题解决方法...
  7. e盾网络验证源码_Laravel [mews/captcha] 图片验证码
  8. c语言几种排序方法的比较,基于C语言的几种排序方法比较.doc
  9. bootstrap 模态框无法使用_模态窗 Modal Window - 产品中的??注意力设计
  10. jq之$(“a[target=‘_blank‘]“)