Как отобразить анимированный GIF с Linux? - PullRequest
8 голосов
/ 28 января 2012

Я хочу открыть образ GIF из консоли python в Linux. Обычно при открытии .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, а не анимацию.

Есть ли способ показать анимацию GIF в средстве просмотра в Linux?

Ответы [ 2 ]

5 голосов
/ 28 января 2012

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 не может сохранять анимированные GIfs 1 .

Вызов image._dump в Viewer.save_image сохраняет только первый кадр.Таким образом, независимо от того, какой просмотрщик впоследствии вызывается, вы видите только статическое изображение.

Если у вас есть программа 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 , есть скрипт для сохранения анимированных GIF-файлов с PIL.


Для отображения анимации без блокировкиосновной процесс, используйте отдельный поток для запуска команды 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()
2 голосов
/ 03 марта 2014

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.

...