是否需要可递归优化仓库图片并忽略.gitignore目录的脚本?
代码仓库图片批量优化脚本实现
当然有不少开发者需要这类工具!在管理包含大量图片的前端、文档类仓库时,批量优化图片能显著减小仓库体积,同时遵循.gitignore规则避免处理无关文件,非常实用。
下面是一个基于Python的实现脚本,满足递归处理图片、忽略.gitignore指定目录的需求:
import os from gitignore_parser import parse_gitignore from PIL import Image def optimize_image(image_path, quality=85): """优化单张图片,支持JPG/PNG/WebP格式""" try: with Image.open(image_path) as img: # JPG压缩优化 if img.format == 'JPEG': img.save(image_path, 'JPEG', quality=quality, optimize=True, progressive=True) # PNG体积优化 elif img.format == 'PNG': img.save(image_path, 'PNG', optimize=True) # WebP压缩(可选) elif img.format == 'WEBP': img.save(image_path, 'WEBP', quality=quality, lossless=False) print(f"已优化: {image_path}") except Exception as e: print(f"优化失败 {image_path}: {str(e)}") def main(): # 读取当前目录的.gitignore规则 repo_root = os.getcwd() gitignore_path = os.path.join(repo_root, '.gitignore') ignore_check = parse_gitignore(gitignore_path) if os.path.exists(gitignore_path) else lambda x: False # 支持的图片格式 image_extensions = ('.jpg', '.jpeg', '.png', '.webp') # 递归遍历仓库目录 for root, dirs, files in os.walk(repo_root): # 跳过被.gitignore忽略的目录,停止遍历其子目录 if ignore_check(root): dirs[:] = [] continue for file in files: file_path = os.path.join(root, file) # 只处理未被忽略的图片文件 if not ignore_check(file_path) and file.lower().endswith(image_extensions): optimize_image(file_path) if __name__ == "__main__": main()
使用说明:
- 安装依赖:
pip install gitignore-parser pillow - 将脚本保存为
image_optimizer.py,放在代码仓库根目录 - 直接运行脚本:
python image_optimizer.py
自定义调整点:
- 修改
image_extensions添加更多图片格式(比如.gif) - 调整
optimize_image里的quality参数控制压缩质量(1-100,数值越高质量越好) - 对GIF格式可单独添加优化逻辑(需额外依赖如
imageio)
这个脚本会自动读取仓库根目录的.gitignore规则,递归处理所有未被忽略的图片文件,无需手动指定目录,省心高效。
内容的提问来源于stack exchange,提问作者Devonte
相关产品推荐
相关产品推荐

