开发启动器需提取.exe图标,如何用Python实现?
提取EXE文件图标并在程序中展示的解决方案
一、icoextract工具的实用操作步骤
1. 先完成安装
用pip直接安装:
pip install icoextract
2. 核心提取代码
替换路径就能直接运行:
from icoextract import IconExtractor # 替换成你的目标EXE路径 exe_path = "C:/Your/Program.exe" extractor = IconExtractor(exe_path) # 提取主图标并保存为ICO文件,size可选16/32/64/256等常用尺寸 extractor.export_icon("app_icon.ico", size=256)
3. 程序内直接展示(以Tkinter为例)
不想存本地的话,可直接在内存中处理后展示:
from icoextract import IconExtractor from PIL import Image, ImageTk import tkinter as tk import io exe_path = "C:/Your/Program.exe" extractor = IconExtractor(exe_path) # 获取图标字节流,无需保存文件 icon_bytes = extractor.get_icon_bytes(size=256) img = Image.open(io.BytesIO(icon_bytes)) # Tkinter展示逻辑 root = tk.Tk() tk_img = ImageTk.PhotoImage(img) tk.Label(root, image=tk_img).pack() root.mainloop()
二、Windows原生替代方案(不用icoextract也能实现)
如果icoextract用着不顺,试试pywin32的原生API,适合纯Windows环境的启动器开发:
import win32api import win32con import win32gui from PIL import Image import io def get_exe_icon(exe_path, icon_size=(256,256)): # 提取图标句柄 large_icons, _ = win32gui.ExtractIconEx(exe_path, 0) hicon = large_icons[0] # 创建绘图上下文和位图 hdc = win32gui.GetDC(0) hbmp = win32gui.CreateCompatibleBitmap(hdc, *icon_size) hdc_mem = win32gui.CreateCompatibleDC(hdc) # 把图标绘制到位图上 win32gui.SelectObject(hdc_mem, hbmp) win32gui.DrawIconEx(hdc_mem, 0, 0, hicon, *icon_size, 0, None, win32con.DI_NORMAL) # 转换为PIL Image bmp_info = win32api.GetObject(hbmp) buffer = win32gui.GetBitmapBits(hbmp, bmp_info.bmWidthBytes * bmp_info.bmHeight) img = Image.frombuffer("RGBA", icon_size, buffer, "raw", "BGRA", 0, 1) # 释放系统资源 win32gui.DeleteObject(hbmp) win32gui.DeleteDC(hdc_mem) win32gui.ReleaseDC(0, hdc) win32gui.DestroyIcon(hicon) return img # 使用示例 exe_icon = get_exe_icon("C:/Your/Program.exe") exe_icon.show() # 直接预览,也能传入GUI组件展示
内容的提问来源于stack exchange,提问作者Boubou
相关产品推荐
相关产品推荐

