编码和解码与pyglet一起使用的.gif文件,并使用pyinstaller制作成.exe文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编码和解码与pyglet一起使用的.gif文件,并使用pyinstaller制作成.exe文件相关的知识,希望对你有一定的参考价值。

我想用pyinstaller将.gif文件烘焙到.exe中。根据我的研究,我必须将gif编码为字符串并解码该字符串以实现此目的。编码字符串并解码字符串是有效的。尝试将其用作pyglet中的动画资源时出错。编码解码中的东西打破了gif?如果有另一种首选方式,请告诉我!

步骤1

import base64

with open("test.gif", "rb") as imageFile:
    image = base64.b64encode(imageFile.read())
    print(image)

第2步

将此字符串保存在.py文件中,如下所示:

image = b'AWggsegsegs/....'

第三步:

import pyglet
import base64
from gif_string import image


decodedgif = base64.b64decode(image) # Works this far
animation = pyglet.resource.animation(decodedgif) # Error here
sprite = pyglet.sprite.Sprite(decodedgif)

错误消息读取

Traceback (most recent call last):
  File "...pyglet
esource.py", line 583, in animation
    identity = self._cached_animations[name]
  File "...AppDataLocalProgramsPythonPython36libweakref.py", line 131, in __getitem__
    o = self.data[key]()
KeyError: b'GIF89a
...
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "...pyglet
esource.py", line 435, in file
    location = self._index[name]
KeyError: b'GIF89a
...
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "C:..., line 7, in <module>
    animation = pyglet.resource.animation(decodedgif) # Error here
  File "...pyglet
esource.py", line 585, in animation
    animation = pyglet.image.load_animation(name, self.file(name))
  File "...pyglet
esource.py", line 438, in file
    raise ResourceNotFoundException(name)
pyglet.resource.ResourceNotFoundException: Resource "b'GIF89ax00
...
...f9x88xc0xbexa4O"oxcfxe5x81x00x00;'" was not found on the path.
  Ensure that the filename has the correct captialisation.
答案

而不是只能加载文件的pyglet.resource.animation(),你应该使用pyglet.image.load_animation()。它的可选File参数支持file-like objects,所以你应该使用io.BytesIO()构造一个并将其传递给那里。

以上是关于编码和解码与pyglet一起使用的.gif文件,并使用pyinstaller制作成.exe文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 pyglet 应用程序和所有资源编译到一个 exe 文件中?

为啥块之间的 GIF 编码/解码中有这么多填充

python-tkinter如何打开动图(.gif)?

一起使用 pyglet 和 pyopengl 的问题

Android 提取解码编码多路复用音频

Pyglet Opengl VBO