随机
Enter 搜索 ↑↓ 切换 Esc 清空

Icon-size-generation

命令

Windows 图标尺寸生成工具

补充说明

Icon-size-generation 用于给 .icns / 图标 PNG 集补任意缺失尺寸(如 64×64),始终从最大源图高质量下采样,保留透明通道。适用于 Windows 应用图标、macOS .icns 图标集等需要多尺寸 PNG 的场景。

下载文件

# 下载文件(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
$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

文件说明

前置环境

一、检查是否已装 Python

打开 PowerShell(Win+X → 终端 / Windows PowerShell),输入:

python --version

如果 python 不行,试试 py --version。py 是 Windows 自带的 Python 启动器。


二、安装 Python(推荐用 winget,一条命令)

winget install -e --id Python.Python.3.12

三、再次验证 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

  1. 直接双击 bat:处理当前工作目录,输出全套尺寸

  2. 拖拽文件夹到 bat 文件:拖拽哪个文件夹,就处理哪个文件夹

gen_icon_sizes.bat

bat 与 gen_icon_sizes.py 必须放在同一个目录。

命名规则

✨新版逻辑:不再强制源文件必须带尺寸后缀,普通正方形 PNG 也可识别为母版

示例:

工作原理

  1. 扫描源图:遍历目标文件夹全部 *.png,过滤筛选正方形图片

  2. 选取母版:自动选取文件夹内边长最大的正方形 PNG 作为缩放源图

  3. 高质量缩放:LANCZOS重采样算法做图像缩放,保留 Alpha 透明通道

  4. 保存输出:按照 {basename}_{S}x{S}x32.png 格式输出 32 位 RGBA PNG

  5. 增量逻辑:目标文件已存在直接跳过,不覆盖旧文件

注意事项

场景 说明
目标尺寸大于母版 会放大图片,画质会模糊;建议放入高分辨率母版,推荐 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

相关命令