Python 从二进制数据创建动画的快速方法 < >我有一个C++程序,它将二维网格的像素数据写入二进制文件。每个二进制文件可能有许多背靠背的网格状态,并且可能有多个这样的二进制文件
e、 我可以有10个二进制文件bin0,bin1,bin2。。。bin9每个包含10个栅格状态的数据,总共有100个栅格状态需要设置动画 我正在寻找一种从这些二进制文件中的网格状态创建动画的快速方法 我的最佳尝试是使用python和PIL.Image创建gif:Python 从二进制数据创建动画的快速方法 < >我有一个C++程序,它将二维网格的像素数据写入二进制文件。每个二进制文件可能有许多背靠背的网格状态,并且可能有多个这样的二进制文件,python,c++,image-processing,binaryfiles,animated-gif,Python,C++,Image Processing,Binaryfiles,Animated Gif,e、 我可以有10个二进制文件bin0,bin1,bin2。。。bin9每个包含10个栅格状态的数据,总共有100个栅格状态需要设置动画 我正在寻找一种从这些二进制文件中的网格状态创建动画的快速方法 我的最佳尝试是使用python和PIL.Image创建gif: import glob import numpy as np from PIL import Image from functools import partial def create_images(): paths = g
import glob
import numpy as np
from PIL import Image
from functools import partial
def create_images():
paths = glob.glob('./outfiles/dump*')
imgs = []
for path in sorted(paths, key=lambda x: int(x.split("p")[1])):
with open(path, 'rb') as ifile:
for dat in iter(partial(ifile.read, rows*cols), b''):
mem = memoryview(dat).cast('B', shape=[rows,cols])
arr = np.asarray(mem)
img = Image.fromarray(arr*255)
imgs.append(img)
return imgs
rows = 128
cols = 128
imgs = create_images()
imgs[0].save('./animation.gif', save_all=True, append_images=imgs[1:], loop=0)
但是如果我有数千张图像,每一张都有数千像素,那么我实际编写gif的最后一行可能需要很长时间。当图像较大时,gif的渲染质量也很差
期待关于如何使用不同于Pillow的库快速运行的建议。如果有更好的选择使用C/C++(或其他语言,但首选Python或C/C++),则不必为坚持使用Python而烦恼,动画也不必是gif
在我的例子中,我使用的是0或1的网格数据(上下文是Conway的生活游戏),因此利用这一点进行优化是受欢迎的。但是,请注意,当前每个1或0在二进制文件中占据一个完整的字节,因此没有打包到位中
编辑
只需添加一个helper python脚本来生成二进制文件,正如我上面为任何尝试过它的人所描述的那样
import numpy as np
rows = 128
cols = 128
img_per_file = 10
num_files = 3
filesize = rows*cols*img_per_file
for i in range(num_files):
filename = 'bin'+str(i)
data = np.random.randint(2, size=filesize, dtype=np.uint8).tobytes()
f = open(filename, 'wb')
f.write(data)
f.close()
您可以查找ffmpeg或imagemagick-这两个
c
库可以从python中作为外部进程调用。试试看,这是一个面向性能的图像库,似乎同时支持numpy和动画GIF。我还没有测试过它,但这看起来很好用:感谢这些建议,我将研究它们!请问你现在是什么时候?请以像素为单位给出相应的图像/文件数量和尺寸。你希望什么时候?速度比文件大小更重要吗?