【发布时间】:2015-06-17 15:03:10
【问题描述】:
我对 Qt(特别是 PySide)非常陌生,我正在尝试编写一个脚本,将动画 gif 从文件加载到 QByteArray 中,然后加载到 QMovie 中。从文件转到 QByteArray 的原因是因为我无法将该 gif 文件保存在内存中。我希望能够以这样一种方式存储动画 gif,以便稍后将其写入 JSON 文件(因此是 QByteArray)。我尝试使用来自 here 的 ekhumoro 的回答,虽然没有出现错误,但动画 gif 也没有出现。 (那里可能有东西,但我什么也没看到。)简而言之,我的代码如下所示:
data = open("img.gif", "rb").read()
self.bArray = QtCore.QByteArray(data)
self.bBuffer = QtCore.QBuffer(self.bArray)
self.bBuffer.open(QtCore.QIODevice.ReadOnly)
self.movie = QtGui.QMovie(self.bBuffer, 'GIF')
self.movieLabel.setMovie(self.movie) # a QLabel
self.movie.start()
我想稍后将self.bArray 的内容存储到 JSON 文件中。
当我为 QMovie 构造函数提供文件路径时,我可以看到动画 gif,但是我将无法将 gif 的内容保存到 JSON 文件。
我想知道数据是否未正确读取或未正确传递给 QMovie。
有什么想法吗?
谢谢!
【问题讨论】:
-
只是为了确保在创建ByteArray和Buffer时没有恶作剧:你能把缓冲的数据写出来,结果还是同样的动画gif吗?另外,您打算如何将 gif 编码为 JSON?二进制数据编码并不完全是 JSON 的强项(并且非标准化)
-
@deets。 base64 似乎是最明显的解决方案。
-
我没有检查 ByteArray 和 Buffer 但我看不出为什么数据会被损坏。另外,根据下面的 ekhumoro 的建议,我可以让第一帧出现,所以看起来没问题。是的,我正计划使用 base64。
标签: json qt pyside animated-gif