को GIF फ्रेम्स कन्वर्ट मैं अजगर छवि लाइब्रेरी, साथ एकल छवियों के लिए एक gif परिवर्तित करने की कोशिश की, लेकिन यह अजीब फ्रेमजनहित याचिका - जेपीजी
में जो परिणामइनपुट gif है:
Source Image http://longcat.de/gif_example.gif
में मेरी पहली कोशिश, मैंने इमेज.न्यू से आरजीबी छवि के साथ छवि को कन्वर्ट करने की कोशिश की, 255,255,255 सफेद पृष्ठभूमि के रूप में - किसी भी अन्य उदाहरण की तरह मैंने इंटरनेट पर पाया है:
लेकिन यह अजीब उत्पादन फाइलों में परिणाम:
Example #1 http://longcat.de/gif_example1.jpg
मेरी दूसरी कोशिश थी एक RGBA में gif परिवर्तित करने के लिए पहले, और फिर इसकी पारदर्शिता मुखौटा का उपयोग करें, पारदर्शी टुकड़े सफेद बनाने के लिए:
def processImage(infile):
try:
im = Image.open(infile)
except IOError:
print "Cant load", infile
sys.exit(1)
i = 0
try:
while 1:
im2 = im.convert('RGBA')
im2.load()
background = Image.new("RGB", im2.size, (255, 255, 255))
background.paste(im2, mask = im2.split()[3])
background.save('foo'+str(i)+'.jpg', 'JPEG', quality=80)
i += 1
im.seek(im.tell() + 1)
except EOFError:
pass # end of sequence
जो इस तरह एक आउटपुट में परिणाम:
Example #2 http://longcat.de/gif_example2.jpg
पहली कोशिश पर लाभ था, कि पहले फ्रेम बहुत अच्छी लग रहा है लेकिन जैसा कि आप देख सकते हैं, बाकी टूट गया है
क्या मैं अगले की कोशिश करनी चाहिए?
संपादित करें:
मैं मैं एक बहुत समाधान के करीब
Example #3 http://longcat.de/gif_example3.png
मैं, अन्य चित्रों के लिए पहली छवि का पैलेट का उपयोग करें और साथ मर्ज करने के लिए किया था आया लगता है पिछले फ्रेम
def processImage(infile):
try:
im = Image.open(infile)
except IOError:
print "Cant load", infile
sys.exit(1)
i = 0
size = im.size
lastframe = im.convert('RGBA')
mypalette = im.getpalette()
try:
while 1:
im2 = im.copy()
im2.putpalette(mypalette)
background = Image.new("RGB", size, (255,255,255))
background.paste(lastframe)
background.paste(im2)
background.save('foo'+str(i)+'.png', 'PNG', quality=80)
lastframe = background
i += 1
im.seek(im.tell() + 1)
except EOFError:
pass # end of sequence
लेकिन मैं एसी (जो diff-छवियों का उपयोग GIF एनिमेशन के लिए) क्यों मेरे पारदर्शिता काला है tually, न पता है, बजाय सफेद की यहां तक कि अगर मैं पैलेट को संशोधित (सफेद करने के लिए पारदर्शिता चैनल बदल) या पारदर्शिता मुखौटा का उपयोग करें, पृष्ठभूमि अभी भी काला है
बहुत बहुत धन्यवाद! मैं आखिरी फ्रेम के साथ पेस्ट का उपयोग करता हूं, क्योंकि कुछ gifs प्रत्येक फ्रेम के लिए diffs का उपयोग करता है! – Schinken
उहम, इस तरह के पैलेट को बदलने से फ्रेम के अलग-अलग पैलेट होने पर गलत परिणाम मिलेंगे। यह छवि http://www.imagemagick.org/Usage/anim_opt/bunny_bgnd.gif है (मुझे लगता है, मुझे यकीन नहीं है कि मैं सही लिंक कॉपी और पेस्ट कर रहा हूं)। दूसरी समस्या जो मैं देखता हूं वह पीआईएल संस्करणों के बीच मतभेदों से संबंधित हो सकती है, लेकिन मुझे आपके जैसा ही परिणाम नहीं मिलता है (मुझे पहले फ्रेम को छोड़कर सभी फ्रेमों में भूरे रंग के क्षेत्र मिलते हैं, जहां यह पारदर्शी होना चाहिए)। Http://www.imagemagick.org/Usage/anim_opt/bunny_bgnd_opttrans.gif जैसे gif के लिए भी ऐसा ही होता है। – mmgp
@mmgp - हम्म, हाँ, मैं देख सकता हूं कि अलग-अलग पैलेट वाले फ्रेम एक समस्या पैदा कर सकते हैं। मैं मानता हूं कि आपके परिणाम अलग-अलग परिणाम हो सकते हैं। दुर्भाग्यवश, मेरे पास इस समय इसे देखने का समय नहीं है, अगर आपके पास कोई फिक्स है तो कृपया मेरा जवाब संपादित करें, या अपना खुद का जोड़ें। अच्छा है। – fraxel