python - 尝试将图标添加到我的可执行文件中,但仍显示 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
解决方案
我看不出你的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来完成该任务。
打开您的基本图像(jpeg、png 等),例如
mylogo.png
在 GIMP 中。(如果你没有,你可以尝试在 GIMP 中打开你的ico
文件mysnake.ico
,看看你是否可以从那里提取它)在 GIMP 中,使用
Image>Scale Image
,然后File>Export As...
,创建具有不同分辨率的图像的多个版本:mylogo_16x16.png
mylogo_32x32.png
mylogo_64x64.png
mylogo_128x128.png
在 GIMP 中
File>Open
,然后选择最高分辨率的图像在 GIMP 中
File>Export As...
,选择所需ico
文件的名称,例如mylogo.ico
推荐阅读
- c++ - C++向量构造函数实现
- github - 审计日志导出和聚合
- terraform - 使用 Terraform 在 Linux VM 上运行脚本扩展
- amazon-web-services - 部署 EKS 的 CDK 代码更新时 AssetParameters 发生变化
- node.js - 无法连接到 socket.io 服务器
- java-8 - 即使数据库实例关闭,CrudRepository 计数方法也会返回结果
- esp32 - 带有 esp32 的 Enc28j60 模块挂起
- curl - cURL NTLM 对 IIS8.5 的授权失败
- c# - 有没有办法在 bunit 测试中设置 OnAfterRender 方法的 firstRender-Variable?
- r - 使用 taskscheduleR 将任务计划程序设置为特定日期?