شيفرة هذه الصفحة لم تبدأ العمل.

فتح index.html مباشرة من مجلد يمنع المتصفح من تحميل وحدات JavaScript، فلا يحدث شيء عند اختيار ملف GIF. قدّم المجلد عبر HTTP بدلا من ذلك:

powershell -ExecutionPolicy Bypass -File serve.ps1

ثم افتح http://localhost:8080/.

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

كل إطار يخرج ملفَّ PNG خاصاً به.

اللغة: العربية
عرض الشيفرة المصدرية
ملفات GIF الخاصة بك لا تُرفع أبدا. لا يوجد خادم.

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

فحص حي: جارٍ الفحص…

دون اتصال: جارٍ الفحص…

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

1 اختر ملف GIF

2 كيف تخرج الإطارات

أبقِ كل خذ إطاراً بعد إطار أو واحداً من كل خمسة بدل أخذها كلها، لورقة تلامس أو لتسجيل طويل.

قائمة التوقيت كم بقي كل إطار، وأين جلس. ولا يستطيع مجلد من ملفات PNG حمل ذلك وحده.

إطار

3 الإطارات

عرض بصيغة Markdown

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

  1. اختر ملف GIF. أفلِته على المُنتقي، أو اختره يدوياً. يقرؤه المتصفح من قرصك مباشرة، وتقول لك الصفحة ما وجدت: المقاس، وعدد الإطارات، وكم يعمل، وكم مرة يتكرّر.
  2. احسم ماذا يحمل كل ملف PNG. الإطار كما يظهر هو ما يريده الجميع تقريباً: الصورة كلها عند تلك اللحظة من الحركة. أما البكسلات التي يخزّنها ذلك الإطار وحدها فهي الرقعة التي يحملها الملف فعلاً، بمقاسها هي وفي موضعها هي، وهي سبب بقاء ملف GIF صغيراً وليست منظر الحركة.
  3. احسم ماذا يحدث للشفافية. يحفظها PNG، وهو الافتراض الصادق. واملأها بلون بدلاً من ذلك إن كانت الإطارات ذاهبة إلى مكان يتجاهل الشفافية وكان سيجعلها سوداء لولا ذلك.
  4. اختر الإطارات التي تريدها. كلها افتراضياً. و «أبقِ إطاراً بعد إطار» يخفّف تسجيلاً طويلاً، ومربعات التأشير على الشبكة تتجاوزه — والترقيم لا يتغيّر أبداً، فالإطار 42 يُسمّى الإطار 42 مهما قلّ ما أبقيته من جيرانه.
  5. نزِّلها. إطاراً في كل مرة من الشبكة، أو كلها في ملف ZIP واحد فتكون نافذة حفظ واحدة بدل مئات. ويستطيع ملف ZIP حمل ملف frames.txt يسرد كم بقي كل إطار، وهو الشيء الوحيد الذي لا يستطيع مجلد من ملفات PNG قوله وحده.

النسخة الأطول

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

أسئلة

هل يُرفع ملف GIF عندي إلى أي مكان؟

لا. يقرأ متصفحك أنت الملف ويفكّ ضغطه ويرسمه على جهازك أنت، ويُرمَّز كل ملف PNG هنا في الذاكرة. ولا جانب خادمَ لهذه الأداة، و Content-Security-Policy الخاصة بالصفحة تُسمّي كل عنوان يجوز لها الاتصال به — وليس واحد منها لنا. اقطع الاتصال بالشبكة وسيظل يقسّم ملفات GIF.

لماذا يبدو إطارٌ قطعةً صغيرة من الصورة؟

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

وأنت ترى ذلك لأن «البكسلات التي يخزّنها ذلك الإطار وحدها» مختارة. حوِّل إلى «الإطار كما يظهر» فيكون كل ملف PNG الصورة كلها كما تبدو الحركة عند تلك اللحظة.

هل يحفظ الشفافية؟

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

لماذا تأخيرات الإطارات ليست الأرقام التي توقّعتها؟

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

هل أستطيع إعادة الإطارات إلى بعضها؟

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

بأي صيغ يمكن حفظ الإطارات؟

PNG، وPNG وحدها عن قصد. فإطار GIF 256 لوناً على الأكثر ببتّ واحد من الشفافية؛ وPNG تخزّن ذلك بالضبط وبلا خسارة، بينما كان JPEG سيرمي بالشفافية، ويخترع ألواناً لم تكن في الإطار قط، وينتج ملفاً أكبر عادةً من عمل فنّي مسطَّح. وإن احتجت إلى ملفات JPEG، فحوِّل ملفات PNG بعد ذلك بـ أداة تغيير حجم الصور.

هل ثمّة حدّ لعدد الإطارات التي يقرؤها؟

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

هل يفتح ملف GIF معطوباً؟

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

هل هو مجاني، وهل أحتاج إلى حساب؟

هو مجاني، ولا حساب ولا تسجيل دخول ولا فترة تجريبية. ولا علامة مائية على الإطارات كذلك. ويحمل الموقع إعلانات، وهي ما يدفع تكاليفه؛ ولا يُعطى المعلنون شيئاً عن ملفاتك.

هل يعمل دون اتصال؟

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