2014-07-11 34 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)