iOS项目瘦身,删除无用图片,批量压缩图片

背景:

移动端关于瘦身,合理处理资源应该是风险最小,见效最快的手段了。
项目中会用到很多的图片资源,合理的压缩<压缩但不失真>和删除无用的图片在一定程度上可以优化我们的包大小

操作步骤:

操作步骤简介
1、查找出项目中没有使用到的图片资源,进行确认然后删除
2、确认项目中的图片存放地,并批量压缩项目中的图片

一、查找出项目中没有使用到的图片资源,进行确认然后删除
  • 1.1、查找出项目中没有使用到的图片资源
    网上也有些工具,但是功能不太好用,只能查找源文件名称在项目中有没有被用到,不能查找Assets.xcassets中的资源有没有被用到,查找不准确
    为了方便操作,搞了一个Python脚本进行这项工作

FindUnUseResource.py脚本地址
感兴趣也可查看 iOS 查找项目中无用资源脚本原理

python3 FindUnUseResource.py -f .png,.jpg,.jpeg,.mp3,.m4a -p  /Users/a58/Desktop/XXXXPath -e .bundle,Assets.xcassets,Pods

参数说明:
-f 查找的资源类型,多个用逗号隔开
-p 查找的项目路径
-e 排除哪些路径,多个用逗号隔开

image.png

主要是筛选的主项目中<不包含bundle>,和Assets.xcassets中的图片资源有没有在项目中使用。
脚本的扫描结果显示的不包含Assets.xcassets,说的是不包含Assets.xcassets中图片的源文件名称

image.png

  • 1.2、将查找出来的结果,挨个在项目中查询,然后确认删除
    为啥不直接删除呢?因为有一些图片名称可能是loading_1.png、loading_2.png,在项目中用for循环把名称拼接起来使用,所以还得根据开发者的实际使用情况来确认。

  • 1.3、删除Assets.xcassets中没有使用到的单倍图
    我们现在应该不支持单倍屏幕的机器了

    image.png

    image.png


二、确认项目中的图片存放地,并批量压缩项目中的图片

图片的存放地一般是.bundleAssets.xcassets主项目直接拖进去的

image.png

1、批量压缩Assets.xcassets
使用脚本CompressImages.py进行检查压缩,该脚本会在目标文件生成和源文件一模一样的目录,只压缩.jpg.png文件,其他的文件只是拷贝回去
脚本地址
CompressImages.py脚本使用需要满足一些环境条件,具体参考参考批量压缩图片

python3 CompressImages.py -k jSrjT94QC4f4Sdqn0JFTrclj2tbXxWh3 -f /Users/a58/Desktop/projectPath/Assets.xcassets -t /Users/a58/Desktop/Tools/FinalFile

参数说明:
-k tinify平台申请的key
-f 要压缩的文件路径<对于iOS项目来说,就可以直接把Assets.xcassets扔进去>
-t 压缩文件存储路径

image.png

2、bundle中图片资源处理
bundle一般情况下是配合一些私有库使用的,极大可能是配合.a或者framework使用,所以,我们只把这部分的图片进行压缩,再放回去就好,不能随便删除

2.1、检测项目中所有的bundle文件
使用FindAllAPartFiles.py脚本进行检测,该脚本可以查找一个路径下除了哪些文件下面所有的某一类文件和文件夹
有点绕?? 看疗效。。。。

python3 FindAllAPartFiles.py -f .bundle -p /Users/a58/Desktop/Tools/TestFile  -e Pods

参数说明
-f 要查找的文件或者文件夹类型,多个用逗号隔开 -f .bundle,.png,.jpg
-p 要查找的文件目录
-e 不在什么文件下面找,这里我们不去找Pods中的bundle,如果在Pods中有自己写的bundle,那么可以不用写Pods,但是必须得写一个字符串当做参数

项目中使用的.bundle.png

私有Pods中的资源最好不要使用bundle的形式进行图片管理,可以使用Images.xcassets
相关的使用方法和区别参考:
https://www.jianshu.com/p/5cb284934be2

image.png

因为只有把图片资源加到Images.xcassets才会被苹果优化
image.png

2.2、压缩主项目bundle中的图片资源
这个地方为啥要用手动去一个个的压缩bundle呢?
因为不是所有的bundle中都有图片资源的,而且一些不想压缩或者拿不准的bundle可以选择不压缩,一般一个项目中bundle也没几个
如果bundle中的图片多,使用脚本CompressImages.py进行检查压缩
脚本地址
CompressImages.py脚本使用需要满足一些环境条件,具体参考参考批量压缩图片

python3 CompressImages.py -k jSrjT94QC4f4Sdqn0JFTrclj2tbXxWh3 -f /Users/a58/Desktop/Tools/TestFile/HUDSource.bundle -t /Users/a58/Desktop/Tools/FinalFile

image.png

bundle压缩完毕之后,将新文件中的内容拷贝出来替换原bundle中内容就行

3、主项目中的图片
这些图片就是些散户了,常见的图片比如引导页,为了使用[UIImage imageWithContentsOfFile:"imagePath"]加载图片,可能放在主项目中等

3.1、查找主项目中的这些散户
FindAllAPartFiles.py

python3 FindAllAPartFiles.py -f .png,.jpg,.jpeg -p /Users/a58/Desktop/projectPath -e .bundle,Assets.xcassets

参数说明
-f 查找文件类型,这里查找
-p 需要查找项目路径
-e 排除搜索的文件夹名称

image.png

感觉图片路径找到图片,对于比较分散的图片,直接用网页在线压缩就可以了https://tinypng.com/

压缩后的结果查看

压缩完毕之后一打包,可能显示压缩效果明显,但是打出来的包其实是包含多个架构的包,不能真实反馈将来上线到AppStore后的大小
可以参考:
iOS查看将来各种机型在AppStore中下载的包大小
只需要把压缩后的包扔到itunes上就可以查看

坑点:

1、项目中的jpg图片最好转化成png图片,因为在ipa包中发现,苹果自动把jpg转化成了png,并且体积变大了
2、pod私有库中的图片资源最好加到Images.xcassets,因为只有把图片资源加到Images.xcassets才会被苹果优化。有的团队是这么做的,将图片放在bundle中,但是只放两倍图。这样估计还是会有差别,待验证。
3、图片不要过度压缩,苹果有自己的图片处理策略,如果压缩过度,打出的包可能感觉小了,但是放在应用商店下载可能会发现图片反而比之前大,有种图片压缩回滚的表现,待验证。
4、对比最终压缩效果,不要只看ADHOC下打出来的ipa大小。要看将来在appStore的ipa大小iOS查看将来各种机型在AppStore中下载的包大小,这样的参考才是有意义的

扩展:

iOS 脚本查看项目中重复文件
可以进一步检测项目中资源,对于重复的资源可以优化一下

在项目中查看某一类文件脚本
可以查看项目某一类的文件,并且大小排序排好,比如查询所有png的文件,可以将较大的文件进行处理,或者UI再切图之类的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容