PNG स्ट्रिप को GIF में कैसे बदलें?


12

इसलिए, मैंने इस एनीमेशन को एक कार्यक्रम में बनाया है, हालांकि, यह PNG अनुक्रम के रूप में निर्यात का समर्थन नहीं करता है, इसलिए मैं इसे GIF में परिवर्तित कर सकता हूं। एनीमेशन 100 से अधिक फ्रेम है इसलिए प्रत्येक छवि को एक-एक करके सहेजने में उम्र लग जाएगी। हालांकि, यह एक "स्ट्रिप" के रूप में निर्यात का समर्थन करता है, जो एक फिल्म फिल्म की तरह है। एनीमेशन में प्रत्येक चित्र के समान आयाम हैं। यहां बताया गया है कि प्रोग्राम की "स्ट्रिप" सुविधा कैसे काम करती है।

एनीमेशन में छवियां क्षैतिज रूप से खड़ी होती हैं, पहला फ्रेम सबसे बाईं ओर होता है जबकि अंतिम फ्रेम सबसे दूर होता है। फ़्रेम के बीच कोई अंतराल नहीं होता है, और फ़ाइल का नाम आमतौर पर "name_stripX.png" होता है, यदि एनीमेशन में एक्स फ़्रेम होते हैं। यदि प्रत्येक फ़्रेम 32 से 32 थी और एनीमेशन में 8 फ़्रेम थे, तो इस फ़ाइल की चौड़ाई 256 और 32 की ऊँचाई होगी।

यहाँ कुछ उदाहरण आउटपुट है, प्रत्येक रंग एक फ्रेम में भरता है:

उदाहरण आउटपुट

इसके अलावा, चीजों को थोड़ा और स्पष्ट करने के लिए, कार्यक्रम को "गेम मेकर 8.0" कहा जाता है।

जवाबों:


16

आप अलग-अलग तरीकों से छवियों को परिवर्तित करने के लिए ImageMagick का उपयोग कर सकते हैं, और यह काफी आसानी से सक्षम होना चाहिए। पहले आप भागों में विभाजित कर सकते हैं ( original.pngस्रोत छवि होने के नाते, और इस मामले में आकार में 32x32pixels):

convert original.png -crop 32x32 parts-%02d.png

फिर आप इसे एक एनीमेशन में बदल सकते हैं ( -loop 1यदि आप इसे लूप नहीं चाहते हैं तो उपयोग करें ):

convert -loop 0 -page +0+0 ./parts*.png output.gif

जिसके परिणामस्वरूप:

पहले कमांड के आउटपुट पीएनजी में एक ऑफसेट शामिल है, इसलिए -page +0+0विकल्प के बिना एनीमेशन समाप्त होता है जैसे:

आपके द्वारा शामिल किए जाने वाले अन्य विकल्प अलग-अलग हो सकते हैं (मुख्यतः दूसरी कमांड में), जैसे -delay- आदि - आप एनीमेशन का अनुकूलन भी कर सकते हैं ताकि यह छोटा हो (और लोड / रेंडर करने के लिए तेज़ हो) - जैसे यहाँ से उधार लिया गया है :

convert output.gif -fuzz 10% -layers Optimize optimised.gif

या gifsicle का उपयोग कर रहा है

gifsicle -O output.gif -o optimised.gif

संपादित करें: यदि फ़्रेम पारदर्शी हैं, तो आप फ़्रेम को
-dispose Backgroundविकल्प जोड़कर बदलने के लिए सेट कर सकते हैं , इसलिए जब अगले एक लोड होने पर एक फ़्रेम का निपटान किया जाता है:


pageविकल्प के बिना किया गया ऊपर का उदाहरण इसलिए यह स्पष्ट रूप से दिखाता है

इसके साथ समस्या यह है कि आप शायद परिणामी छवि को अधिक अनुकूलित नहीं कर सकते हैं - इसलिए फ्रेम को अपारदर्शी बनाने का एक और तरीका हो सकता है ताकि अगला फ्रेम पिछले को कवर कर सके।


छवि में पारदर्शिता है, और मूल रूप से यह सिर्फ पिछले फ्रेम पर पिछले फ्रेम को खींच रहा है, क्या कोई ऐसा तरीका है जिससे मैं इसे बना सकता हूं ताकि यह अगले फ्रेम को एक खाली जगह पर खींच सके?
user245115

स्रोत छवि से पारदर्शिता निकालें सबसे आसान तरीका है। लेकिन यह अधिक मापदंडों के साथ किया जा सकता है।
डेविड

@ user245115 - ओवरलेइंग के बजाय फ़्रेमों को बदलें - संपादित देखें।
विल्फ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.