5.0 KiB
TinyPNG 批量压缩工具
这是一个基于 Tinify/TinyPNG Python SDK 的批量图片压缩和格式转换工具。支持 GUI 界面、多个 API Key 按顺序接力使用、官方额度同步、批量转换格式,以及递归处理目录。
功能
- 图形界面选择输入目录和输出目录。
- 支持多个 Tinify API Key,每个 Key 默认每月 500 张额度,处理时会先用完前一个 Key,再切换到下一个。
- 启动处理前可同步官方本月已用额度。
- 支持 PNG、JPG/JPEG、WebP、AVIF 图片。
- 支持转换为 png、jpeg、webp、avif,也支持“全部格式”一次输出四种格式。
- 支持递归扫描目录。
- 支持覆盖已有输出文件或跳过已有文件。
- 支持试运行,只预览计划,不调用 Tinify API。
目录说明
C:\dev\py\tinypng
├─ source\ 默认输入目录,把待处理图片放这里
├─ optimized\ 默认输出目录,运行后自动生成
├─ tinypng_gui.py GUI 程序
├─ tinypng_balancer.py 命令行和核心处理逻辑
├─ run_gui.bat 双击启动 GUI
├─ tinify_keys.json 实际 API Key 配置文件
├─ tinify_usage.json 本月额度缓存文件,运行后自动生成
├─ pyproject.toml uv 项目依赖配置
└─ uv.lock uv 锁定文件
启动 GUI
推荐直接双击:
run_gui.bat
也可以在命令行运行:
cd C:\dev\py\tinypng
uv run tinypng_gui.py
程序通过 uv run 启动,会自动使用 pyproject.toml 中声明的 tinify SDK 依赖。
配置 API Key
打开 GUI 后点击 填写 API Key。
支持以下输入方式:
KEY_1
KEY_2
KEY_3
也支持用逗号、分号或空格分隔。保存后会生成 tinify_keys.json,主界面的“配置文件”会自动指向该文件。
配置文件格式示例:
{
"api_keys": [
{
"key": "YOUR_TINIFY_API_KEY_1",
"monthly_limit": 500,
"name": "账号-1"
},
{
"key": "YOUR_TINIFY_API_KEY_2",
"monthly_limit": 500,
"name": "账号-2"
}
],
"proxy": null
}
不要把真实 API Key 写入 tinify_keys.sample.json,它只作为模板示例。
GUI 使用流程
- 把图片放入当前目录下的
source文件夹。 - 双击
run_gui.bat打开界面。 - 点击
填写 API Key,粘贴一个或多个 API Key 并保存。 - 确认输入目录为
source。 - 选择输出目录,默认是
optimized。 - 按需选择转换格式、递归扫描、覆盖输出、同步官方额度等选项。
- 点击
开始处理。
转换格式
转换格式 默认是 保持原格式。
可选值:
源格式:只压缩,不改变格式。png:输出 PNG。jpeg/jpg:输出 JPEG。webp:输出 WebP。avif:输出 AVIF。- 可多选,例如默认会同时选择
源格式和webp,每张图片会输出源格式压缩结果和 WebP 结果。 - 命令行的
all会输出源格式、.png、.jpg、.webp、.avif。
注意:转换、缩放等 Tinify API 操作可能会消耗压缩额度。“全部格式”会为每张输入图片生成多个输出,因此额度消耗也会更多。
额度同步
GUI 默认勾选 同步官方额度。
处理开始前,程序会对每个 API Key 调用官方 SDK 的 tinify.validate(),然后读取 tinify.compression_count,同步该 Key 本月已经使用的数量。
同步后的额度会写入:
tinify_usage.json
后续每次处理成功后,程序也会读取 SDK 更新后的 tinify.compression_count 并回写本地用量缓存。
命令行用法
压缩目录:
uv run tinypng_balancer.py source -o optimized
递归压缩:
uv run tinypng_balancer.py source -o optimized --recursive
转换为 WebP:
uv run tinypng_balancer.py source -o optimized --convert webp
同时输出源格式和 WebP:
uv run tinypng_balancer.py source -o optimized --convert source --convert webp
输出全部格式:
uv run tinypng_balancer.py source -o optimized --convert all
试运行:
uv run tinypng_balancer.py source -o optimized --dry-run
跳过启动前官方额度同步:
uv run tinypng_balancer.py source -o optimized --no-sync-usage
常见问题
提示 No module named 'tinify'
请使用 uv run 启动:
uv run tinypng_gui.py
或者双击 run_gui.bat。
没有找到图片
确认图片放在输入目录中。默认输入目录是:
C:\dev\py\tinypng\source
支持的扩展名包括:
.png .jpg .jpeg .webp .avif
API Key 不可用
检查 tinify_keys.json 中是否写入了真实 Key。模板中的 YOUR_TINIFY_API_KEY_1 不能直接使用。
全部格式输出时额度消耗变多
这是正常的。因为每张图片会分别转换为 PNG、JPEG、WebP、AVIF 四种格式,每个输出都可能消耗 Tinify 额度。