· 7 min read

कैसे एनिमेटेड GIFs वास्तव में काम - कैनवास फ्रेम्स से LZW संपीड़न तक

GIF प्रारूप 39 वर्ष पुराना है और अभी भी हर जगह है।. यहां 'Export' पर क्लिक करने और फ़ाइल प्राप्त करने के बीच क्या होता है - फ्रेम कैप्चर, कलर क्वांटाइज़ेशन, LZW कम्प्रेशन, और क्यों आपका GIF 4MB है।.

क्यों GIFs अभी भी अस्तित्ववादी

ग्राफिक्स इंटरचेंज प्रारूप 1987 में CompuServe द्वारा बनाया गया था [CompuServe, 1987]।. यह एनीमेशन, पारदर्शिता और लॉसलेस संपीड़न का समर्थन करता है।. यह प्रति फ्रेम 256 रंगों तक सीमित है।. इसमें कोई ऑडियो नहीं है।. यह बड़ी फ़ाइलों का उत्पादन करता है।. प्रत्येक तकनीकी माप के अनुसार इसे दशकों पहले प्रतिस्थापित किया जाना चाहिए।.

अभी तक: डिस्कार्ड, स्लैक, iMessage, ट्विटर, रेडिट, और सभी समर्थन GIFs को देशी रूप से ईमेल करें।. GIPHY प्रतिदिन 10 बिलियन से अधिक GIFs का कार्य करता है।. प्रारूप जारी रहता है क्योंकि यह हर जगह काम करता है, उसे कोई कोडेक की आवश्यकता नहीं होती है और स्वचालित रूप से खेलता है।. कोई अन्य प्रारूप सार्वभौमिक समर्थन और शून्य घर्षण प्लेबैक के इस संयोजन है।.

यह समझना कि कैसे काम करता है यह बताता है कि आपका निर्यात GIF 4MB क्यों है, क्यों ढाल बैंड को देखते हैं, और आप इसके बारे में क्या कर सकते हैं।.

चरण 1: फ़्रेम कैप्चर

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

ब्राउज़र में, इसका मतलब है प्रत्येक फ्रेम समय पर HTML <canvas> तत्व से पिक्सेल डेटा पढ़ना — आम तौर पर canvas.toDataURL() या ctx.getImageData() के माध्यम से।. एनीमेशन लक्ष्य समय के लिए उन्नत है, कैनवास प्रस्तुत किया जाता है, और पिक्सल पर कब्जा कर लिया जाता है।. कुंजी बाधा: आपको पिक्सल पढ़ने से पहले ब्राउज़र के पेंट चक्र (requestAnimationFrame) की प्रतीक्षा करनी चाहिए, अन्यथा आप एक कहानी बफर पर कब्जा कर लेते हैं।.

3 सेकंड के लिए 15 FPS पर एक विशिष्ट GIF को 45 फ्रेम कैप्चर की आवश्यकता होती है।. 1080 × 1080 रिज़ॉल्यूशन पर, प्रत्येक फ्रेम लगभग 4.7 मिलियन पिक्सेल है।.

चरण 2: रंग Quantization

GIF प्रति फ्रेम अधिकतम 256 रंगों का समर्थन करता है, जो एक रंग तालिका (पैलेट) में संग्रहीत होता है।. एक ठेठ कैनवास फ्रेम अलग रंग के हजारों है।. दृश्यमान गिरावट के बिना 256 को कम करना पीपीजी 1 एक्स एन्कोडिंग का सबसे कठिन हिस्सा है।.

मानक दृष्टिकोण **मीडियाई कट एल्गोरिदम * * [हॉकबर्ट, 1982] है: अपने सबसे पुराने चैनल द्वारा सभी पिक्सल को सॉर्ट करें, मध्य में सूची को विभाजित करें, हरे और नीले रंग के लिए दोहराएं, 256 क्षेत्रों में रंग अंतरिक्ष को फिर से विभाजित करें।. प्रत्येक क्षेत्र का औसत एक पैलेट प्रविष्टि बन जाता है।. यह क्या gif.js है - पुस्तकालय PinePaper समानांतरवाद के लिए वेब वर्कर्स में कार्यान्वयन [Rubaxa, gif.js]।.

