首页 > 解决方案 > 尝试将图标添加到我的可执行文件中,但仍显示 OSError [errono22]。不知道发生了什么

问题描述

.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

标签: pythonpyinstaller

解决方案


我看不出你的pyinstaller用法有什么问题,所以正如猜测的那样,问题肯定是ico使用的文件mysnake.ico

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

pyinstaller管理ico文件时做什么

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

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

  • idReserved(短/整数,2 字节)
  • idType(短/整数,2 字节)
  • idCount(短/整数,2 字节)

然后读取每个图像元数据(每个 16 个字节):

  • bWidth(有符号字符/整数,1字节)
  • bHeight(有符号字符/整数,1 字节)
  • bColorCount(有符号字符/整数,1 字节)
  • b 保留(有符号字符/整数,1 字节)
  • wPlanes(短/整数,2 字节)
  • wBitCount(短/整数,2字节)
  • dwBytesInRes(整数/整数,4 字节)
  • dwImageOffset(整数/整数,4 字节)

dwImageOffset然后在 location和 size处读取图像本身dwBytesInRes

在你的情况下,dwImageOffset似乎不是一个允许的值(一个正整数),因此是错误的。

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

从基本图像(jpeg、png 等)制作图标ico文件非常容易。如果您决定重做ico文件,我会推荐GIMP来完成该任务。

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

  2. 在 GIMP 中,使用Image>Scale Image,然后File>Export As...,创建具有不同分辨率的图像的多个版本: 在此处输入图像描述

    • mylogo_16x16.png
    • mylogo_32x32.png
    • mylogo_64x64.png
    • mylogo_128x128.png
  3. 在 GIMP 中File>Open,然后选择最高分辨率的图像

  4. 在 GIMP 中File>Open as Layers...,然后选择其他图像。以下是您应该得到的: 在此处输入图像描述

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


推荐阅读