2009-06-03 14 views
5

मेरे पास विभिन्न आकारों (बड़े आकार, 100x100 की तरह) के शतरंज पर नाइट के पर्यटन के लिए एक एल्गोरिदम है और मैं परिणाम को एनिमेट करना चाहता हूं। प्रत्येक बार जब नाइट एक नए वर्ग में जाता है, तो (वर्ग) कैनवास में एक संबंधित पिक्सेल रंग बदल जाएगा, जब तक कि अंततः पूरे कैनवास रंग न हों। परिणामी फिल्में एल्गोरिदम के बारे में वेब पेज पर देखने के लिए उपलब्ध होंगी।एल्गोरिदम का उपयोग करके एनिमेटेड जीआईएफ बनाने का सबसे अच्छा तरीका क्या है?

एनिमेटेड जीआईएफ सबसे अच्छा तरीका प्रतीत होता है यदि मैं व्यापक ब्राउज़र समर्थन चाहता हूं (हालांकि अन्य सुझावों का स्वागत है)। ऐसा करने के लिए सबसे अच्छा टूल या लाइब्रेरी क्या है? मुझे लिनक्स या मैक कंप्यूटर पर स्वतंत्र रूप से उपलब्ध कुछ भी उपयोग करने में खुशी है।

वास्तविक एल्गोरिथ्म भी यहाँ एक उपयोगी उदाहरण बनाने के लिए (this paper देखें कि क्या तुम सच में उत्सुक हैं) लंबे समय है, लेकिन यहाँ एक 8x8 बोर्ड पर एक (बोरिंग) राजा के दौरे के लिए स्यूडोकोड है:

movie = new Movie() 
frame = new Frame() 
frame.fillRectangle((1,1), 8, 8, BLUE) 
for row in [1..8] { 
    if (row.isOdd()) { colrange = [1..8] } else { colrange = [8..1] } 
    for col in colrange { 
     frame.colourPixel(row, col, RED) 
     movie.addFrame(frame) 
    } 
} 
movie.saveAsGIF("tour.gif") 

अतिरिक्त क्रेडिट प्रश्न: क्या हम फ़ाइल के आकार को कम करने के लिए इस फिल्म की विशेष विशेषताओं का लाभ उठा सकते हैं? Wikipedia article बताता है कि हम ऐसा करने में सक्षम हो सकते हैं, अगर हम केवल कुछ पिक्सल बदल रहे हैं - असल में हम केवल प्रति फ्रेम बदल रहे हैं!

+0

एनिमेटेड gifs का उपयोग न करें। इसे इसके बजाय मूवी प्रारूप में कनवर्ट करें, संपीड़न बहुत अधिक होगा –

+0

आप किस प्रारूप का सुझाव देते हैं, और इसे किस टूल के साथ बनाना है? –

+0

संपीड़न का स्तर कई चीजों पर निर्भर करता है। सरल छवियों के लिए gifs बस ठीक कर देगा। इसके अलावा, आकार सादगी के रूप में ज्यादा चिंता का विषय नहीं हो सकता है। एनिमेटेड gifs अद्भुत तकनीक नहीं हैं, लेकिन वे अच्छी तरह से समर्थित हैं। – Naaff

उत्तर

4

आप इसे पूरा करने के लिए giflib का उपयोग कर सकते हैं। दस्तावेज़ीकरण डाउनलोड में है।

उदाहरण के तौर पर, this page में एनीमेशन उत्पन्न करने के लिए प्रयुक्त प्रोग्राम में giflib और स्रोत कोड का उपयोग करके एनिमेटेड gifs शामिल हैं। एनिमेशंस के लिए giflib का उपयोग करने के तरीके को देखने में मददगार हो सकता है।

संपादित करें: एक अन्य विकल्प है, अगर आप कुछ पोस्ट-प्रोसेसिंग कोई आपत्ति नहीं है, बस उत्पादन अपने फ्रेम एक सरल प्रारूप (such as PPM) और फिर make the animated gif using ImageMagick का उपयोग कर रहा है।

आपके अतिरिक्त क्रेडिट प्रश्न के लिए: ImageMagick आउटपुट के आकार को कम करने के लिए frame comparisons भी कर सकता है।

+1

इसके लिए धन्यवाद। मैं आपका दूसरा विकल्प लेने के बारे में सोच रहा हूं: .gifs का संग्रह आकर्षित करने के लिए पाइथन छवि लाइब्रेरी का उपयोग करके, और फिर ImageMagick उन्हें एक (अनुकूलित) एनीमेशन में एक साथ रखने के लिए। –

0

आपके अतिरिक्त क्रेडिट प्रश्न के जवाब में, आप नए फ्रेम पर छवि के बदले हुए हिस्से को चित्रित करके और बाकी को पारदर्शी होने के लिए स्वयं ही यह सुधार कर सकते हैं।

+0

समझ गया। ऐसा लगता है कि ImageMagick मेरे लिए तुलना और अनुकूलन करेगा, लेकिन अगर यह काम नहीं करता है तो मैं इसे मैन्युअल रूप से कर सकता हूं। –