使用py2exe在.exe中嵌入图标,在Vista中可见?
Posted
技术标签:
【中文标题】使用py2exe在.exe中嵌入图标,在Vista中可见?【英文标题】:Embedding icon in .exe with py2exe, visible in Vista? 【发布时间】:2010-10-06 05:39:46 【问题描述】:我一直在尝试使用 py2exe 将图标 (.ico) 嵌入到我的“编译”.exe 中。
Py2Exe 确实有嵌入图标的方法:
windows=[
'script':'MyScript.py',
'icon_resources':[(1,'MyIcon.ico')]
]
这就是我正在使用的。该图标在 Windows XP 或更低版本上显示正常,但在 Vista 上根本不显示。我想这是因为新的 Vista 图标格式,它可以是 PNG 格式,最大 256x256 像素。
那么,我怎样才能让 py2exe 将它们嵌入到我的可执行文件中,而不破坏 Windows XP 上的图标?
我很喜欢使用外部实用程序而不是 py2exe 来执行此操作 - 我已尝试将 this command-line utility 嵌入它,但它总是会损坏我的 exe 并出于某种原因截断其大小。
【问题讨论】:
【参考方案1】:Vista 使用高分辨率256x256 像素图像的图标,它们使用基于PNG 的压缩方式存储。问题是,如果您只是制作图标并将其保存为标准 XP ICO
格式,则生成的文件将在磁盘上为 400Kb
。解决方案是压缩图像。使用的压缩方案是PNG
(Portable Network Graphic),因为它具有良好的无损率,并且支持alpha通道。
并使用
png2ico myicon.ico logo16x16.png logo32x32.png logo255x255.png
它从 1 个或多个 PNG
中创建一个 ICO
文件并处理多种大小等。我猜 XP 对此没有问题。
【讨论】:
png2ico 创建的图标确实有效,但 png2ico 拒绝使用我的图标的 256x256 PNG 版本,它只需要更小的尺寸。 (上面写着:“宽度必须是 8 的倍数且 也许让您的最大分辨率为 255x255?我想它看起来不会有太大不同.. 我用 png2ico 生成了一个有效的图标(使用最大大小为 248)并在 py2exe setup.py 中正确指定了它,但它仍然不会显示为生成的 exe 图标探险家。 Resource Hacker 显示图标嵌入在 exe 中,但 Explorer 没有。这很奇怪。 作为此答案的后期说明:如果您刚刚将图标添加到您的 .exe 文件,并且您有一个不断覆盖相同 .exe 文件的构建脚本,资源管理器将不会显示您的新图标,因为它将“缓存” .exe 没有图标的事实。重新启动 explorer.exe(不仅仅是关闭/重新打开窗口)可以解决这个问题。 注意:正如@Helmut 下面提到的,必须颠倒顺序。秩序很重要。另外,我使用 248x248 但不确定什么是最好的:png2ico.exe myico.ico myico248x248.png myico48x48.png myico32x32.png myico16x16.png
来自 py2exe 站点:py2exe.org/index.cgi/CustomIcons【参考方案2】:
正如 Helmut 所说,似乎图标大小的顺序是关键。 反转页面(首先是更大的页面)解决了 Windows 7 上“include_resources”的问题(使用 Py2exe 0.6.9)。
【讨论】:
【参考方案3】:我在使用包含 32x32 像素图像的 .ico 文件在 Windows7 上使用 py2exe 嵌入图标资源时遇到问题。我使用的方法与原始问题相同。
一旦编译,exe上的图标就会消失。在调查中,根据Resource Hacker 工具,图标被添加到索引 0,但是如果我使用相同的工具替换图标,它会被添加到索引 1。一旦在索引 1,图标就会神奇地出现在资源管理器中,再次针对 exe .
如果绝望,你可以使用 Resource Hacker 来修改 exe post-build,它可以通过命令行界面编写脚本,但我尝试了上面解释的方法,并在像这样反转 png 文件后设法让它工作。
png2ico.exe myico.ico myico248x248.png myico48x48.png myico32x32.png myico16x16.png
顺便说一句,通过将多个图标添加到 ico 文件,您将在图标索引 1 处填充资源,在本例中为 myico248x248.png。
【讨论】:
我遇到了同样的问题。一旦我将多个图像包装到图标文件中,它终于可以工作了。 我遇到了这个问题,但myicon248x248.png
仍然会在资源 0 处结束。请参阅 ***.com/a/36116599/57461【参考方案4】:
Greenfish Iceon Editor Pro 的链接已损坏。 我扫了网发现Download IcoFX 在我的 .exe 文件上使用了 IcoFX 程序,可以看到它确实包含我的图标。
使用菜单 Image->Create Windows Icons from Image,然后接受选择,我得到了一个新的 .ico 文件,该文件可在 win7 和 win xp 上运行。
在此之前,我的单个 48x48.ico 文件只是没有显示为程序的图标。
【讨论】:
只是想说,IcoFX 工作完美,支持我们标志的 alpha 通道。 Png2ico 工作,但我们的图标看起来像素化,对于专业应用程序来说还不够好。尽管如此,Png2ico 是免费的,而 IcoFX 不是(虽然有免费试用版,您可以使用它导出)。要在 IcoFX 中制作正确的图标,这非常简单——我只是将它从 256x256 .PNG 格式拖放到其中,单击保存,然后它制作了一个 Windows 图标,其中包含所有适用于 Py2exe 的格式。 (包括旧操作系统的低分辨率格式。)以上是关于使用py2exe在.exe中嵌入图标,在Vista中可见?的主要内容,如果未能解决你的问题,请参考以下文章