图片

在开发程序的过程中,简单的将图片加载到当前绘制的界面中,这可以解决大部分的问题,当工程的size不是很大的情况下。一旦工程的size达到了一定的值,就需要在各个方面来做瘦身,例如:

删除重复文件
删除不被使用的文件
...

这是最最开始我们应该想到的,当将工程中的这些未被调用的文件以及重复的文件删除了之后,size还是没有达到我们预料的要求,这时可能需要

  • 简化API
  • 压缩图片
  • 提取公共的API
  • 删除过期的业务活动代码

简化API和提取API是一项细心的活。压缩图片却是一项技术活,在这之前你需要了解图片的组成,以及图片压缩产生的效果。在工程中,使用最多的图片格式莫过于这类图片

  • png
  • jpg
  • jpeg

那么了解图片的压缩的原理就显得尤为的重要,我们要清楚图片压缩压缩的是什么,压缩后产生的变化是什么。在这个问题上建议去看参考文章,讲解的非常的详细。在看了参考文章之后,需要补充的概念有:

压缩原理

有损压缩

有损压缩可以减少图像在内存和磁盘中占用的空间,在屏幕上观看图像时,不会发现它对图像的外观产生太大的不利影响。因为人的眼睛对光线比较敏感,光线对景物的作用比颜色的作用更为重要,这就是有损压缩技术的基本依据。

无损压缩

无损压缩的基本原理是相同的颜色信息只需保存一次。压缩图像的软件首先会确定图像中哪些区域是相同的,哪些是不同的。包括了重复数据的图像(如蓝天) 就可以被压缩,只有蓝天的起始点和终结点需要被记录下来。但是蓝色可能还会有不同的深浅,天空有时也可能被树木、山峰或其他的对象掩盖,这些就需要另外记录。从本质上看,无损压缩的方法可以删除一些重复数据,大大减少要在磁盘上保存的图像尺寸。但是,无损压缩的方法并不能减少图像的内存占用量,这是因为,当从磁盘上读取图像时,软件又会把丢失的像素用适当的颜色信息填充进来。如果要减少图像占用内存的容量,就必须使用有损压缩方法。

压缩优缺点

有损压缩

有损压缩的特点是保持颜色的逐渐变化,删除图像中颜色的突然变化。生物学中的大量实验证明,人类大脑会利用与附近最接近的颜色来填补所丢失的颜色。例如,对于蓝色天空背景上的一朵白云,有损压缩的方法就是删除图像中景物边缘的某些颜色部分。当在·屏幕上看这幅图时,大脑会利用在景物上看到的颜色填补所丢失的颜色部分。利用有损压缩技术,某些数据被有意地删除了,而被取消的数据也不再恢复。
无可否认,利用有损压缩技术可以大大地压缩文件的数据,但是会影响图像质量。如果使用了有损压缩的图像仅在屏幕上显示,可能对图像质量影响不太大,至少对于人类眼睛的识别程度来说区别不大。可是,如果要把一幅经过有损压缩技术处理的图像用高分辨率打印机打印出来,那么图像质量就会有明显的受损痕迹。

无损压缩

无损压缩方法的优点是能够比较好地保存图像的质量,但是相对来说这种方法的压缩率比较低。但是,如果需要把图像用高分辨率的打印机打印出来,最好还是使用无损压缩几乎所有的图像文件都采用各自简化的格式名作为文件扩展名。从扩展名就可知道这幅图像是按什么格式存储的,应该用什么样的软件去读/写等等。

透明通道

即图片的alpha值,不同的图片类型留有的图片通道的bit位是不同的,例如gif的透明通道就只有1bit

领悟

认真的看完了两篇参考,可以从源头处来处理图片。在应用中的小图标可以使用png格式来做相应的配置优点在于:

  • 失真小
  • 完美的支持透明通道
  • 没有锯齿

这里需要注意的就是,在使用png之前,可以使用tinyPNG(压缩比是目前最高的)做图片的压缩,tinyPNG采用了类似gif那样的颜色索引表对png进行压缩,这会导致颜色鲜艳的图片丢失一部分细节,只要UI可以接受,也是一个很好的方案。

在应用详情页使用图片详情的时候,展示的图片往往会是很大的图片。这种图片最好使用jpg/jpeg这种格式的。采用有损压缩来控制图片size,在有损压缩时,可以参考UI的意见来确定最好的压缩比。

参考