前言
随着版本的迭代,业务增加,本地图片越来越多,APPipa包的Assets的大小有62.5M,对于APP的瘦身,图片的压缩也是很重要的一部分。
因为PNG 图片是项目中数量最多的图片,一般是PNG图片手动处理压缩,但是因为操作麻烦,工作量大,容易出现忘记某个目录下图片压缩,图片失真问题,选择什么形式压缩,用什么工具压缩,都要考虑清楚。
查找了很多资料,也踩了很多的坑,因为不想手动操作压缩图片,所以首选可以用命令批量压缩的工具,上网查找定位了一下三款:optipng 无损压缩图片,tinypng有损批量压缩图片,pngquant有损压缩图片等压缩工具都试过,这篇文章记录了整个过程和最终的解决方案。
压缩工具选择
optipng
1.简介
OptiPNG是一种PNG优化器,可将图像文件重新压缩为更小的尺寸,而不会丢失任何信息。该程序还将外部格式(BMP,GIF,PNM和TIFF)转换为优化的PNG,并执行PNG完整性检查和更正。如果您想了解PNG优化的工作原理,请看OptiPNG官网。
2.使用方法
$ optipng *.png
虽然optiPNG 可以设置压缩比例系数,但是我已经设置最高,可以压缩比例还是不高,也因为是无损压缩,大小大约可以减少20%左右,因为并没有减少很多,所以想看下有损压缩的tinypng,虽然是有损压缩,但是让设计师验收压缩过的图片,肉眼看不出有什么变化,tinypng图片压缩通过,下面介绍tinypng。
tinypng
1.原理,根据官网https://tinypng.com/介绍,主要是使用Quantization的技术,通过合并图片中相似的颜色,通过将 24 位的 PNG 图片压缩成小得多的 8 位色值的图片,并且去掉了图片中不必要的 metadata(元数据,从 Photoshop 等工具中导出的图片都会带有此类信息),这种方式几乎能完美支持原图片的透明度。
2.在线API压缩,tinypng 压缩图片大小可以减少70% 左右,压缩过的图片UI验收通过,但是由于需要申请api-key 而且要求一个月不能超过500张图片压缩,实际脚本我也试过,超过430张也就报错,因为我们工程目前有1000多张图片,需要申请3个api-key , 这还不是重点,重点是因为每次循环扫描都是从工程目录的第一张开始,所以如果不做额外操作,即使运行3遍,但是压缩的永远都是前面的430张图片,重复压缩的问题,数量限制的问题,放弃了这个方案。上网了解到pnguant 压缩图片大小可以减少70%左右,压缩过的图片UI验收通过,并且没有数量的限制,下面介绍pngquant。
pngquant
根据官网pngquant介绍,pngquant是国外的一个有损的PNG压缩开源库,提供了命令行形式和源码库形式。将24位或32位的RGBA PNG图转换成8位PNG图并保留透明度通道。通过这个库的转化可以显著减少png文件大小(通常减少70%)。生成的图片文件可以兼容所有现代web浏览器,在IE6下比24-bit PNGs也有更好的表现,具有快速模式,用于处理大批图片。源码库地址为pngquant。
pngquant 安装
(1).git clone git://github.com/pornel/pngquant.git
(2).cd pngquant;
(3). make 回车后就会看到一大串命令,然后看到生成pngquant执行文件以及其他相关文件,即安装成功;
(4).可以用pngquant -h 检查是否安装成功。
(5). “pngquant -f --ext .png --quality 50-80 ”主要是压缩图片的命令。
PS:需要了解更多关于pngquant 请参照官网,
工具选择确定,实验也通过,那就开始批量压缩,下面是python脚本功能简介,文章末尾有脚本链接的下载地址。
python 脚本
本地运行脚本,主要功能包括:
1.会压缩目录下的所有png 的图片;
2.本地记录一份压缩过的所有图片信息;
3.如果是相同名字的图片替换过,有三种情况:
1两种图片大小相同,不会操作;
2.新的图片小于旧的图片,不会压缩,更新图片信息;
3.新的图片大于旧的图片,会压缩,更新图片信息;
4.如果是新增,直接压缩,更新存储记录;
5.用了这个脚本,我们ipa 包的Assets大小较少11M。
使用:
python PngquantPicture.py
可以下载脚本,git链接:链接地址 https://github.com/beiyangguangsumiao/python-iOS-pngquant-PNG- 用到根目录下,运行一遍就好了。
您的工程需要优化,减少安装包的大小啦~
PS:自学python 脚本语句,走了很多坑,有什么问题请多多指教 ,如果有帮助,请关注,点击喜欢,您的喜欢,是对我努力的最大肯定。谢谢~