美文网首页
图片压缩

图片压缩

作者: 浮名虚誉架构师 | 来源:发表于2017-06-30 15:54 被阅读0次

Android图片压缩常用的有质量压缩、尺寸压缩、采样率压缩以及通过JNI调用libjpeg库来进行压缩(尺寸压缩,质量压缩底层也是通过调用native的方法进行压缩的,而native是通过Skia这个库实现的,但最终还是调用了libjpeg库进行压缩的)

质量压缩

保持像素的前提下改变图片的位深及透明度(通过算法抹掉(同化)图片中的一些点附近相近的像素)达到降低质量压缩文件的目的

常用于将图片压缩后将图片上传到服务器,或者保存到本地,根据实际需求

尺寸压缩

通过减少单位尺寸的像素值,真正意义上的降低像素(通过缩放图片像素来减少图片占用内存大小)

常用于缓存缩略图的时候

采样率压缩

设置图片的采样率,降低图片像素。这样做不会先将大图读入内存,大大减少了内存的使用,也不必考虑将大图读入内存后的释放事宜

问题:因为采样率是整数,所以不能很好的保证图片的质量。如我们需要的是在2和3采样率之间,用2的话图片就大了一点,但是用3的话图片质量就会有很明显的下降

通过JIN调用libjpeg库压缩

通常IOS拍的照片1M左右还比Android拍出来的照片5M的还要清晰,都是在同一个环境下,保存的都是JPEG

原因

1995年 JPEG处理引擎,用于最初的在PC上面处理图片的引擎。

2005年 skia开源的引擎, 开发了一套基于JPEG处理引擎的第二次开发。便于浏览器的使用。

2007年安卓用的skia引擎(阉割版),谷歌拿了skia,去掉一个编码算法—哈夫曼算法。采用定长编码算法。但是解码还是保留了哈夫曼算法,导致了图片处理后文件变大了。

当时由于CPU和内存在手机上都非常吃紧 性能差,由于哈夫曼算法非常吃CPU,被迫用了其他的算法。

优化方案

绕过安卓Bitmap API层,来自己编码实现—-修复使用哈夫曼算法。

JIN开发步骤:

(1)将android的bitmap解码,并转换成RGB数据  一个图片信息---像素点(argb),alpha去掉

(2)JPEG对象分配空间以及初始化

(3)指定压缩数据源

(4)获取文件信息

(5)为压缩设置参数,比如图像大小、类型、颜色空间

(6)开始压缩——jpeg_start_compress()

(7)压缩结束——jpeg_finish_compress()

(8)释放资源

第三方框架Luban(鲁班)压缩

相关文章

  • 图片压缩组件

    图片压缩 图片压缩

  • iOS 图片压缩方法

    两种图片压缩方法 两种图片压缩方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 通过...

  • iOS 图片压缩限制大小最优解

    iOS 图片压缩限制大小最优解 图片的两种压缩方法 1.1 压缩图片质量 1.2 压缩图片尺寸 压缩图片使图片文件...

  • iOS 图片压缩限制大小最优解

    概要: 图片的两种压缩方法1.1 压缩图片质量1.2 压缩图片尺寸压缩图片使图片文件小于指定大小2.1 压缩图片质...

  • iOS 图片压缩限制大小

    一、两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量...

  • iOS 图片压缩方法

    两种图片压缩方法 两种压缩图片的方法:压缩图片质量(Quality),压缩图片尺寸(Size)。 压缩图片质量 N...

  • 图片压缩方法

    两种图片压缩方法 压缩图片质量(quality)、压缩图片尺寸(size) 压缩图片质量 或 前者可以控制压缩比例...

  • 图片懒加载之高斯模糊

    压缩原始图片 将原始图片压缩至1~2kb甚至更小的图片nature.jpg 压缩 java 图片压缩natur...

  • iOS 图片压缩方法

    图片压缩可以通过两种方式实现,压缩图片质量和压缩图片尺寸。如果对图片清晰度有要求的,可以先压缩图片质量,在压缩图片...

  • iOS 图片压缩方法

    iOS 图片压缩方法 更多图片处理方法见图片组件 BBWebImage iOS 图片压缩方法 两种图片压缩方法 两...

网友评论

      本文标题:图片压缩

      本文链接:https://www.haomeiwen.com/subject/mrcicxtx.html