我正在尋找一些有用的方法來獲得GIF幀數。我正在尋找谷歌,stackoverflow和任何outher網站,我只找到垃圾!有人知道如何做到這一點?我只需要簡單數量的gif幀。Python,我怎麼可以得到GIF幀
5
A
回答
10
您使用哪種方法來加載/操作框架?你在使用PIL嗎?如果不是,我建議檢查一下:Python Imaging Library,特別是the PIL gif page。
現在,假設您使用PIL來讀取gif,確定您正在查看的幀是一件非常簡單的事情。 查詢將轉到特定的框架,並且告訴將返回您正在查看的框架。
import Image
im = Image.open("animation.gif")
# To iterate through the entire gif
try:
while 1:
im.seek(im.tell()+1)
# do something to im
except EOFError:
pass # end of sequence
否則,我相信你只能通過尋求到一個異常(引發EOFError)提高發現在GIF的幀數。
12
只是解析文件,圖檔是非常簡單的:
class GIFError(Exception): pass
def get_gif_num_frames(filename):
frames = 0
with open(filename, 'rb') as f:
if f.read(6) not in ('GIF87a', 'GIF89a'):
raise GIFError('not a valid GIF file')
f.seek(4, 1)
def skip_color_table(flags):
if flags & 0x80: f.seek(3 << ((flags & 7) + 1), 1)
flags = ord(f.read(1))
f.seek(2, 1)
skip_color_table(flags)
while True:
block = f.read(1)
if block == ';': break
if block == '!': f.seek(1, 1)
elif block == ',':
frames += 1
f.seek(8, 1)
skip_color_table(ord(f.read(1)))
f.seek(1, 1)
else: raise GIFError('unknown block type')
while True:
l = ord(f.read(1))
if not l: break
f.seek(l, 1)
return frames
相關問題
- 1. 我怎麼能從python得到char * []
- 2. 我怎麼可以在dictonary在python
- 3. 我怎麼可以得到所有產品,我買
- 4. 我怎麼可以得到所有查看使用API
- 5. 我怎麼可以得到所有在MSMQ隊列
- 6. 我怎麼可以得到存儲在列表
- 7. 我怎麼能得到index.android.bundle?
- 8. 我怎麼得到的ObservableCollection
- 9. 我怎麼可以在Android
- 10. 我怎麼可以在Java
- 11. 我怎麼可以在C
- 12. 我怎麼可以在iPhone
- 13. 我怎麼可以在Qt
- 14. 我怎麼可以在SQL
- 15. 我怎麼可以用XML
- 16. 我怎麼玩9 gag的gif?
- 17. 我可以在ActionScript中使GIF動畫幀更快播放嗎?
- 18. c - 爲什麼我會得到這個SIGSEGV?我怎麼知道一個結構可以得到多少內存?
- 19. 我我怎麼可以檢測RStudio
- 20. 怎樣可以得到Q上
- 21. 我怎麼在Python
- 22. Python的 - 怎麼可能我得到了一些擺脫小數像「2345.67」
- 23. 我怎麼火花數據幀轉換爲RDD並獲得話
- 24. Komodo Macro可以做什麼,如果可以,我該怎麼做?
- 25. 我怎麼能得到這個值
- 26. C#CheckDisk我怎麼得到的輸出
- 27. 我怎麼能得到與Linq
- 28. 我怎麼能得到的hashCode
- 29. 我怎麼能得到昨天的NSDate
- 30. C++,我怎麼得不到值「123456」
我不得不改變「導入圖片」變成「從PIL導入圖片」,使其工作(我猜我有最新版本的枕頭安裝) – sellibitze