abox.tools

اللغة: العربية

كيف تقسّم ملف GIF إلى إطارات

إخراجُ الإطارات إفلاتةٌ واحدة وزرٌّ واحد. والجدير بالفهم هو ما «الإطار» في ملف GIF فعلاً، لأن الصيغة تخزّن شيئاً مختلفاً عمّا تراه — وذلك الاختلاف هو سبب كون إطارك الرابع عشر مستطيلاً فيه فمُ أحدهم.

افتح تقسيم GIF كل إطار يخرج ملفَّ PNG خاصاً به.

عرض بصيغة Markdown

الجواب القصير

افتح مقسّم GIF، وأفلِت ملف GIF فيه، فيظهر كل إطار ملفَّ PNG تستطيع تنزيله — واحداً في كل مرة، أو كلها في ملف ZIP واحد. واترك الإعدادات وشأنها فتحصل على ما يعنيه معظم الناس بالضبط: كلُّ إطار الصورةَ كاملةً، كما تبدو عند تلك اللحظة من الحركة.

وبقيةُ هذه الصفحة عن الأشياء الثلاثة التي تفاجئ الناس بعد ذلك: إطارٌ ليس إلا رقعةً صغيرة، وشفافيةٌ تصير سوداء في مكان آخر، وتوقيتٌ لم يعد موجوداً متى صارت الإطارات ملفات منفصلة.

ما إطار GIF فعلاً

ملفُّ GIF ليس رصّةً من الصور. بل هو صورةٌ واحدة، تتبعها سلسلةٌ من الرقع.

فكلُّ إطار بعد الأول لا يخزّن إلا المستطيل الذي تغيّر، ومعه قاعدةٌ لما يُفعَل باللوحة بعده. وكلُّ ما عداه على الشاشة هو ببساطة ما تركته الإطارات الأسبق هناك. فشخصٌ يتكلّم أمام جدار ساكن يكلّف مستطيلَ وجهٍ لكل إطار بدل صورةٍ كاملة لكل إطار، وذلك هو السبب كلُّه في أن صيغةً بلا تعويض حركة وبلا خطوة ذات خسارة ليست عديمة النفع تماماً.

فثمّة جوابان مختلفان صادقان بالتساوي لـ «أعطني الإطار 14»، والأداةُ تعرض كليهما:

الإطار كما يظهر. الصورةُ كلها عند تلك اللحظة: الإطار 14 مرسوماً فوق كل ما قبله. وهذا هو الافتراض، وهو ما تريده لورقة تلامس أو مصغَّرة أو صورة ساكنة تنشرها أو إطارات ذاهبة إلى محرِّر فيديو.

البكسلات التي يخزّنها ذلك الإطار وحدها. الرقعةُ نفسها، بمقاسها هي، في موضعها هي، وكلُّ ما لا تحمله متروكٌ شفافاً. فقد يكون الإطار 14 هو ⁦60 × 40⁩ بكسلاً من فم. وهذا هو العرض الذي يفسّر أين ذهبت بايتات ملف GIF، وهو ما تريده إن كنت تحرّر الحركة لا تحصد صوراً منها.

ولا شيء خطأ في ملفك حين يبدو إطارٌ مخزَّن شظيةً. ذلك هو الملف.

اثنا عشر إطارًا مرقّمًا من رسم متحرك، كل منها صورة كاملة ومعها المدة التي يبقى فيها.
كل إطار صورةً كاملة، وهو ليس ما في الملف: وهذا القسم عن ذلك الفرق.

قاعدة التخلّص، ولماذا تترك بعض الإطارات ثقوباً

كلُّ إطار يحمل كذلك واحدة من أربع تعليمات عمّا يحدث لمستطيله قبل رسم الإطار التالي. والأداةُ تعرضها تحت كل إطار في عرض المخزَّن:

يبقى على الشاشة. المعتادة. فالرقعة تبقى حيث حطّت والإطار التالي يرسم فوقها.

يمسح مساحته بعده. فيُمسَح المستطيل قبل أن يحطّ الإطار التالي. وهذا ما تفعله حركةٌ فيها جسم شفاف متحرّك، وهو أيضاً السبب الكلاسيكي في ارتعاش ملفات GIF.

يعيد ما كان تحته. فتعود اللوحة إلى ما كانت عليه قبل أن يرسم هذا الإطار — ختمٌ، ثم تراجع. نادرة، وهي التي تخطئ فيها أكثر قارئات GIF المنزلية الصنع.

وتفصيلةٌ جديرة بالمعرفة إن قارنت بين الأدوات: تقول المواصفة إن «يمسح مساحته» ينبغي أن تعيد لون الخلفية، لكنّ كل متصفح منذ التسعينيات يمسح إلى الشفاف بدلاً من ذلك، لأن ذلك ما افترضته حركات ذلك الزمن. وهذه الأداة تتبع المتصفحات عن قصد، فالإطارات التي تحصل عليها هي الإطارات التي رأيتها.

بطاقة الإعدادات: اختيار بين الإطار كما يظهر والرقعة الخام المخزّنة في الملف، ولون خلفية للأجزاء الشفافة.
خيار كما يظهر يعيد تشغيل قواعد التخلص ويسلّمك صورًا. أما الآخر فيسلّمك ما في الملف حقًا، بثقوبه.

