我用 120 行 Python 做了个「1 寸照片批量转换」小工具
公司有个项目需要批量上传证件照,很多照片不符合规范。都要反复裁剪、改尺寸、调分辨率。所以干脆写了个小工具:把一堆原始照片丢进 images/,点一下程序,几秒钟后在 photos/ 里就能拿到统一规格的 1 寸照。
这个工具做的事很简单,但“够用”:固定 295×413 像素(300 DPI 下 2.5cm × 3.5cm),自动等比缩放并居中裁剪,最后统一导出为高质量 JPG。
项目地址: Gitee - batch-resize-photos
你能用它做什么
- 批量处理:把图片放进
images/,一键全部产出到photos/。 - 规格统一:输出 295×413 像素,300 DPI,JPG,质量 95。
- 自动格式处理:PNG 自动转成 JPG(非 RGB 会先转 RGB)。
- 主体不变形:先按比例缩放,再居中裁剪,不拉伸不压缩。
快速开始
直接运行(无需安装 Python)
- 将
1寸照片批量转换工具.exe与images/放在同一目录。 - 把原始照片放入
images/。 - 双击运行
.exe,等待完成。 - 在
photos/里拿结果(自动创建)。
- 将
用源码运行(适合开发者)
- 安装依赖:
pip install pillow - 在项目根目录运行:
python main.py - 同样把原图放
images/,结果在photos/。
- 安装依赖:
建议目录:
images/:输入目录(自建)photos/:输出目录(自动创建)1寸照片批量转换工具.exe或main.py
它具体是怎么处理图片的
- 目标尺寸与 DPI:
1 | # 1寸照片尺寸(像素,300dpi) |
- 等比缩放(保证不变形):
1 | img_ratio = img.width / img.height |
- 居中裁剪到 295×413:
1 | left = (new_width - target_size[0]) // 2 |
- 导出为 JPG(质量 95):
1 | output_filename = ( |
一些“小细节”,但很重要
- RGB 转换:为避免某些模式(如 PNG、P 模式)写出 JPG 时出错,统一转为
RGB。 - 透明 PNG:直接转
RGB后导出 JPG,会把透明区域合成黑色;可考虑后续加“白底/蓝底/红底填充”。 - 文件名保留:输出文件沿用原名(PNG 仅改后缀为 JPG)。
- 交互体验:控制台会显示进度和统计信息,处理完等待回车再退出。
打包成一个 .exe(PyInstaller)
为了方便非开发者使用,我把脚本打成了 Windows 可执行文件,核心配置在 build_config.spec(PyInstaller 配置)里:
1 | a = Analysis(['main.py'], |
自己打包只需:
1 | pip install pillow pyinstaller |
产物会在 dist/ 下生成 1寸照片批量转换工具.exe。
我踩过的一些坑
- 像素 vs. 厘米 vs. DPI:系统常写“1 寸”“300 DPI”,程序里以像素为准(295×413)最稳。DPI 更多是元数据,像素决定清晰度。
- 拉伸变形:强行拉到固定尺寸会变形,必须“等比缩放 + 裁剪”。
- 居中裁剪的边界:极个别构图(人物靠边)可能被裁切,可先人工预裁,或后续加“人脸检测对齐”。
- 权限/杀软拦截:
.exe首次运行可能被拦,右键“以管理员身份运行”通常能解决。
接下来我想做的改进
- 自定义规格(小一寸/二寸、常见证件照尺寸库)
- 透明 PNG 的白底/蓝底/红底合成
- EXIF 方向矫正(竖拍横显)
- 简易可视化界面(拖拽文件夹即可处理)
- 多线程并发处理(大批量更快)
结语
这个小工具的目标不是“全能”,而是“稳、快、够用”。如果你也经常需要批量生成统一规格的证件照,希望它能替你省下几次繁琐的点击。如果你有更实用的功能想法,欢迎一起把它打磨得更好用。
— 用最简单的方式,把小事做到足够好。