# batch-resize-photos **Repository Path**: hedahang/batch-resize-photos ## Basic Information - **Project Name**: batch-resize-photos - **Description**: Python 做了个「1 寸照片批量转换」小工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-28 - **Last Updated**: 2025-09-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README --- title: 1寸照片批量转换工具(Pillow)源码解析 date: 2025-09-28 12:20:00 categories: 工具 tags: - Python - Pillow - 图像处理 - 批处理 - CLI --- ## 我用 120 行 Python 做了个「1 寸照片批量转换」小工具 每次给简历或报名系统上传证件照,我都要反复裁剪、改尺寸、调分辨率。某天干脆写了个小工具:把一堆原始照片丢进 `images/`,点一下程序,几秒钟后在 `photos/` 里就能拿到统一规格的 1 寸照。 这个工具做的事很简单,但“够用”:固定 295×413 像素(300 DPI 下 2.5cm × 3.5cm),自动等比缩放并居中裁剪,最后统一导出为高质量 JPG。 --- ### 你能用它做什么 - **批量处理**:把图片放进 `images/`,一键全部产出到 `photos/`。 - **规格统一**:输出 295×413 像素,300 DPI,JPG,质量 95。 - **自动格式处理**:PNG 自动转成 JPG(非 RGB 会先转 RGB)。 - **主体不变形**:先按比例缩放,再居中裁剪,不拉伸不压缩。 --- ### 快速开始 - **直接运行(无需安装 Python)** 1. 将 `1寸照片批量转换工具.exe` 与 `images/` 放在同一目录。 2. 把原始照片放入 `images/`。 3. 双击运行 `.exe`,等待完成。 4. 在 `photos/` 里拿结果(自动创建)。 - **用源码运行(适合开发者)** 1. 安装依赖:`pip install pillow` 2. 在项目根目录运行:`python main.py` 3. 同样把原图放 `images/`,结果在 `photos/`。 建议目录: - `images/`:输入目录(自建) - `photos/`:输出目录(自动创建) - `1寸照片批量转换工具.exe` 或 `main.py` --- ### 它具体是怎么处理图片的 - 目标尺寸与 DPI: ```python # 1寸照片尺寸(像素,300dpi) target_size = (295, 413) # 2.5cm × 3.5cm at 300dpi ``` - 等比缩放(保证不变形): ```python img_ratio = img.width / img.height target_ratio = target_size[0] / target_size[1] if img_ratio > target_ratio: # 图片较宽,以高度为准 new_height = target_size[1] new_width = int(new_height * img_ratio) else: # 图片较高,以宽度为准 new_width = target_size[0] new_height = int(new_width / img_ratio) img = img.resize((new_width, new_height), Image.LANCZOS) ``` - 居中裁剪到 295×413: ```python left = (new_width - target_size[0]) // 2 top = (new_height - target_size[1]) // 2 right = left + target_size[0] bottom = top + target_size[1] img = img.crop((left, top, right, bottom)) ``` - 导出为 JPG(质量 95): ```python output_filename = ( filename.replace('.png', '.jpg') if filename.lower().endswith('.png') else filename ) output_path = os.path.join(output_folder, output_filename) img.save(output_path, quality=95) ``` --- ### 一些“小细节”,但很重要 - **RGB 转换**:为避免某些模式(如 PNG、P 模式)写出 JPG 时出错,统一转为 `RGB`。 - **透明 PNG**:直接转 `RGB` 后导出 JPG,会把透明区域合成黑色;可考虑后续加“白底/蓝底/红底填充”。 - **文件名保留**:输出文件沿用原名(PNG 仅改后缀为 JPG)。 - **交互体验**:控制台会显示进度和统计信息,处理完等待回车再退出。 --- ### 打包成一个 .exe(PyInstaller) 为了方便非开发者使用,我把脚本打成了 Windows 可执行文件,核心配置在 `build_config.spec`(PyInstaller 配置)里: ```python a = Analysis(['main.py'], hiddenimports=['PIL', 'PIL.Image', 'PIL.ImageOps']) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='1寸照片批量转换工具', console=True, upx=True) ``` 自己打包只需: ```bash pip install pillow pyinstaller pyinstaller build_config.spec ``` 产物会在 `dist/` 下生成 `1寸照片批量转换工具.exe`。 --- ### 我踩过的一些坑 - **像素 vs. 厘米 vs. DPI**:系统常写“1 寸”“300 DPI”,程序里以像素为准(295×413)最稳。DPI 更多是元数据,像素决定清晰度。 - **拉伸变形**:强行拉到固定尺寸会变形,必须“等比缩放 + 裁剪”。 - **居中裁剪的边界**:极个别构图(人物靠边)可能被裁切,可先人工预裁,或后续加“人脸检测对齐”。 - **权限/杀软拦截**:`.exe` 首次运行可能被拦,右键“以管理员身份运行”通常能解决。 --- ### 接下来我想做的改进 - 自定义规格(小一寸/二寸、常见证件照尺寸库) - 透明 PNG 的白底/蓝底/红底合成 - EXIF 方向矫正(竖拍横显) - 简易可视化界面(拖拽文件夹即可处理) - 多线程并发处理(大批量更快) --- ### 结语 这个小工具的目标不是“全能”,而是“稳、快、够用”。如果你也经常需要批量生成统一规格的证件照,希望它能替你省下几次繁琐的点击。如果你有更实用的功能想法,欢迎一起把它打磨得更好用。 — 用最简单的方式,把小事做到足够好。