58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
#!/usr/bin/env python3
|
|
"""将 PNG 图标转换为 ICO 格式"""
|
|
|
|
from pathlib import Path
|
|
|
|
def convert_png_to_ico():
|
|
"""将 icon.png 转换为 icon.ico"""
|
|
try:
|
|
from PIL import Image
|
|
except ImportError:
|
|
print("需要安装 Pillow: pip install Pillow")
|
|
return False
|
|
|
|
# 优先使用运行目录下的 icon 目录
|
|
cwd_icon = Path.cwd() / 'icon'
|
|
if (cwd_icon / 'icon.png').exists():
|
|
icon_dir = cwd_icon
|
|
elif (Path.cwd() / 'src' / 'icon' / 'icon.png').exists():
|
|
icon_dir = Path.cwd() / 'src' / 'icon'
|
|
else:
|
|
icon_dir = Path(__file__).parent
|
|
png_path = icon_dir / 'icon.png'
|
|
ico_path = icon_dir / 'icon.ico'
|
|
|
|
if not png_path.exists():
|
|
print(f"找不到 PNG 文件: {png_path}")
|
|
return False
|
|
|
|
try:
|
|
# 打开 PNG 图像
|
|
img = Image.open(png_path)
|
|
|
|
# 转换为 RGBA 模式(如果不是的话)
|
|
if img.mode != 'RGBA':
|
|
img = img.convert('RGBA')
|
|
|
|
# 创建多尺寸的 ICO 文件
|
|
sizes = [(16, 16), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)]
|
|
icons = []
|
|
|
|
for size in sizes:
|
|
resized = img.resize(size, Image.Resampling.LANCZOS)
|
|
icons.append(resized)
|
|
|
|
# 保存为 ICO
|
|
icons[0].save(ico_path, format='ICO', sizes=[(s[0], s[1]) for s in sizes])
|
|
|
|
print(f"已生成 ICO 文件: {ico_path}")
|
|
return True
|
|
|
|
except Exception as e:
|
|
print(f"转换失败: {e}")
|
|
return False
|
|
|
|
|
|
if __name__ == '__main__':
|
|
convert_png_to_ico()
|