包瘦身之未引用图片资源扫描工具

457 阅读3分钟

未引用图片资源扫描工具

该工具用于扫描指定项目目录中的图片资源,并检测这些图片是否在代码中被引用,帮助开发者清理未使用的图片资源,节省项目体积和维护成本。


功能概述

  • 扫描图片资源
    支持扫描普通图片文件(.png.jpg.jpeg.gif.pdf)以及 .imageset 目录中的图片资源。
  • 扫描代码中的图片引用
    支持扫描 Objective-C 和 Swift 代码文件(.swift.m.mm.xib.storyboard),通过常见的图片引用方式(如 imageNamed:UIImage(named:)setImage:forState: 等)提取图片名。
  • 生成未引用图片列表
    将未被代码引用的图片路径写入输出文件 unused_images.txt,供开发者进一步确认和处理。

使用说明

1. 配置参数

  • PROJECT_PATH:项目路径,默认为当前目录下的 ./TestUnUserRes,请根据实际项目路径修改。
  • OUTPUT_FILE:输出文件名,默认为 unused_images.txt
  • IMAGE_EXTENSIONS:支持的图片文件后缀列表。
  • CODE_EXTENSIONS:支持扫描的代码文件后缀列表。

2. 扫描流程

  • 扫描图片资源
    遍历项目目录,收集所有符合后缀的图片文件和 .imageset 目录,图片名统一小写且不包含扩展名。
  • 扫描代码引用
    遍历代码文件,使用正则表达式匹配常见的图片引用方式,提取引用的图片名(去除路径和扩展名,统一小写)。
  • 对比并输出
    找出图片资源中未被代码引用的图片,将其完整路径写入输出文件。

3. 输出文件格式

  • 输出文件开头有提示文字:

    未被引用的图片:⚠️⚠️⚠️需要二次确认
    
  • 后续列出所有未被引用的 .png 格式图片的完整路径。


代码模块说明

find_images(project_path)

  • 输入:项目根路径
  • 输出:字典,键为图片名(不含扩展名,统一小写),值为对应图片文件或 .imageset 目录的完整路径列表
  • 功能:遍历目录收集所有图片资源

find_image_references(project_path)

  • 输入:项目根路径
  • 输出:集合,包含代码中引用的所有图片名(不含扩展名,统一小写)
  • 功能:遍历代码文件,使用正则表达式匹配图片引用

main()

  • 执行扫描流程,打印扫描结果,并将未引用图片写入输出文件。

注意事项

  • 仅支持部分常见图片引用方式,可能存在漏判或误判情况,输出结果需二次确认。
  • 只输出未引用的 .png 图片路径,其他格式未引用图片未写入文件。
  • 读取文件时默认使用 UTF-8 编码,若项目中有其他编码文件可能导致读取异常。
  • .imageset 目录视为一组图片资源,统一以目录名作为图片名处理。
  • 运行脚本前请确保 Python 环境已正确安装。

示例输出

未被引用的图片:⚠️⚠️⚠️需要二次确认
图片名称: ./TestUnUserRes/Assets.xcassets/Scaner/scaner_flashlight_on.imageset/scaner_flashlight_on@3x.png
图片名称: ./TestUnUserRes/Assets.xcassets/Scaner/nav_back_whiteArrow.imageset/nav_back_whiteArrow@3x.png
...

使用实例

见github上的demo

扩展建议

  • 增加对更多图片引用方式的支持,提高准确率。
  • 支持输出所有未引用图片格式,不限 .png
  • 支持多语言编码文件读取。
  • 增加命令行参数支持,方便自定义扫描路径和输出文件名。

如有疑问或需求,欢迎反馈和改进!