ben gif numarasını çerçeveleri almak için bir çeşit yöntemi arıyorum. google, stackoverflow ve herhangi bir outher siteleri arıyorum ve sadece çöp buluyorum! Birisi nasıl yapılacağını biliyor mu? Sadece basit gif karelerine ihtiyacım var.Python, ben nasıl alabilirim gif çerçeveleri
cevap
hangi metodu çerçeve/yük işlemek için kullanıyorsunuz? PIL kullanıyor musunuz? Değilse, kontrol etmenizi öneririm: Python Imaging Library ve özellikle the PIL gif page.
Şimdi, gif okumak için PIL kullandığınız varsayarak, bu bakıyorsun hangi çerçeve belirlemek için oldukça basit bir mesele. belirli bir kareye gidecek ve bakıyorsun hangi çerçeve dönecektir söylemek ararlar.
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
Aksi takdirde, ben sadece bir istisna (EOFError) yükseltilir kadar arayarak gif olarak kare sayısını bulabilirsiniz inanıyoruz.
Sadece dosyayı ayrıştırmak, gif oldukça basit:
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
Bu PIL gerektirir farz ediyorum, ben 44 kare 'gif' kayıtlı bu kullanarak denedim ve ben Önizleme kullanarak çerçeveleri sayılır ama bana almak için bazı kod gerekir (... üzerimde 0 döndü 2500 görüntülerin) ... – Zizouz212
Zizouz212 @ info: Bu diğerine [cevabım] (http://stackoverflow.com/a/28549748/355230) kullanılan 'small_globe.gif' testi dosyası ile benim için çalıştı seninki sorusu. Lütfen 44 kare GIF resim dosyasını bir yere (sorularınızda olduğu gibi) yükleyin ve bana bildirin, böylece onu indirebilir ve sorunun nedenini anlayabilir miyim diye bakalım. – martineau
ben son Yastık sürümüne sahip tahmin ediyorum (o iş yapmak "PIL ithalat Image" içine "ithal Image" değiştirmek zorunda yüklü) – sellibitze