2014-07-11 82 views
1

我一直在iOS上玩弄Pythonista来创建一些自动化脚本。使用python脚本抓取动画gif

我有一个问题,我试图从远程URL获取动画gif。我已经提出了以下脚本。

import Image 
from urllib import urlopen 
from io import BytesIO 

url = "http://someurl.com/funny.gif" 
img = Image.open(BytesIO(urlopen(url).read())) 

我得到的图像,但它似乎只是gif的第一帧?我猜这与BytesIO没有阅读整个文件有关,但我不确定?

希望我沿着正确的路线。

+0

我宁愿说它与你如何打开并处理图像。 'urlopen'有什么关系,它下载了什么样的URI,你会以同样的方式抓取HTML和二进制文件?尝试将其保存为文件,然后使用外部工具打开。 – luk32

+0

它似乎并没有将它作为一个gif保存下来?也许有一种不同的方式可以读取文件? – calabi

+1

你有没有尝试保存文件,而不是图像?你不显示任何代码。你只需打开URL并从中创建一个Image对象。 – luk32

回答

2

你快到了。您使用img.seek来推进帧。所以..

import Image 
from urllib import urlopen 
from io import BytesIO 
url = 'http://upload.wikimedia.org/wikipedia/commons/2/2c/Rotating_earth_%28large%29.gif' 

img = Image.open(BytesIO(urlopen(url).read())) 

# Start with first frame 
img.seek(0) 
#img.show() 

# Advance by one 
img.seek(img.tell() + 1) 
#img.show() 

Here's a SO post显示如何使用Image类保存gif。

1

根据Pillow Manual

要保存所有的帧,SAVE_ALL参数必须是存在并设置为True。

因此,打开的图像可以保存方式:

image.save('filename.gif', save_all=True)