कलर क्वांटाइज़ेशन क्यों GIFs फ्लैट रंग ग्राफिक्स को अच्छी तरह से संभालती है लेकिन तस्वीरों और ढाल के साथ संघर्ष करती है।. 1080 पिक्सल में एक ढाल 500+ विशिष्ट रंगों का उपयोग कर सकती है।. 256 के लिए संपीड़न दृश्य बैंडिंग पैदा करता है - असत कदम जहां ढाल चिकनी होना चाहिए।.

*क्या आप इसके बारे में क्या कर सकते हैं? अपने डिजाइन में कम रंग का प्रयोग करें।. फ्लैट आकार, ठोस भरण, और पाठ अच्छी तरह से मात्रा में।. चिकना ढाल और फोटोग्राफिक बनावट नहीं है।. यदि आपके GIF में बैंडिंग है, तो पैलेट को सरल बनाएं, रिज़ॉल्यूशन नहीं।.

चरण 3: LZW संपीड़न

प्रत्येक फ्रेम के पिक्सेल इंडेक्स (256-रंग पैलेट में परिधीयता) को *Lempel-Ziv-Welch(LZW) कम्प्रेशन [Welch, 1984] का उपयोग करके संकुचित किया जाता है।. LZW दोहराया बाइट अनुक्रमों की एक शब्दकोश बनाता है क्योंकि यह डेटा को स्कैन करता है।. जब यह पहले देखा गया एक अनुक्रम का सामना करता है, तो यह कच्चे बाइट्स के बजाय शब्दकोश सूचकांक को आउटपुट करता है।.

इसका मतलब यह है कि GIF संपीड़न सबसे प्रभावी है जब बार-बार रंग के बड़े क्षेत्र होते हैं - ठोस पृष्ठभूमि, फ्लैट आकार, एक समान सतह पर पाठ।. पिक्सेल-स्तर भिन्नता के साथ जटिल बनावट खराब संपीड़न अनुपात का उत्पादन करती है क्योंकि LZW शब्दकोश को कुछ बार अनुक्रम मिलते हैं।.

** एक काले पृष्ठभूमि पर सफेद पाठ का 1080 × 1080 पीपीजी0एक्स 200KB को संपीड़ित कर सकता है।. एक जटिल तस्वीर के समान रिज़ॉल्यूशन GIF 8MB हो सकता है।. फ़ाइल का आकार रिज़ॉल्यूशन या फ्रेम गिनती की तुलना में दृश्य जटिलता पर निर्भर करता है।.

चरण 4: फ़्रेम डिस्पोजल और ऑप्टिमाइज़ेशन

GIF फ्रेम एक ** डिस्पोजल विधि * निर्दिष्ट कर सकते हैं: क्या अगले फ्रेम को खींचने से पहले कैनवास को साफ़ करने के लिए, पिछले फ्रेम को दिखाई देते हैं, या पृष्ठभूमि को पुनर्स्थापित करते हैं।. स्मार्ट GIF एनकोडरों का उपयोग फ्रेम अलग-अलग — केवल उन पिक्सलों को एन्कोड करना जो फ्रेम के बीच बदल जाते हैं, पूरे फ्रेम नहीं।.

यदि आपके एनिमेशन में एक छोटी चलती तत्व के साथ एक स्थैतिक पृष्ठभूमि है, तो एक अनुकूलित GIF एक बार पृष्ठभूमि को एन्कोड करता है और केवल उस क्षेत्र को अपडेट करता है जहां तत्व चल रहा है।. यह नाटकीय रूप से फ़ाइल आकार को कम करता है।. PinePaper का एनकोडर gif.js का उपयोग करता है जो इस अनुकूलन को स्वचालित रूप से लागू करता है।.

संख्या

एक ठेठ PinePaper एनिमेशन (1080 × 1080, 15 FPS, 3 सेकंड, एनिमेटेड पाठ के साथ अंधेरे पृष्ठभूमि) के लिए:

