由于Android本身的机制限定 由于系统对每个应用内存分配规则的限制,如果加载过大图片很有可能会导致OOM

即闪退或者卡屏现象

但是手机上拇指大小的图片,超清是王权没有必要的

这是我们就需要对

对片进行压缩处理:

大多数人采用先生成bitmap对象,反复压缩bitmap至100k一下的方法,对图片进行反复压缩,但如果是超级大图,bitmap生成本身就已经会导致OOM,所以我们应先对bitmap进行设置:

public static Bitmap ChangeXY(Scenic scenic, Activity activity){BitmapFactory.Options options = new BitmapFactory.Options();options.inSampleSize = 6;options.inPreferredConfig = Bitmap.Config.RGB_565;options.inPurgeable = true;options.inInputShareable = true;Bitmap bitmap = BitmapFactory.decodeResource(activity.getResources(),scenic.getImageId(),options);if (bitmap.getRowBytes() * bitmap.getHeight() > 1024 ){bitmap = compressImage(bitmap);}return bitmap;}

options.inSampleSize = 6;设置 是的原图大小被缩小2*6=12倍

这里我解释一下Scenic和activity

一、senic是我自定义的一个类,其中定义了一个数据成员:imageId 用来存/drawable文件夹下,一张图片的id。(注:不同senic对象,代表不同图片,所以存的图片id不同)。

二、关于activity:由于图像处理的方法与主活动无关,所以我这里将其封装在一个特定静态类中,但是由于执行过程中需要使用著获得(Activity类对象)的方法,所以将主活动作为一个参数(activity)传入。再MainActivity中activity这样赋值: activity=MainActivity.this。

之后再采用反复压缩bitmap来保证大小:

private static Bitmap compressImage(Bitmap image) {ByteArrayOutputStream baos = new ByteArrayOutputStream();image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中int options = 100;while ( baos.toByteArray().length / 1024>100) { //循环判断如果压缩后图片是否大于100kb,大于继续压缩baos.reset();//重置baos即清空baosimage.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中options -= 50;//每次都减少10}ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片return bitmap;}

如下图中的图片,原大小为8.10MB:


附源码Demo:欢迎 star ~

Android-图片压缩相关推荐

  1. Android图片压缩(质量压缩和尺寸压缩)

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...

  2. Android 图片压缩、照片选择、裁剪,上传、一整套图片解决方案

    1.Android一整套图片解决方案 http://mp.weixin.qq.com/s?__biz=MzAxMTI4MTkwNQ==&mid=2650820998&idx=1& ...

  3. Android 图片压缩器

    概述 Android 图片压缩器:一款高效的图片压缩器库,支持批量压缩,异步压缩.多线程多任务压缩,压缩比设置等特性. 详细 代码下载:http://www.demodashi.com/demo/12 ...

  4. Android图片压缩尺寸和质量

    Android在处理图片时,如果不进行压缩处理,很容易就出现OOM内存溢出(OutOfMemory)问题,所以无论是第三方图片加载还是自己在处理图片时,都要进行压缩处理. Android系统中,一张图 ...

  5. android 图片压缩总结1

    在网上调查了图片压缩的方法并实装后,大致上可以认为有两类压缩:质量压缩(不改变图片的尺寸)和尺寸压缩(相当于是像素上的压缩):质量压缩一般可用于上传大图前的处理,这样就可以节省一定的流量,毕竟现在的手 ...

  6. Android图片压缩库——libjpeg-turbo

    为何Android图片压缩效率比IOS低质量差 为什么Android的图片压缩质量要比iPhone的压缩质量差很多,这是因为Android底层犯的一个小错误:libjpeg.并且这个错误一直持续到了今 ...

  7. 最详细的Android图片压缩攻略

    Mr.Louis的博客地址: https://blog.csdn.net/weixin_44005563 最近在研究图片压缩原理,看了大量资料,从上层尺寸压缩.质量压缩原理到下层的哈夫曼压缩,走成华大 ...

  8. android 图片压缩,bitmap压缩总结

    1.    图片压缩相关概念 在android开发中,图片加载到内存中通常需要占用大量的内存,导致app性能过度消耗,严重的话可能会导致OOM异常,所以对图片进行优化就尤为重要. android图片压 ...

  9. Android 图片压缩各种方式

    前言:由于公司项目当中需要用到压缩这块的相应技术,之前也做过的图片压缩都不是特别的理想, 所以这次花了很多心思,仔细研究和在网上找到了很多相对应的资料.为了就是 以后再做的时候直接拿来用就可以了! 第 ...

  10. 可能是最详细的Android图片压缩原理分析(二)—— 鲁班压缩算法解析

    本篇文章已授权微信公众号guolin_blog(郭霖)独家发布 稀土掘金链接 前言 通过上一篇,我们了解了一些关于图片压缩的基础知识,这篇文章我们主要讲解一下鲁班压缩的算法逻辑,很多博客都是从Gith ...

最新文章

  1. active mq topic消费后删除_Spring cloud stream 整合mq
  2. pytorch读取文本训练
  3. java mysql settings_Java中使用MySQL从安装、配置到实际程序测试详解
  4. asp.net用标签递归一颗树
  5. Redis分布式锁抽丝剥茧
  6. Android之通过adb shell getprop、netstat命令看dns、ip
  7. Diango博客--22.Django Haystack 全文检索与关键词高亮
  8. Java 使用 POI 操作 Excel
  9. SpringBoot 优雅的参数效验!
  10. 防止 重复重建相同的表
  11. 在ECSHOP模板商品列表页 显示商品的评论等级和评论数量
  12. iOS网络编程-ASIHTTPRequest小例子-数据请求队列
  13. 京东首页链接的商品竟然下柜?
  14. 扩展切比雪夫多项式(混沌映射, Chebyshev chaotic map)
  15. C#第九天面向对象的学习
  16. 国产操作系统Deepin的安装
  17. CV各技术论坛及QQ群
  18. win10Edge浏览器或第三方浏览器网页字体模糊解决方法
  19. Linux高级查询命令
  20. 关于单片机IO口输入输出的理解!

热门文章

  1. c语言程序负数,C语言中负数怎么表示的?
  2. 5号字对应的数字字号_我想要个字号对照表,就比如五号字对应10.5磅,更详细一点的更好...
  3. 最流行前端开发框架对比评测
  4. 安卓手机误删文件恢复
  5. iexplore应用程序错误
  6. 宝塔面板ab模板建站_2020PHP自助建站系统源码/宝塔在线自助建站系统源码/集成多套模板/在线云建站系统模板...
  7. win10桌面右键一直转圈_吐血推荐:掌握这些技巧,win10工作效率提升9999%
  8. 如何算计算机主机地址,如何计算IP地址及CIDR -电脑资料
  9. 全球顶级的14位程序员!
  10. 机器学习笔记—模式识别与智能计算(一)模式识别概述