批量图片压缩 & 替换
背景
最近产品提了个需求,要求把包压缩一下,而项目是OC&Swift混编,这期还加上了RN,还要包不能增大。脑壳疼。。。。他则不上天呢。但需求出来了,还是要做的。所以就想了下面几个方法:
- 先用LSUnusedResources分析项目中无用的图片和类,删除;
- 然后对项目中的图片进行压缩替换;
- 再接着分析linkMap文件,找出大的文件进行优化。
- 基于clang插件的一种iOS包大小瘦身方案
实现
这篇就是关于第二步的,项目里大约有1600多张图片,之前几次压缩都是按大小排序,然后把大于10kb的图片一个个上传到tinypng上压缩,再下载替换。tinypng web最多支持一次20张,每次上传压缩,然后等,就问问烦不烦。。。。
图片批量压缩
so,这次我终于受不了,我要找批量压缩的,还真给我搜到了图片批量压缩脚本(Python),这种使用方式GitHub上已经写得很清楚了,每月可以500张批量压缩,然后有一个输出文件夹:
使用这个脚本的时候,要注意:
- 安装Python
- 安装click和tinify
- 到此处申请 API key: https://tinypng.com/developers ,一个 key 每个月可以免费压缩500张图片,可以申请多个 key。
1 | pip install click // 安装click库 |
然后使用脚本,GitHub里那位大佬脚本print函数没更新,贴一下我更新后的:
1 | #!/usr/bin/env python |
图片批量替换
Yeah,使用了这个脚本之后,图片可以批量压缩了,但是压缩之后的图片是生成在一个独立文件夹,我需要批量替换,but,我图片的目录不确定,换句话说,我不知道这些文件具体在哪个目录下面。。。。oh no。
so,这是你逼我的,开动脑壳,我就想能不能做到我在读取图片压缩的之后直接替换;又或者,写一个单独的批量替换的脚本,因为大的目录确定,压缩前后图片名字没有变化,这么做应该可行,说干就干
使用的时候,把Python文件里TargetPath改成要替换的总目录,SourcePath改成上个脚本执行后压缩后图片的目录,然后运行,binggo,done
原理:
- 读取指定目录&子目录下所有文件
- 判断是不是图片,是就存到数组里
- 读取Target目录和Source目录,然后遍历用’/‘分割,取最后一个,判断是否相等,相等就写入
1 |
|
待续
but,因为我的工程目录下有1600多张的图片,而批量压缩脚本每月最多执行500张,而且我读取图片又不固定,所以没有办法一次性压缩。so,我还要想我这个能不能一步到位
有没有批量压缩不限数量的API
如果没有的话,怎么保证我多次执行这个脚本的连续性,即:我执行了一次之后,下一次换个key,怎么接着执行
。。。想想就脑壳疼
….to be continued