ماذا يحدث للشفافية

شفافيةُ GIF بتٌّ واحد. فالبكسل إما مطليٌّ وإما غير مرئي، ولا شيء بينهما — لا حوافّ ناعمة، ولا ظلال جزئية. ولهذا يكون لملف GIF ذي خلفية شفافة خطٌّ خارجي حادّ مسنَّن قليلاً.

وPNG تخزّن ذلك بالضبط، بلا خسارة، فتخرج الإطارات وشفافيتها سليمة ولا يُخترَع شيء. أبقِ عليها إن كانت الإطارات ذاهبة إلى مكان يفهم الشفافية.

واملأها بلون بدلاً من ذلك إن لم يكن كذلك. فالبرمجيات التي تتجاهل قناة ألفا تعرضها سوداء عادةً، فالإطارُ الذي بدا حسناً في المتصفح يصل بخلفية سوداء — والرقعةُ المخزَّنة، وهي شفافة في كل موضع تقريباً، تصل مستطيلاً أسود فيه فم. واختيارُ اللون سلفاً هو العلاج. وهو يُكتَب في ملف PNG ولا يمكن التراجع عنه بعدها، وذلك هو السبب الوحيد في ألا يكون هو الافتراض.

التوقيت، الذي لا تستطيع الإطارات حمله

ملفُّ PNG ليس فيه موضع يسجّل كم بقي على الشاشة. فقسِّم حركةً إلى ملفات PNG يذهب التوقيت، وذلك يهمّ في اللحظة التي تريد فيها إعادة بنائها.

ولهذا وُجِد ملف frames.txt في ملف ZIP. فهو يسرد تأخير كل إطار وموضعه ومقاسه، فيمكن إعادة بناء الحركة في صانع GIF أو في أي مكان آخر. وهو يكلّف كيلوبايتين أو نحوهما ولا سبيل إلى إعادة بنائه لاحقاً.

وشيئان عن تأخيرات GIF يلتقطان الجميع:

الوحدة أجزاءٌ من مئة من الثانية، فأدقُّ خطوة عند الصيغة 0.01 ثانية. ولا وجود لملف GIF بـ 30 إطاراً في الثانية بالضبط؛ فـ 0.03 ثانية للإطار هي 33.3 إطاراً في الثانية و0.04 ثانية هي 25.

وكلُّ ما دون 0.02 ثانية يُشغَّل عند 0.10 ثانية. فالمتصفحات تحدّه منذ التسعينيات — قاعدةٌ كُتِبت لكرات ذلك العصر الدوّارة ولم تُرفَع قط. فملفُّ GIF الذي يقول ملفه 0.01 ثانية للإطار يدّعي 100 إطار في الثانية ويعمل عند 10. والأداةُ تعرض التأخير كما يُشغَّل فعلاً، وتقول ما يخزّنه الملف بجانبه حين يختلف الاثنان، لأن تلك الفجوة هي سبب خروج ملف GIF قسّمته وأعدت بناءه أبطأ من الأصل.

أرقام الإطارات، ولماذا هي محشوّة بالأصفار

تخرج الإطارات على هيئة name-001.png و name-002.png، مرقَّمةً من واحد ومحشوّة إلى عرض الرقم الأخير. وليس ذلك زينة: فـ frame9.png يُرتَّب بعد frame10.png في كل مدير ملفات وفي معظم البرمجيات التي تستورد متتالية، لأنها ترتّب نصّاً لا أرقاماً. والأسماءُ المحشوّة تُرتَّب ترتيباً صحيحاً في كل مكان، وكلُّ محرِّر فيديو يستورد متتالية صور يتوقّعها.

وتخفيفُ حركة طويلة بـ «أبقِ إطاراً بعد إطار» لا يعيد ترقيم شيء. فالإطار 42 ما زال يُسمّى الإطار 42، فتتحاذى الملفات مع الأصل ومع قائمة التوقيت.

لماذا لا يحتاج هذا إلى خادم

قراءةُ ملف GIF عملان: المشيُ في كتل الملف، وفكُّ ضغط LZW الذي لُفّت به بكسلاته. وهما معاً بضع مئات من الأسطر، وهما مكتوبان في المستودع، ويعملان على جهازك أنت — ولهذا تظل الصفحة تعمل والشبكة مفصولة.

ومتصفحك يستطيع تشغيل ملف GIF أصلاً، لكنه لن يناولك الأجزاء: فوسمُ <img> يعطيك حركةً، ورسمُ واحد على لوحة يعطيك الإطار الأول إلى الأبد، والواجهةُ الوحيدة التي تفعل أكثر غائبةٌ عن Safari. فتُقرأ الصيغة هنا بدلاً من ذلك، بالطريقة نفسها في كل متصفح — وقراءتُها بنفسك هي أيضاً ما يجعل عرض الرقع وقواعد التخلّص عليك ممكناً أصلاً.

وهل رفع الملفات إلى المحوِّلات على الإنترنت آمن؟ يعرض أربعة فحوص تقول لك الشيء نفسه عن أي أداة، ومنها هذه.