96编辑器旗下产品
找图
终身
ID:0
到期时间:永久
退出登录
您的位置:首页 > 百科管理 > 详情

bitmap图片压缩-图片压缩那些事

原创:找图网 2023-04-11 03:30:05
  • 图片压缩的三种方式

  • 1、等比压缩,等比压缩是保持原图长宽比例的压缩,只是图片变小,展示的还是原图的所有内容(区别于第二种通过Matrix压缩,可以选取图片的一部分,类似于上传头像时,让你在图上选一块zoom的形式)。等比压缩用的的主要是,通过options缩放比例的设置,来生成缩略图:

    2、通过Matrix进行更加灵活的缩放:这种方式主要是通过构建缩放矩阵和方法来实现灵活缩放,宽和高缩放的比例可以不一致,而且通过方法创建出来的是新的位图,这个位图可以是选取原图的一部分,而不是对原图进行整体缩放!类似于上传头像时,让你在原图上扣下来一块的效果,控制非常灵活。

    3、无损压缩,无损压缩是说图片大小和清晰度看上去和原图没有什么差别,但是确实size缩小了,这里缩小的原理是牺牲了分辨率等其他直观看不到的东西,看起来和原图一样,但是一放大就立马失真了,不会和原图一样放大很多才会逐渐变得不清晰。无损压缩后的图片像素并不会减少,而Bitmap占用内存的定义就是像素点占的内存,所以以Bitmap的方式加载到内存中时,和压缩前占用的内存是同样大的,原来会oom的图片,质量压缩后同样会oom;但是,质量压缩后将流输出到文件中,文件的size会大幅度减小,所以质量压缩特别适合在 Android 端进行图片上传的时候进行图片压缩,既能保持上传后的清晰度,又能减小size。另外质量压缩不是可以无限缩小的,降低到一定程度,就算把quality设置的再小,size也不会再降低了。另外这种方式最好返回保存压缩后的图片保存的文件路径,而不要直接返回Bitmap,示例就懒得改了。

    一张图片处理过程,建议先进行等比压缩或者Matrix压缩后,再进行质量压缩,这样组合使用,不管是生成缩略图还是图片上传,效果都不错

  • Android黑科技,图片终极压缩

  • 一、支持自定义配置、不失真和批量处理

    二、图片上传为什么要压缩

    1、图片服务器空间限制,磁盘昂贵

    2、网络不稳定,大文件需要断点续传

    3、尽可能避免安卓OOM异常

    4、后台约定的规则<200KB

    5、需要上传原图的应用有医院临床项目、金融银行

    三、图片压缩流程

    1、递归每张图片

    2、设置图片格式

    png, jpg,webp

    3、质量压缩(format,quality,baos)

    由于png是无损压缩,所以设置quality无效(不适合作为缩略图)

    采样率压缩

    缩小图片分辨率,减少所占用磁盘空间和内存大小

    缩放压缩(bitmap, null,rectF,null)

    减少图片的像素,降低所占用磁盘空间大小和内存大小,可用于缓存缩略图

    JNI调用JPEG库

    Android的图片引擎使用的是阉割版的skia引擎,去掉了图片压缩中的哈夫曼算法

    4、像素修复

    5、返回压缩

    6、完成压缩

    demo:

    参考:

    Luban框架

    缺点

    1、当没有设定压缩路径时,抛异常无闪退

    2、源码中,压缩比率固定值60,无法修改

    3、压缩配置,参数不太适应真实项目需求

    4、不能指定压缩大小,比如100KB以内

  • 图片压缩那些事

  • 我们在项目开发过程中,可能或多或少的都会有对图片操作,而且一般情况在app当中涉及到内存泄露、或者apk体积增大等方面,绝大部分原因就是图片的问题,要么图片体积比较大、或者一次加载图片比较多等等,所以个人觉得,只要想对app瘦身、减小app体积、避免内存泄露等等这些问题,同时,为了避免OOM内存泄露,几乎所有的app都会对大图片进行压缩的,这点是毋庸置疑的,所以说只要把图片处理好,可以说就已经解决了绝大部分的问题,那么这篇文章就来针对图片压缩的原因、常见图片压缩方法做一个简单的总结。

    文件和流的形式对图片体积大小没影响,也就是说,如果手机SD卡上的是100k,以流的形式读到内存中也是100k,如果图片以Bitmap形式存在,内存会瞬间增大;

    文件形式:()

    流的形式:将图片文件读到 内存输入流中,看它的byte数;

    Bitmap:()

    如果图片是要上传的,那么 几M大小肯定不行,所以就必须得压缩;

    如果图片要显示在android 设备上,ImageView最终是要加载bitmap对象的,所以就要考虑单个 Bitmap对象占用多少内存;

    bitmap内存大小 = 图片长度 * 图片宽度 * 单位像素占用字节数

    bitmap常见有2种编码方式,ARGB_8888、RGB――565,前者每个像素点是4byte(字节),后者是2个byte(字节),ARGB_8888比较常用。

    1080 * 1920 * 4 = 7.9M

    保持原图长宽比例的压缩,只是图片变小,展示的还是原图的所有内容,用的是,通过options设置缩放比例,生成缩略图;

    inSimpleSize(采样率):

    优点:效率较高,解析速度快;

    缺点:inSimpleSize取值只能是 2的次方数,不能精确指定图片大小;

    宽高缩放比例可以不一致,通过()方法创建出新的位图,这个位图可以选取图片一部分,而不是整体压缩,类似于QQ上传头像,让你在图片上选择任何一块 zoom的形式,控制非常灵活;

    意思就是图片大小、清晰度和原图看上去没什么区别,但是大小缩小了,缩小原理就是牺牲了分辨率等其他直观看不到的东西,看上去和原图一样,但是放大立马失真,不像原图只有放大后才会不清晰

    最新文章 更多
    最新素材 更多
    公司介绍 网站地图 图片资讯
    Copyright © 2010-2022 山东找图网络科技有限公司  鲁ICP备18007836号-3  邮箱:15653358549@163.com