如何使用Linux显示动画gif



我想在Linux中从python控制台打开一个GIF图像。通常,当打开.png.jpg时,我会执行以下操作:

>>> from PIL import Image                                                                                
>>> img = Image.open('test.png')
>>> img.show()

但如果我这样做:

>>> from PIL import Image                                                                                
>>> img = Image.open('animation.gif')
>>> img.show()

Imagemagick将打开,但只显示gif的第一帧,而不显示动画。

有没有一种方法可以在Linux的查看器中显示GIF的动画?

Image.show将图像转储到一个临时文件,然后尝试显示该文件。它调用ImageShow.Viewer.show_image(参见/usr/lib/python2.7/dist-packages/PIL/ImageShow.py):

class Viewer:
    def save_image(self, image):
        # save to temporary file, and return filename
        return image._dump(format=self.get_format(image))
    def show_image(self, image, **options):
        # display given image
        return self.show_file(self.save_image(image), **options)
    def show_file(self, file, **options):
        # display given file
        os.system(self.get_command(file, **options))
        return 1

AFAIK,标准PIL无法保存动画GIF1

Viewer.save_image中的image._dump调用仅保存第一帧。因此,无论随后调用什么查看器,您都只能看到一个静态图像。

如果你有Imagemagick的display程序,那么你也应该有它的animate程序。因此,如果你已经有GIF作为一个文件,那么你可以使用

animate /path/to/animated.gif

要在Python中执行此操作,可以使用子流程模块(而不是img.show):

import subprocess
proc = subprocess.Popen(['animate', '/path/to/animated.gif'])
proc.communicate()

1根据kostmo的说法,有一个脚本可以用PIL保存动画GIF。


要在不阻塞主进程的情况下显示动画,请使用单独的线程生成animate命令:

import subprocess
import threading
def worker():
    proc = subprocess.Popen(['animate', '/path/to/animated.gif'])
    proc.communicate()
t = threading.Thread(target = worker)
t.daemon = True
t.start()
# do other stuff in main process
t.join()

linux打开gif

我用Fedora 17做到了这一点:

el@defiant ~ $ sudo yum install gifview
---> Package gifview.x86_64 0:1.67-1.fc17 will be installed
curl http://i.imgur.com/4rBHtSm.gif > mycat.gif
gifview mycat.gif

出现一个窗口,您可以穿过gif的框架。

最新更新