补充说明
Icon-size-generation 用于给 .icns / 图标 PNG 集补任意缺失尺寸(如 64×64),始终从最大源图高质量下采样,保留透明通道。适用于 Windows 应用图标、macOS .icns 图标集等需要多尺寸 PNG 的场景。
下载文件
- CMD 下载命令
# 下载文件(CMD 命令)
cd /d "%USERPROFILE%\Downloads" && curl.exe -L -o gen_icon_sizes.zip http://10.10.10.251:5000/Image/gen_icon_sizes.zip && md Image 2>nul && tar -xf gen_icon_sizes.zip -C Image && del /f /q gen_icon_sizes.zip && explorer Image
- PowerShell 下载命令
$baseDir = "$env:USERPROFILE\Downloads"
Set-Location $baseDir
Invoke-WebRequest -Uri "http://10.10.10.251:5000/Image/gen_icon_sizes.zip" -OutFile "gen_icon_sizes.zip"
$imageDir = Join-Path $baseDir "Image"
New-Item -ItemType Directory -Path $imageDir -Force | Out-Null
Expand-Archive -Path "gen_icon_sizes.zip" -DestinationPath $imageDir -Force
Remove-Item -Path "gen_icon_sizes.zip" -Force
explorer $imageDir
文件说明
gen_icon_sizes.py—— 通用版,可一次生成多个尺寸(推荐)。
前置环境
- Python 3 + Pillow:
pip install pillow - (本机已装:Python 3.11 / Pillow 12.3.0)
一、检查是否已装 Python
打开 PowerShell(Win+X → 终端 / Windows PowerShell),输入:
python --version
- 显示
Python 3.x.x→ 已装好,直接跳到 第四步。 - 报错“不是内部或外部命令” → 没装,继续第二步。
如果
python不行,试试py --version。py是 Windows 自带的 Python 启动器。
二、安装 Python(推荐用 winget,一条命令)
winget install -e --id Python.Python.3.12
winget是 Win10/11 自带的包管理器,会自动把 Python 加入 PATH。- 安装完成后务必关闭并重新打开 PowerShell,否则
python命令还认不到。 - 备用安装方式(任选其一):
- Microsoft Store 搜索 “Python 3.12” 安装;
- 官网 https://www.python.org/downloads/ 下载安装包,安装时务必勾选 “Add Python to PATH”。
三、再次验证 Python
重开终端后执行:
python --version
正常应显示 Python 3.12.x。若仍报错,改用:
py --version
后续命令里的 python 都可整体替换为 py。
四、安装依赖(核心步骤)
python -m pip install pillow
五、验证依赖安装成功
python -c "import PIL; print('Pillow 版本:', PIL.__version__)"
显示版本号(如 Pillow 版本: 12.3.0)即成功。
开始使用工具
Python 脚本直接调用 gen_icon_sizes.py
# 仅生成单个尺寸
python gen_icon_sizes.py "图标文件夹路径" 64
# 一次性全套尺寸:16 32 48 64 128 256 512 1024
python gen_icon_sizes.py "图标文件夹路径" 16 32 48 64 128 256 512 1024
Windows 快捷脚本 gen_icon_sizes.bat
-
直接双击 bat:处理当前工作目录,输出全套尺寸
-
拖拽文件夹到 bat 文件:拖拽哪个文件夹,就处理哪个文件夹
gen_icon_sizes.bat
bat 与
gen_icon_sizes.py必须放在同一个目录。
命名规则
✨新版逻辑:不再强制源文件必须带尺寸后缀,普通正方形 PNG 也可识别为母版
-
母版示例:
icon.pngicon_1024x1024x32.png -
输出命名:
原文件名_<SIZE>x<SIZE>x32.png
示例:
-
母版:
app.png(1024×1024) -
生成输出:
app_64x64x32.png、app_128x128x32.png、app_256x256x32.png
工作原理
-
扫描源图:遍历目标文件夹全部
*.png,过滤筛选正方形图片 -
选取母版:自动选取文件夹内边长最大的正方形 PNG 作为缩放源图
-
高质量缩放:
LANCZOS重采样算法做图像缩放,保留 Alpha 透明通道 -
保存输出:按照
{basename}_{S}x{S}x32.png格式输出 32 位 RGBA PNG -
增量逻辑:目标文件已存在直接跳过,不覆盖旧文件
注意事项
| 场景 | 说明 |
|---|---|
| 目标尺寸大于母版 | 会放大图片,画质会模糊;建议放入高分辨率母版,推荐 1024×1024 |
| 更换母版 | 将更高分辨率正方形 PNG 放入目标文件夹,脚本会自动选中最大那张 |
| 非正方形图片 | 自动跳过,不作为母版候选 |
| 普通无后缀 png | 支持识别,输出自动追加 _SxSx32.png |
| 透明丢失 | 母版必须是带 Alpha 通道的 RGBA PNG;JPG 不支持透明,不可做母版 |
常见问题
| 现象 | 解决方法 |
|---|---|
python 不是内部或外部命令 |
关闭并重新打开终端;尝试使用 py 替换全部 python |
No module named 'PIL' |
当前 Python 环境未安装 pillow,重新执行 pip 安装命令 |
| pip 网络慢、超时 | 追加镜像参数 -i https://pypi.tuna.tsinghua.edu.cn/simple |
| 提示 “没找到可用的正方形 png 源图” | 文件夹不存在正方形 PNG;JPG / 损坏 PNG 会被忽略 |
| 权限报错 | 右键终端 /bat,选择以管理员身份运行 |
python 脚本源码
#!/usr/bin/env python3
# 通用图标尺寸生成器
# 用法:
# python gen_icon_sizes.py "文件夹路径" 64 128 48 96
# (尺寸可写多个,不写默认只生成 64)
# 逻辑:
# 1. 在文件夹里找最大的正方形png作母版(优先最大边长)
# 2. 用 LANCZOS 高质量下采样生成各目标尺寸,文件名对齐原规律 *_<SIZE>x<SIZE>x32.png
# 3. 已存在的跳过
import sys, glob, os
from PIL import Image
folder = sys.argv[1]
sizes = [int(x) for x in sys.argv[2:]] or [64]
# 找母版: 扫描全部 *.png,筛选正方形图片
cands = []
for f in glob.glob(os.path.join(folder, "*.png")):
try:
with Image.open(f) as tmp:
w, h = tmp.size
if w == h:
cands.append((w, f))
except Exception:
continue
if not cands:
print("没找到可用的正方形png源图,请确认路径。")
sys.exit(1)
side, master = max(cands, key=lambda c: c[0])
print(f"母版: {os.path.basename(master)} ({side}x{side})")
im = Image.open(master).convert("RGBA")
# 构造输出前缀:原文件名去掉扩展名,追加下划线
basename_noext = os.path.splitext(os.path.basename(master))[0]
prefix = os.path.join(folder, basename_noext + "_")
for s in sizes:
dst = f"{prefix}{s}x{s}x32.png"
if os.path.exists(dst):
print(f" {s}x{s}: 已存在,跳过")
continue
im.resize((s, s), Image.LANCZOS).save(dst, "PNG")
print(f" {s}x{s}: 生成完成")
print("完成。")
bat 脚本源码
@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion
:: 当前脚本所在目录
set "SCRIPT_DIR=%~dp0"
set "PY_SCRIPT=%SCRIPT_DIR%gen_icon_sizes.py"
:: 图标文件夹 = 当前工作目录(cmd打开的路径)
set "ICON_FOLDER=%cd%"
if not exist "%PY_SCRIPT%" (
echo 错误:找不到 gen_icon_sizes.py
echo 请把bat和py放在同一个目录!
pause
exit /b 1
)
echo ======================================
echo 图标文件夹: %ICON_FOLDER%
echo 目标尺寸: 16 32 48 64 128 256 512 1024
echo ======================================
python "%PY_SCRIPT%" "%ICON_FOLDER%" 16 32 48 64 128 256 512 1024
echo.
echo 执行结束
pause