Visual Stuido 2022之四:桌面应用需要的组合式图标ico

Visual Stuido 2022之四:桌面应用需要的组合式图标icoVIsual Studio 中使用的图标通常有多种规格 便于满足于不同的分辨率要求 例如 一个 ico 文件中有多种规格这个图标如何生成呢 如果你已经有了一张 jpg 或者 png 的图 如何制作可用在 Visual Studio 下的 ico 文件呢

大家好,欢迎来到IT知识分享网。

VIsual Studio中使用的图标通常有多种规格,便于满足于不同的分辨率要求。例如:

Visual Stuido 2022之四:桌面应用需要的组合式图标ico

一个ico文件中有多种规格

这个图标如何生成呢,如果你已经有了一张jpg或者png的图,如何制作可用在Visual Studio下的ico文件呢? 不用线上的各种工具,基本都是一个规格,不能做多个组合一起的。

Python代码简单搞定

Python写个简单代码就可以,还有界面。

Visual Stuido 2022之四:桌面应用需要的组合式图标ico

选好图片,设定规格,直接生成

Visual Stuido 2022之四:桌面应用需要的组合式图标ico

效果

gitbash下: $ xxd All_16_256_VA.ico 00000000: 0000 0100 0600 1010 0000 0000 2000 f202 ............ ... #0600 标识有6张图 1010 第一张16*16 00000010: 0000 6600 0000 1818 0000 0000 2000 5d05 ..f......... .]. #1818 第二张24*24 00000020: 0000 5803 0000 2020 0000 0000 2000 1908 ..X... .... ... #2020 第三章 32*32 00000030: 0000 b508 0000 4040 0000 0000 2000 e116 ......@@.... ... 00000040: 0000 ce10 0000 8080 0000 0000 2000 263d ............ .&= 00000050: 0000 af27 0000 0000 0000 0000 2000 4f9c ...'........ .O. 00000060: 0000 d564 0000 8950 4e47 0d0a 1a0a 0000 ...d...PNG...... 00000070: 000d 4948 4452 0000 0010 0000 0010 0806 ..IHDR..........
Visual Stuido 2022之四:桌面应用需要的组合式图标ico

gitbash 下使用 xxd看ico的二进制形式

import tkinter as tk from tkinter import filedialog, messagebox from PIL import Image import os class IconGeneratorApp: def __init__(self, root): self.root = root self.root.title("ICO Generator") self.label = tk.Label(root, text="选择 PNG 文件:") self.label.pack(pady=10) self.file_path = tk.StringVar() self.entry = tk.Entry(root, textvariable=self.file_path, width=50) self.entry.pack(pady=5) self.browse_button = tk.Button(root, text="浏览", command=self.browse_file) self.browse_button.pack(pady=5) self.size_label = tk.Label(root, text="选择尺寸 (例如: 16,32,48):") self.size_label.pack(pady=10) self.size_entry = tk.Entry(root, width=50) self.size_entry.pack(pady=5) self.generate_button = tk.Button(root, text="生成 ICO", command=self.generate_ico) self.generate_button.pack(pady=20) def browse_file(self): filename = filedialog.askopenfilename(filetypes=[("PNG files", "*.png")]) if filename: self.file_path.set(filename) def generate_ico(self): png_path = self.file_path.get() sizes_input = self.size_entry.get() if not png_path or not sizes_input: messagebox.showerror("错误", "请确保选择 PNG 文件并输入尺寸。") return try: # 解析尺寸输入 sizes = [int(size.strip()) for size in sizes_input.split(",")] # 检查尺寸是否都是正整数 if any(size <= 0 for size in sizes): raise ValueError("所有尺寸必须是正整数。") # 检查尺寸是否是 ICO 支持的标准尺寸 valid_sizes = {16, 24, 32, 48, 64, 128, 256} if any(size not in valid_sizes for size in sizes): raise ValueError("尺寸必须是 ICO 支持的标准尺寸(16, 24, 32, 48, 64, 128, 256)。") ico_file_path = filedialog.asksaveasfilename(defaultextension=".ico", filetypes=[("ICO files", "*.ico")]) if not ico_file_path: # 用户可能取消了保存对话框 return sizeList = [] img = Image.open(png_path).convert('RGBA') # 确保图像模式为 RGBA for size in sizes: sizeList.append((size,size)) img.save(ico_file_path, format='ICO', sizes=sizeList) messagebox.showinfo("成功", f"ICO 文件已生成: {ico_file_path}") except FileNotFoundError: messagebox.showerror("错误", "PNG 文件不存在,请检查文件路径。") except ValueError as ve: messagebox.showerror("错误", f"尺寸输入错误: {ve}") except Exception as e: messagebox.showerror("错误", f"生成 ICO 文件时出错: {str(e)}") print(f"详细错误信息: {e}") # 打印错误信息到控制台 if __name__ == "__main__": root = tk.Tk() app = IconGeneratorApp(root) root.mainloop()

ICO文件格式

Visual Stuido 2022之四:桌面应用需要的组合式图标ico

ICO文件的格式

Visual Stuido 2022之四:桌面应用需要的组合式图标ico

ICO条目的内容

参考资料:

  1. ico的文件格式 https://docs.fileformat.com/image/ico/
  2. Iso8583BitmapParser https://gitee.com/wapuboy/vs2022.git
  3. python icofrompng https://gitee.com/wapuboy/learning-programming-with-gauss.git

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/108129.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信