मैं gif फ्रेम संख्या प्राप्त करने के लिए किसी तरह की विधि देख रहा हूं। मैं google, stackoverflow और किसी भी बाहरी साइट पर देख रहा हूं और मुझे केवल बकवास मिल रहा है !! किसी को पता है कि यह कैसे करें? मुझे केवल gif फ्रेम की सरल संख्या की आवश्यकता है।पायथन, मैं gif फ्रेम कैसे प्राप्त कर सकता हूं
उत्तर
फ्रेम को लोड/हेरफेर करने के लिए आप किस विधि का उपयोग कर रहे हैं? क्या आप पीआईएल का उपयोग कर रहे हैं? यदि नहीं, तो मैं इसे जांचने का सुझाव देता हूं: Python Imaging Library और विशेष रूप से the PIL gif page।
अब, मान लीजिए कि आप जीआईएफ में पढ़ने के लिए पीआईएल का उपयोग कर रहे हैं, यह निर्धारित करने के लिए एक बहुत ही साधारण बात है कि आप कौन सी फ्रेम देख रहे हैं। एक विशिष्ट फ्रेम पर जाएं और बताएं आप जिस फ्रेम को देख रहे हैं उसे वापस कर देगा।
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 में फ्रेम की संख्या पा सकते हैं।
बस फ़ाइल को पार्स, gif बहुत सरल कर रहे हैं:
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
मुझे लगता है कि इसे पीआईएल की आवश्यकता है, मैंने 44 फ्रेम 'gif' फ़ाइल पर इसका उपयोग करने की कोशिश की, और यह मेरे पास 0 लौटा ... (मैंने पूर्वावलोकन का उपयोग करके फ्रेम की गणना की, लेकिन मुझे कुछ कोड चाहिए 2500 से अधिक छवियों पर जानकारी) ... – Zizouz212
@ ज़ीज़ौज़ 212: यह मेरे लिए [small_globe.gif' परीक्षण फ़ाइल के साथ काम करता था जिसका उपयोग मैंने [मेरे उत्तर] (http://stackoverflow.com/a/28549748/355230) में किया था तुम्हारा सवाल कृपया अपनी 44 फ्रेम gif छवि फ़ाइल को कहीं भी अपलोड करें (जैसे आपके किसी एक प्रश्न में), और फिर मुझे बताएं ताकि मैं इसे डाउनलोड कर सकूं और देख सकूं कि क्या समस्या का कारण बन रहा है या नहीं। – martineau
मैं में "से जनहित याचिका आयात छवि" बदलने के लिए "आयात छवि" यह काम करने के लिए (मैं मैं हाल ही में एक तकिया संस्करण है अनुमान लगा रहा हूँ था स्थापित) – sellibitze