如何为使用PyInstaller打包的Windows、MacOS和Linux应用程序创建快捷方式图标

4

我正在构建一个Python应用程序,使用PyInstaller捆绑到Windows、Linux(作为AppImage)和MacOS上。

我需要为这些平台创建快捷方式图标。我有一个标志,但我很难将其转换为正确的格式。似乎这三个平台使用不同的图标大小和格式。

是否有任何在线/离线生成器可以从jpg文件创建适用于这三个平台的图标?


你使用了哪种编程语言? - Doan Van Thang
问题中的标签非常重要。你应该选择比图标更多的内容。 - James Z
@DoanVanThang 我正在编写一个Python应用程序,它被分发为pyinstaller可执行文件(在Linux上包装为AppImage)。 - Tom Atix
请检查pyinstaller https://pyinstaller.readthedocs.io/en/stable/usage.html中的`icon`参数,并搜索在线PNG到ICO、ICNS转换器。 - paiv
4个回答

5

Tom!我给你找到了解决方案!请前往此处网站并将您的图片转换为icns格式。然后在pyinstaller中运行以下命令:-

pyinstaller pythonfile.py -F --i=icon_name.icns -noconsole

它的运行良好。

如果你想在Windows文件中为python.py添加图标,可以尝试以下方法:-

如果您正在使用pygame,请使用此代码:

icon = pygame.image.load('icon.png')
pygame.display.set_icon(icon)

如果您正在使用TKinter,请使用以下代码:

screen = Tk()

photo = PhotoImage(file = "Any image file")
screen.iconphoto(False, photo)

如果您想在文件完成后添加图标,请使用 Pyinstaller:-
pip install pyinstaller

在pyinstaller中,使用以下命令:

pyinstaller pythonfile.py -F --i icon_name.ico -noconsole

关于此事的一些信息:-

  • -F指定只生成一个 .exe 文件,而不是多个文件。
  • 请访问此网站以获取更多信息。
  • 如果您不使用 GUI,请使用以下命令:pyinstaller pythonfile.py -F --i icon_name.ico -nowindowed

希望这能对您有所帮助!


1
抱歉进行了两次编辑。这是因为事情有些混乱。 - Dr. Strange Codes
1
谢谢回答,不过我是在问如何生成图标文件。 - Tom Atix
请前往此网站:https://image.online-convert.com/convert-to-ico - Dr. Strange Codes
1
但是这对所有三个平台都适用吗? - Tom Atix
1
请查看我的编辑答案,它是否有效?请尝试后回复。谢谢。 - Dr. Strange Codes

2

根据您的要求,您只需要将徽标从jpg转换为相应操作系统的图标文件,然后尝试使用Pillow的图像转换器。

这段代码将生成所有操作系统(Mac、Win、Linux)的图标文件。

from PIL import Image
filename = r'logo.jpg' # the directory of logo file
img = Image.open(filename) # reads the JPG file

# Generate and save the logo files
img.save('Win_logo.ico')   # On windows, icon file extension is .ico
img.save('Mac_logo.icns')  # On Mac OS, icon file extension is .icns
# Note: Creating icns requires Mac OS
img.save('Linux_logo.png') # in case if your AppImage requires any logo file

可选地,您可以指定您想要的图标大小(适用于 Windows):

icon_sizes = [(16,16), (32, 32), (48, 48), (64,64)]
img.save('logo.ico', sizes=icon_sizes)

默认情况下,Pillow文档中说明会生成以下尺寸的图标:[(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (255, 255)] ,而任何大于原始尺寸或 255 的尺寸都将被忽略。
如需更多信息,请查阅Pillow文档
由于Pyinstaller是基于操作系统的,而ICNS也是根据操作系统生成的。
更多关于操作系统的信息请参考。
from platform import system as OS_Name
os_name = OS_Name()
filename = r'logo.jpg' # the directory of logo file
img = Image.open(filename) # reads the JPG file

# Generate and save the logo files
if os_name == 'Windows': img.save('Win_logo.ico')   # On windows, icon file extension is .ico
if os_name == 'Darwin' : img.save('Mac_logo.icns')  # On Mac OS, icon file extension is .icns
# on Linux the os_name is 'Linux'
img.save('Linux_logo.png') # in case if your AppImage requires any logo file

跨操作系统的ICNS图标文件制作

最好的跨操作系统制作方式是在线制作。 Cloud Convert 是一个很棒的工具。但是,您必须先将您的jpg文件转换为png格式。[注意:始终尝试使用png格式来制作标志,因为它们具有透明度和更方便] 您可以使用上面代码中的PNG部分自动将JPG转换为PNG,或使用JPG to PNG。最后,使用PNG to ICNS将您的PNG文件转换为ICNS文件。


需要检查一下这个是否可行,如果是的话,那就正好符合我的要求。但是你的意思是img.save('Mac_logo.icns')对吧?这是一个打字错误,文件扩展名中少了一个s? - Tom Atix
有两个扩展名是 icnicns,由于我没有 Mac,现在有点困惑。重新检查一下... - Ratul Hasan
追踪(Traceback)(最近一次调用最后的函数在最上面): 在“createicons.py”文件中,第7行,在img.save('Mac_logo.icns')之前, 图片格式为Mac OS图标文件.icns。 在“/usr/lib/python3/dist-packages/PIL/Image.py”文件中,第1983行, save方法出现了问题, 无法识别图标保存格式ICNS。 - Tom Atix
正如我在代码中所评论的[稍后更新],就像PyInstaller一样,您需要Mac OS来创建Mac可执行文件和icns文件。如果您有Mac电脑,那么它应该可以正常工作。操作系统特定的东西确实让程序员头疼。检查是否有任何在线API并发布新答案以适用于任何操作系统。 - Ratul Hasan
啊好的 - 那我就在 Mac 上做,应该没问题了。 - Tom Atix

1

如果你只是想简单地使用 auto-py-to-exe,那会更容易些。它使用 pyinstaller,但会自动生成命令,因此你可以将图像上传到 GUI。


0

如果您想将PNG转换为ICO格式,您可以使用像this这样的PNG到ICO转换器(在线)。由于所有平台都支持.ICO格式文件,这将是您的一站式解决方案。

首选图标大小为96px x 96px的正方形(高质量)或48px x 48px的正方形(中等质量)。

此外,要为pyinstaller设置应用程序的图标,您可以在使用命令行创建安装程序时指定图标路径。

pyinstaller --onefile --windowed --icon=app.ico app.py

这将创建一个包含指定图标的应用程序安装程序。


Mac OSX真的也支持这些吗?我以为它们需要额外的格式。我不知道这一点。 - Tom Atix
@TomAtix 这个链接对你有帮助吗? - Just Mohit
所以这里说.ico只适用于Windows,对于OSX我需要另一种格式...ico在Linux上可行吗?还是我也需要另一种格式? - Tom Atix
我认为Mac本地支持.icns文件。Linux更支持PNGXPMSVG格式在此处。对于Windows来说,它是.ico文件。我知道在创建多平台应用程序时需要关注很多细节,但这就是现实。 - Just Mohit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接