使用Python实现ICO文件生成工具
使用Python实现ICO文件生成工具
ICO文件通常用于表示桌面图标,如应用程序图标、快捷方式图标等。开发者在开发Windows应用程序时,会使用ICO文件作为应用程序的图标。Windows应用程序会在窗口标题栏、任务栏或程序窗口的左上角显示一个图标,这些图标也通常是ICO格式。
允许用户选择一个图像文件并将其转换为ICO文件。
用户可以使用复选框选择不同的尺寸(如16x16、32x32、256x256)来生成ICO文件。
注意:原图像尺寸需大于等于所选ICO文件尺寸,否则自动跳过无法生成的尺寸。
生成的ICO文件文件和用户选择一个图像文件在同一个文件夹中。
运行效果图:
本程序需要使用 第三方pillow库(PIL库)。关于pillow(PIL)的安装使用介绍可见: https://blog.csdn.net/cnds123/article/details/126141838
源码:
import tkinter as tk
from tkinter import filedialog
from PIL import Image
import os
SUPPORTED_EXTENSIONS = ('.png', '.jpg', '.jpeg', '.gif', '.bmp')
DEFAULT_SIZES = [16, 32, 64, 128, 256]
def convert_images_to_ico(image_path, selected_sizes):
if not os.path.exists(image_path):
file_name = os.path.basename(image_path)
result_label.config(text=f"错误:文件 {file_name} 不存在。")
return
if not any(image_path.lower().endswith(ext) for ext in SUPPORTED_EXTENSIONS):
file_name = os.path.basename(image_path)
result_label.config(text=f"错误:不支持 {file_name} 的格式。")
return
try:
image = Image.open(image_path)
success_sizes = []
failed_sizes = []
for size in selected_sizes:
# 检查图像尺寸是否足够
if image.width < size or image.height < size:
failed_sizes.append(f"{size}x{size}")
continue
# 转换为RGBA模式以支持透明度
img = image.convert("RGBA")
# 调整图像尺寸
resized_image = img.resize((size, size), Image.Resampling.LANCZOS)
# 生成文件名
base_name = os.path.splitext(os.path.basename(image_path))[0]
ico_path = os.path.join(
os.path.dirname(image_path),
f"{base_name}_{size}x{size}.ico"
)
# 关键修改:强制使用PNG编码
resized_image.save(
ico_path,
format="ICO",
png=True # 强制使用PNG格式编码
)
# 保存为单尺寸ICO文件
resized_image.save(ico_path, format="ICO")
success_sizes.append(f"{size}x{size}")
# 生成结果报告
report = []
if success_sizes:
report.append(f"成功生成 {len(success_sizes)} 个文件:{', '.join(success_sizes)}")
if failed_sizes:
report.append(f"跳过 {len(failed_sizes)} 个尺寸:{', '.join(failed_sizes)}(原图太小)")
result_label.config(text="\n".join(report))
convert_button.config(state=tk.DISABLED)
except Exception as e:
result_label.config(text=f"致命错误:{str(e)}")
def select_image_file():
file_path = filedialog.askopenfilename(filetypes=[("图像文件", "*.png;*.jpg;*.jpeg;*.gif;*.bmp")])
if file_path:
file_entry.delete(0, tk.END)
file_entry.insert(0, file_path)
convert_button.config(state=tk.NORMAL)
result_label.config(text="") # 清除旧提示
def start_conversion():
selected = [int(size.get()) for size in size_vars if size.get() != ""]
if not selected:
result_label.config(text="错误:请至少选择一个尺寸!")
return
convert_images_to_ico(file_entry.get(), sorted(selected))
# 创建GUI界面
root = tk.Tk()
root.title("多尺寸ICO生成工具")
root.geometry("500x400")
root.resizable(False, False)
# 文件选择组件
select_button = tk.Button(root, text="选择图像文件", command=select_image_file)
select_button.pack(pady=10)
file_entry = tk.Entry(root, width=55)
file_entry.pack(pady=5)
# 尺寸选择面板
size_frame = tk.LabelFrame(root, text="选择需要生成的尺寸(可多选)")
size_frame.pack(pady=10, padx=20, fill=tk.X)
size_vars = []
for i, size in enumerate(DEFAULT_SIZES):
var = tk.StringVar()
# 默认勾选256x256和32x32
if size in [32, 256]:
var.set(str(size))
cb = tk.Checkbutton(
size_frame,
text=f"{size}x{size}",
variable=var,
onvalue=str(size),
offvalue=""
)
cb.grid(row=i//3, column=i%3, sticky=tk.W, padx=5, pady=2)
size_vars.append(var)
# 转换按钮
convert_button = tk.Button(root, text="生成多个ICO文件", command=start_conversion)
convert_button.pack(pady=15)
# 结果提示
result_label = tk.Label(root, text="", wraplength=450, justify="left")
result_label.pack()
root.mainloop()
打包发布
PyInstaller 是一个流行的 Python 打包工具,可以将 Python 应用程序及其依赖项打包成单个可执行文件(如 Windows 上的.exe 文件)。PyInstaller 的核心功能是将 Python 脚本及其依赖的模块和资源文件打包成一个独立的可执行文件。
对于非技术用户来说,运行一个独立的可执行文件比安装 Python 环境和依赖库要简单得多。
对于开发者来说,可以将程序打包成一个文件或一个目录,方便分发和部署。
官方文档 https://pyinstaller.org/en/stable/
关于pyinsatller安装使用可参见:
使用pyinsatller将python程序项目发布为可执行文件(修订版)https://blog.csdn.net/cnds123/article/details/115254418
为方便,我这里将本游戏命名为:图标生成工具.py ,将之复制到文件夹 “D:\图标生成”中。
打开命令行(终端)窗口,并导航到. py文件所在的目录,然后使用以下命令构建您的应用程序:
cd /d D:\图标生成
pyinstaller -F -w图标生成工具.py
-F或--onefile:将 Python 脚本及其所有依赖项打包成一个单独的可执行文件(例如 .exe 文件)。
使用 -w 或 --windowed 选项,你可以确保打包后的程序在运行时不显示控制台窗口,从而提供更干净的用户体验。
OK!