MitImgChecker 重复与无用图片检测

2,055 阅读3分钟

作者:Mitchell 轮子链接:MitImgChecker

需求

  • 项目中有减少包体积的需求,核心诉求还是减少无用资源文件,再核心的则是减少冗余图片,围绕着这个主要的需求点,用 python 和 shell 匆匆写了一个脚本能力,代码就不贴了,大概流程是每次发版前 build 检查一下,功能虽然实现了,但是还是有许多问题遗留了下来,每次 build 前运行与工程绑定比较紧密,与工程耦合较重,而且如果想实现定制化一些差异功能不太好实现,比如:
  • 自定义搜索的图片类型,改脚本!
  • 自定义被搜索的文件类型,改脚本!
  • 添加搜索的图片黑名单,改脚本!
  • 添加被搜索文件的黑名单,改脚本!
  • 无法针对动画序列号的图片进行扫描分析,比如以下情况,图片 明明被使用了,但是没有被正确筛选出来:
//图片名称 a_01.png, a_02.png, a_03.png
//代码中实现如下:
int num;
[NSString stringwithFormat:@"a_%ld",num];
  • 无法检测图片虽然不重名但是内容相同的图片
a1.png 与 b1.png 名字不同,但是内容相同,保留一个即可
  • 无法正确检测,被加入 imageset 的图片,但是有的开发者愿意把 imageset 的名称改了,导致 imageset 的文件夹名称与实际图片名称不一样,导致检测出错的问题。(o(╥﹏╥)o)
  • 基于以上痛点,本着不重复造一样的精神,看了一下现有的轮子 LSUnusedResources,不能完美支持我如上的需求,所以下决心重新造个轮子,综艺节目取名方式: MitImgChecker 的诞生。(* ̄︶ ̄)

造轮子中

  • 噼里啪啦造轮子中...

MitImgChecker

  • 基于解决以上需求痛点用 Swift 重新造了个轮子:MitImgChecker,提供的能力如下:
  • a) 自定以扫描图片类型:
可以自定义增加或者删除 ```png, jpg, json...``` 格式的图片格式
  • b) 自定义被扫描文件类型:
比如要在 ```.m / .mm``` 文件中进行图片文件的扫描
  • c) 自定义图片子路径黑名单:
比如增加了 ```/123/```, 那么图片文件中带有路径 ```/123/``` 的就都会被过滤,为防止误过滤,尽量添加精确的路径。
  • d) 自定义被扫描文件子路径黑名单:
比如增加了 ```/file/```,那么会过滤掉被扫描文件路径中带有 ```/file/``` 中的文件,为防止误过滤,尽量添加精确的路径
  • e) 代码片段中扫描指定图片前缀
//图片名称可能是 a_01.png, 1_02.png ...
//代码中使用可能如下,此时无法准确匹配 a_01,那么此时添加图片代码前缀 a_ 就可以将其过滤掉
int num = 0;
[UIImage imageNamed:[NSString stringwithFormat:"a_%ld",num]]
  • f) 使用 .imageset 中文件与实际图片命名不一致时的兼容扫描
//这种关于个人代码风格问题,拖拽到 .xcaseets 中的图片之后,手动改一下 imageset 的文件名称。(恩,很头痛~)
代码是 1.png 但是拖进去之后 将生成的 1.imageset 改成了 2.imageset.
  • g) 内容重复图片检测能力
可以检测出不同名称相同内容的图片。

注意:因为此工具仅仅是将怀疑的无用或者重复的列出,为防止误删没有直接删除,需要开发者双击查看确定之后再自己删除。


Todo

  • 搜索效率提升
  • UI 有点搓(sketch 神器在我手里太浪费了,悲哀 o(╥﹏╥)o)
  • 检索会有误差,后面会想办法尽量降低误差。
  • 欢迎 commit issues (* ̄︶ ̄)

总结

  • MitImgChecker 基本满足了我和我的伙伴们的日常开发的一些实际痛点,希望大家拿去用的时候随手 star,Thanks♪(・ω・)ノ。