घटक आकार
रॉ फ्रेम (45 × 4.7M पिक्सेल × 3 बाइट्स) ~634 MB
Quantization के बाद (256 रंग, 1 बाइट / पिक्सेल) ~211 MB
LZW संपीड़न के बाद ~2-4 MB
फ्रेम भिन्नता के साथ ~1-2 MB

कच्चे से अंतिम तक संपीड़न अनुपात लगभग 300:1 से 600:1 है।. इसमें से अधिकांश रंग मात्राकरण (3:1) और LZW (50:1 से 100:1) से आता है।.

चार चरणों के माध्यम से क्लिक करें।. बार एक पर कच्चे आकार के खिलाफ खींचा जाता है रैखिक पैमाने, इसलिए पिछले दो चरणों में यह एक हेयरलाइन है - नहीं गलती प्रस्तुत करना, जो 300:1 जैसा दिखता है।.

Interactive demo — open in editor pp:PinePaper

GIF बनाम अन्य प्रारूपों का उपयोग कब करें

प्रारूप सर्वश्रेष्ठ सीमा
GIF यूनिवर्सल सपोर्ट, ऑटो-प्ले, मैसेजिंग ऐप 256 रंग, बड़ी फाइलें, कोई ऑडियो नहीं
WebM (VP9) सर्वश्रेष्ठ गुणवत्ता, छोटी फ़ाइलों, वेब सफारी, iMessage में सीमित समर्थन
MP4 (H.264) वीडियो प्लेयर कोडेक की आवश्यकता है, कोई पारदर्शिता नहीं है
एपीएनजी पारदर्शिता के साथ पूर्ण रंग एनीमेशन पुराने ब्राउज़रों में सीमित समर्थन

जब आपको सार्वभौमिक संगतता और ऑटो-प्ले की आवश्यकता होती है तो GIF सही विकल्प है।. गुणवत्ता या फ़ाइल आकार के लिए, WebM या MP4 बेहतर हैं।.

इसे आज़माएं

ओपन [PinePaper Studio] (/editor), एक डिजाइन बनाते हैं, और GIF के रूप में निर्यात करते हैं।. आप के रूप में फ़ाइल आकार में परिवर्तन का निरीक्षण करें:

  • फ्रेम गिनती बढ़ाएं (अधिक फ्रेम = बड़ी फ़ाइल, समान रूप से)
  • Gradients (poor quantization = बड़ा फ़ाइल) जोड़ें
  • ठोस रंगों का उपयोग करें (अच्छा मात्रा = छोटी फ़ाइल)
  • कैनवास का आकार बढ़ाएं (अधिकतम पिक्सेल प्रति फ्रेम = बड़ी फ़ाइल)

प्रत्येक परिवर्तन संपीड़न पाइपलाइन का माप है।. आप सिर्फ GIF बना रहे हैं - आप देख रहे हैं कि कैसे सूचना सिद्धांत आपके डिजाइन पर लागू होता है।.

संदर्भ

  • CompuServe (1987)।. ग्राफिक्स इंटरचेंज प्रारूप विनिर्देश, संस्करण 87a।.
  • GIPHY (2020). GIPHY वार्षिक रिपोर्ट: 10 अरब दैनिक सेवा।.
  • Heckbert, P. (1982)।. फ्रेम बफर डिस्प्ले के लिए रंग छवि क्वांटाइज़ेशन।. * कंप्यूटर ग्राफिक्स (SIGGRAPH) *, 16 (3), 297-307।.
  • रूबक्सा।. फ़ाइल जावास्क्रिप्ट GIF एनकोडर वेब वर्कर्स का उपयोग करके।. github.com/jnordberg/gif.js.
  • वेल्च, टी.ए. (1984)।. उच्च प्रदर्शन डेटा संपीड़न के लिए एक तकनीक।. * आईईई कंप्यूटर*, 17(6), 8-19.

PinePaper का GIF निर्यात मुफ्त है - कोई वॉटरमार्क नहीं, कोई साइनअप नहीं।. ओपन [pinepaper.studio/editor] (/editor) और अपना पहला एनीमेशन निर्यात करें।.

Ready to create?

Start making animated GIFs, videos, and graphics — free, no signup.

Open PinePaper Editor