Python 试图将图标添加到我的可执行文件中,但保留声明的OSError[errono22]。不知道发生了什么事

Python 试图将图标添加到我的可执行文件中,但保留声明的OSError[errono22]。不知道发生了什么事,python,pyinstaller,Python,Pyinstaller,py文件没有问题,因为pyinstaller在没有添加图标的情况下可以完美地工作。因此,我认为问题可能与.ico图标文件有关 有人有解决这个问题的办法吗?我正在尝试使用以下方式添加图标: pyinstaller --onefile --windowed --icon=mysnake.ico SnakeGameGUI.py 以下是收到的错误: File "c:\users\BobJones\anaconda3\lib\site-packages/PyInstaller\utils\win32\i

py文件没有问题,因为pyinstaller在没有添加图标的情况下可以完美地工作。因此,我认为问题可能与.ico图标文件有关

有人有解决这个问题的办法吗?我正在尝试使用以下方式添加图标:

pyinstaller --onefile --windowed --icon=mysnake.ico SnakeGameGUI.py
以下是收到的错误:

File "c:\users\BobJones\anaconda3\lib\site-packages/PyInstaller\utils\win32\icon.py", line 118, in __init__
     file.seek(e.dwImageOffset, 0)
 OSError: [Errno 22] Invalid argument

我看不出您的
pyinstaller
使用中有任何错误,因此,正如猜测的那样,问题肯定是使用的
ico
文件
mysnake.ico

您的
ico
文件可能已损坏或与
pyinstaller
处理该文件的方式不兼容

管理
ico
文件时
pyinstaller
做什么

pyinstaller
以二进制模式打开图标文件
.ico

然后读取标题(6字节):

  • idReserved(短/整数,2字节)
  • idType(短/整数,2字节)
  • idCount(短/整数,2字节)
然后读取每个图像元数据(每个16字节):

  • bWidth(带符号字符/整数,1字节)
  • bHeight(带符号字符/整数,1字节)
  • bColorCount(带符号字符/整数,1字节)
  • bReserved(带符号字符/整数,1字节)
  • wPlanes(短/整数,2字节)
  • wBitCount(短/整数,2字节)
  • dwBytesInRes(整数/整数,4字节)
  • dwImageOffset(整数/整数,4字节)
然后在位置
dwImageOffset
和大小
dwBytesInRes
读取图像本身

在您的情况下,
dwImageOffset
似乎不是允许的值(正整数),因此会出现错误

您可以做些什么来解决您的问题

图标
ico
文件很容易从基本图像(jpeg、png等)生成。 如果您决定重做
ico
文件,我建议您执行该任务

  • 在GIMP中打开基本图像(jpeg、png等),例如
    mylogo.png
    。(如果没有,可以尝试在GIMP中打开
    ico
    文件
    mysnake.ico
    ,查看是否可以从中提取它)

  • 在GIMP中,使用
    图像>缩放图像
    ,然后
    文件>导出为…
    ,创建具有不同分辨率的图像的多个版本:

    • mylogo_16x16.png
    • mylogo_32x32.png
    • mylogo_64x64.png
    • mylogo_128x128.png
  • 在GIMP中,
    文件>打开
    ,然后选择最高分辨率的图像

  • 在GIMP中,
    文件>作为层打开…
    ,然后选择其他图像。以下是您应该得到的:

  • 在GIMP中,
    File>Export As…
    ,选择所需的
    ico
    文件的名称,例如
    mylogo.ico