简单地说,我想在Image
申请中使用由pythonmagick
创建的tkinter
。
简而言之,我的目标是在tkinter中显示动画GIF。最不方便用户的方法是让最终用户从他们的GIF / AVI /等生成一系列图像。以他们喜欢的任何方式,然后告诉应用程序图像在哪里,以便它可以使用after
循环它们。
为了增加一些便利性,带有convert
的命令行ImageMagick可执行文件可以包含在应用程序中,并在用户选择GIF时自动调用。然而,这仍然会在用户的硬盘驱动器周围留下一堆图像文件,并且应用程序必须与每个操作系统的ImageMagick可执行文件捆绑在一起,这可能会导致兼容性问题。
理想情况下,用户的GIF将完全转换为内存中的一系列图像,然后变为Image
与tkinter
或pillow
兼容(我的应用程序使用) pillow
接受各种格式而不仅仅是GIF和PGM / PPM),然后动画。
我认为这是pythonmagick
可以起作用的地方。
学习pythonmagick
的基本用法是一回事,但我不知道在哪里可以了解如何将pythonmagick
Image
转换为tkinter
一个。
pythonmagick
的完整文档似乎是this text file。它确实包含将pythonmagick
Image
转换为PIL
Image
的示例,但它不起作用:
img = PythonMagick.Image(magickimage) # make copy
img.depth = 8 # this takes 0.04 sec. for 640x480 image
img.magick = "RGB"
data = img.data
w, h = img.columns(), img.rows()
# convert string array to an RGB Pil image
pilimage = Image.fromstring('RGB', (w, h), data)
pythonmagick
Image
s不包含data
属性。我尝试了pythonmagick
Blob
一点点,但我不知道它在做什么或它是如何工作的。我尝试运行上面的代码,将img.data
替换为我之前保存的blob.data
(通过this SO question),但它给了我以下内容:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 0: invalid start byte
我还尝试使用im = Image.frombytes('I', (400, 145), blob.data)
从字节而不是字符串(通过this SO question)创建图像,但这也不起作用。
也许它很简单,但我有一种感觉我离开了。清理完毕后,我会考虑使用pythonmagick
分割GIF。