يُفتح هذا بمجرّد أن تختار ملفاً في الأعلى.جاهزة — اقطع الاتصال بالإنترنت وستظل تعمل.غير متاحة في هذا المتصفح (كل شيء آخر يظل يعمل).تحتاج إلى https:// أو localhost للتخزين المؤقت دون اتصال.التخزين المؤقت غير متاح هنا، لكن لا شيء يُرفع في الحالتين.ملفاتك لم تذهب إلى أي مكان. {total} ملفاً حُمِّلت، كلها ملفات هذه الصفحة نفسها. {platform}اتصل شيءٌ بـ {hosts}، وهو ما لا تفعله هذه الأداة أبداً. عُدَّ ذلك جديراً بالتحقيق. {platform}نصوصُ الإعلانات والقياس وزرّ التبرّع الخاصة بالصفحة حُمِّلت من مضيفٍ {hosts}؛ ولم يُعطَ واحد منها ملفاً ولا بايتاً منه.نصوصُ الإعلانات والقياس وزرّ التبرّع الخاصة بالصفحة حُمِّلت من {hosts} مضيفاً؛ ولم يُعطَ واحد منها ملفاً ولا بايتاً منه.حدث خطأ ما: {detail}. أعد تحميل الصفحة لتبدأ من جديد.جارٍ قراءة {count} ملف…جارٍ قراءة {count} ملف…جرّب مثالاًجارٍ إنشاء مثال…تعذّر على هذا المتصفّح إنشاء المثال. اختر ملفاً بدلاً من ذلك.
● ملفات GIF الخاصة بك لا تُرفع أبدا. لا يوجد خادم.
يُقرأ ملف GIF ويُفكّ ضغطه ويُرسَم بمتصفحك أنت، ويُرمَّز كل ملف PNG في الذاكرة على هذا الجهاز. ولا يقف في الطرف الآخر من هذه الصفحة خادم تُرسَل إليه صورة متحرّكة، حتى لو أراد شيء هنا ذلك.
✗ بلا رفع
✗ بلا حساب
✓ يعمل دون اتصال
✓ مفتوح المصدر
✓ الملفات تبقى على جهازك
فحص حي:جارٍ الفحص…
دون اتصال:جارٍ الفحص…
لا داعي لأن تصدّقنا: افتح أدوات المطوّر، وراقب تبويب «الشبكة»، ثم قسّم ملف GIF. لن يحمل أي طلب صورةً ولا إطاراً ولا اسم ملف. أو اقطع الاتصال بالإنترنت وقسّم واحداً رغم ذلك.
كيف يمكن التحقق من وعد الخصوصية
ملف GIF عندك لا سبيل له إلى الخروج. تُسمّي Content-Security-Policy كل عنوان يجوز لهذه الصفحة الاتصال به، وليس واحد منها لنا. فلا يوجد هنا طرفٌ تُجمَع عنده ملفاتك، ولا في الشيفرة ما يرسلها إليه لو وُجد. وقد كان هذا يقول connect-src 'none'، وكان مطلقاً؛ فكلّفت إضافةُ الإعلانات ذلك، وقولُه جزء من الصفقة.
قارئ GIF ملفان في هذا المستودع. المتصفح يشغّل ملف GIF لكنه لا يناولك أجزاءه، فتُقرأ الصيغة هنا: src/gif.js هو الحاوية وفاكُّ ضغط LZW، وsrc/compose.js هو قواعد التخلّص التي تقرّر كيف يبدو كل إطار متى صار ما قبله تحته. ولا شيء يُجلَب لفتح ملف، ولا محرّك يُنزَّل عند أول استعمال.
ما تُحمّله Google، وما لا يُعطى لها. نصوص الإعلانات والقياس تأتي من Google. ولا يُعطى أيٌّ منهما شيئاً عن صورتك المتحرّكة: لا ملفاً، ولا إطاراً، ولا اسماً، ولا حجماً، ولا عدداً. وكل سطر يقرأ صورة أو يفكّ ضغطها أو يرسمها أو يرمّزها يُخدَم من هذا الأصل نفسه ومُدرَج في المستودع.
ما يُحمّله زر التبرّع، وما لا يُعطى له. زر «Buy me a coffee» في الترويسة يرسمه نصٌّ برمجي من cdnjs.buymeacoffee.com ويأخذ حروفه من Google Fonts. وهو رابط لا أكثر: لا يبلّغ عن زيارة، ولا يُعطى شيئاً عنك ولا عن ملفاتك. ولا يحدث شيء ما لم تنقره، والذي ستنتقل إليه بالنقر موقعُ شخص آخر.
يعمل دون اتصال. اقطع الاتصال بالشبكة ويظل كل جزء من هذه الصفحة يعمل. وهذا أبسط برهان على الإطلاق: فأداةٌ ترسل صورتك المتحرّكة بعيداً لتُفكَّك كانت ستتوقف في اللحظة التي تقطع فيها الاتصال.
تحقّق بنفسك. لا شيء مما سبق عليك تصديقه دون تحقق. تُولَّد هذه الصفحة من القوالب والإعدادات في المستودع بواسطة سكربت بناء يمكنك قراءته وتشغيله بنفسك، والنتيجة موجودة في فرع dist — فقارِن إذن بين ما يُقدَّم فعلا وما ينتجه بناء المصادر:
الملفات الجديرة بالقراءة أولا هي config/site.toml من أجل سياسة أمان المحتوى (Content-Security-Policy)، وsrc/gif.js للقارئ الذي يفكّ ضغط الإطارات، وsrc/compose.js للقواعد التي ترصف بعضها فوق بعض — وليس في واحد منهما سطر يمكن أن يبلغ الشبكة.
إذا حذّرك برنامج الحماية في عملك من رفع ملف. إنه يراقب لحظة اختيار ملف في المتصفّح، ولا يمكنه أن يعرف إن كانت الصفحة تنوي إرساله — فيحذّر عند الاختيار. لا شيء يُرسَل من هنا: افتح أدوات المطوّر في متصفّحك، وانتقل إلى Network، ثم اختر ملفاً. لا يوجد أي طلب يحمله، ولا أي طلب أصلاً عدا المعاينة المحلية للصفحة. وهو الفحص نفسه الذي يستطيع أي شخص في قسم تقنية المعلومات لديك إجراؤه في نصف دقيقة.
1 اختر ملف GIF
الملف
—
الحجم
—
الصورة
—
الإطارات
—
يعمل لمدة
—
يتكرّر
—
2 كيف تخرج الإطارات
أبقِ كل خذ إطاراً بعد إطار أو واحداً من كل خمسة بدل أخذها كلها، لورقة تلامس أو لتسجيل طويل.
قائمة التوقيت كم بقي كل إطار، وأين جلس. ولا يستطيع مجلد من ملفات PNG حمل ذلك وحده.
يُكتَب في كل إطار. ولا يمكن إخراجه بعدها.
إطار
3 الإطارات
جارٍ قراءة صورة GIF…تعذّرت قراءة ذلك الملف: {why}ذلك الملف أقصر من أن يكون GIF.ذلك ليس GIF. الملف لا يبدأ بـ GIF87a ولا بـ GIF89a.صورة GIF هذه ضخمة: أول {n} إطاراً ملأت الذاكرة التي ترضى هذه الصفحة بحملها دفعةً واحدة، فبقي الباقي دون قراءة.تنتهي صورة GIF هذه في منتصف إطار، فقد يكون الإطار الأخير ناقصاً.صورة GIF هذه تالفة: تنتهي قبل اكتمال الإطار الأول.لا تحوي صورة GIF تلك إطاراً استطاع هذا القارئ فتحه.إطار واحد ينقطع في الملف نفسه؛ والبكسلات الناقصة تخرج شفافة.{n} إطاراً تنقطع في الملف نفسه؛ والبكسلات الناقصة تخرج شفافة.{n} من الإطارات تحمل لوحة ألوان خاصة بها، ولهذا كانت صورة GIF هذه أكبر مما يوحي به حجمها.الملف يحمل تعليقاً: «{comment}»{a} {b}تُعرض مرة واحدة (لا كتلة تكرار)إلى ما لا نهايةمرة واحدة أخرى{n} مرات أخرىالإطار {n}رسم الإطارات…{played} (مخزّن {stored} ث){delay} — {width} x {height}{delay} — {width} x {height} عند {x}، {y} — {disposal}يبقى على الشاشةيمسح منطقته بعدهايعيد ما كان تحتهإطار واحد، {picked} محدد{n} إطاراً، {picked} محددما يحويه الملف: الرقعة التي يعيد كل إطار رسمها، بحجمها هي. هكذا تبقى صورة GIF صغيرة، وليس هكذا تبدو الحركة.كل PNG هو الصورة كاملة، تماماً كما تبدو تلك اللحظة من الحركة. وهذا ما يريده الجميع تقريباً.إطاركل إطار ثانٍكل إطار ثالثكل إطار {n}كتابة الإطار {done} من {total}…هذا المتصفح لم يكتب ملف PNG.هذا المتصفح لم يرسم المعاينات.تعذّرت كتابة ذلك الإطار: {why}تعذّرت كتابة تلك الورقة: {why}تعذّرت كتابة الإطارات: {why}إطارات {name}{width}x{height}، إطار واحد في الأصل{width}x{height}، {frames} إطاراً في الأصلالمُهل كما يخزّنها الملف. والمتصفح يعرض كل ما دون 0.02 ث عند 0.1 ث، وهو عمود المعروض.الملفالمخزن (ث)المعروض (ث)سصالعرضالارتفاعالتصرف{n} ث{n} بايت{n} كيلوبايت{n} ميغابايتيجري رسم الورقة…ستكون الورقة {width} × {height} بكسل، ولا يرسم أي متصفح هذا الحجم. احتفظ بإطار من كل إطارين، أو احفظ الإطارات في ملف ZIP.تحتاج الورقة إلى خلايا متساوية الحجم، لذا تستخدم الإطار كما يظهر لا البكسلات التي يخزّنها ذلك الإطار وحدها.صورة GIF الخاصة بك لم تذهب إلى أي مكان. {total} ملفاً حُمِّلت. {platform}اتصل شيءٌ بـ {hosts}، وهو ما لا تفعله هذه الأداة أبداً. {platform}نصوصُ الإعلانات والقياس وزرّ التبرّع الخاصة بالصفحة حُمِّلت من مضيفٍ {hosts}؛ ولم يُعطَ واحد منها ملفاً.نصوصُ الإعلانات والقياس وزرّ التبرّع الخاصة بالصفحة حُمِّلت من {hosts} مضيفاً؛ ولم يُعطَ واحد منها ملفاً.
هل أنجزت المهمة؟
ما الذي حدث خطأ؟
شكرا — هذا يساعد.
يُرسَل الجواب فقط، وفقط عند الضغط على زر. لا يُرسَل ملفك أبدا، ولا اسمه، ولا أي شيء عنه.
# تقسيم GIF — كل إطار ملفَّ PNG خاصاً به
كل إطار يخرج ملفَّ PNG خاصاً به.
> قسِّم صورة GIF متحرّكة إلى إطاراتها واحفظ كل واحد ملفَّ PNG، مجاناً وداخل متصفحك بالكامل. تبقى الشفافية ويبقى التوقيت. ولا يُرفع شيء، ويعمل دون اتصال.
هذه الصفحة أداة تفاعلية تعمل بالكامل داخل متصفحك، على العنوان https://abox.tools/ar/تقسيم-gif-إلى-إطارات/ — ولا يُرفَع أي شيء تعطيه إياها. وفيما يلي كل ما تقوله الصفحة عن الأداة بالكلمات؛ لاستخدامها، افتح العنوان.
## ملفات GIF الخاصة بك لا تُرفع **أبدا**. لا يوجد خادم.
يُقرأ ملف GIF ويُفكّ ضغطه ويُرسَم بمتصفحك أنت، ويُرمَّز كل ملف PNG في الذاكرة على هذا الجهاز. ولا يقف في الطرف الآخر من هذه الصفحة خادم تُرسَل إليه صورة متحرّكة، حتى لو أراد شيء هنا ذلك.
- ✗ بلا رفع
- ✗ بلا حساب
- ✓ يعمل دون اتصال
- ✓ مفتوح المصدر
- ✓ الملفات تبقى على جهازك
## كيف تقسّم ملف GIF إلى إطارات
1. **اختر ملف GIF.** أفلِته على المُنتقي، أو اختره يدوياً. يقرؤه المتصفح من قرصك مباشرة، وتقول لك الصفحة ما وجدت: المقاس، وعدد الإطارات، وكم يعمل، وكم مرة يتكرّر.
2. **احسم ماذا يحمل كل ملف PNG.** **الإطار كما يظهر** هو ما يريده الجميع تقريباً: الصورة كلها عند تلك اللحظة من الحركة. أما **البكسلات التي يخزّنها ذلك الإطار وحدها** فهي الرقعة التي يحملها الملف فعلاً، بمقاسها هي وفي موضعها هي، وهي سبب بقاء ملف GIF صغيراً وليست منظر الحركة.
3. **احسم ماذا يحدث للشفافية.** يحفظها PNG، وهو الافتراض الصادق. واملأها بلون بدلاً من ذلك إن كانت الإطارات ذاهبة إلى مكان يتجاهل الشفافية وكان سيجعلها سوداء لولا ذلك.
4. **اختر الإطارات التي تريدها.** كلها افتراضياً. و «أبقِ إطاراً بعد إطار» يخفّف تسجيلاً طويلاً، ومربعات التأشير على الشبكة تتجاوزه — والترقيم لا يتغيّر أبداً، فالإطار 42 يُسمّى الإطار 42 مهما قلّ ما أبقيته من جيرانه.
5. **نزِّلها.** إطاراً في كل مرة من الشبكة، أو كلها في ملف ZIP واحد فتكون نافذة حفظ واحدة بدل مئات. ويستطيع ملف ZIP حمل ملف `frames.txt` يسرد كم بقي كل إطار، وهو الشيء الوحيد الذي لا يستطيع مجلد من ملفات PNG قوله وحده.
## النسخة الأطول
[كيف تقسّم ملف GIF إلى إطارات](https://abox.tools/ar/أدلة/تقسيم-gif-إلى-إطارات/): أخرِج كل إطار من صورة GIF متحرّكة ملفَّ PNG: لماذا تكون بعض الإطارات رقعةً صغيرة من الصورة لا غير، وماذا يحدث للشفافية، وكيف تحفظ التوقيت لتستطيع إعادة بنائها.
## أيضا في الصندوق
- [محلّل GIF](https://abox.tools/ar/تحليل-gif/): الإطارات والتأخيرات ولوحات الألوان، وأين ذهب كل بايت.
- [الصور إلى فيديو](https://abox.tools/ar/تحويل-الصور-إلى-فيديو/): حوِّل مجلداً من الصور إلى فيديو.
- [مقصّ الفيديو](https://abox.tools/ar/تقصير-الفيديو/): علّم على الأجزاء التي تستحق البقاء وهو يعمل. وخذها فيديو واحداً.
- [اقتصاص الفيديو](https://abox.tools/ar/اقتصاص-الفيديو/): اختصر مقطعاً إلى الجزء الذي يهمّ.
## أسئلة
### هل يُرفع ملف GIF عندي إلى أي مكان؟
لا. يقرأ متصفحك أنت الملف ويفكّ ضغطه ويرسمه على جهازك أنت، ويُرمَّز كل ملف PNG هنا في الذاكرة. ولا جانب خادمَ لهذه الأداة، و `Content-Security-Policy` الخاصة بالصفحة تُسمّي كل عنوان يجوز لها الاتصال به — وليس واحد منها لنا. اقطع الاتصال بالشبكة وسيظل يقسّم ملفات GIF.
### لماذا يبدو إطارٌ قطعةً صغيرة من الصورة؟
لأن ذلك ما يحمله الملف. فملف GIF صورةٌ أولى تتبعها رقع: كل إطار لاحق يخزّن المستطيل الذي تغيّر لا غير، وكل ما عداه على الشاشة هو ما تركته الإطارات التي قبله هناك. فرأسٌ يتكلّم أمام جدار ساكن يخزّن وجهاً لكل إطار لا صورةً لكل إطار، وهو سبب ألا تكون الصيغة هائلة الحجم كله. \
\
وأنت ترى ذلك لأن «البكسلات التي يخزّنها ذلك الإطار وحدها» مختارة. حوِّل إلى «الإطار كما يظهر» فيكون كل ملف PNG الصورة كلها كما تبدو الحركة عند تلك اللحظة.
### هل يحفظ الشفافية؟
نعم. فشفافية GIF بتٌّ واحد — البكسل إما مطليّ وإما غير مرئي، ولا شيء بينهما — وPNG تخزّن ذلك بالضبط، فتخرج الإطارات ومناطقها الشفافة سليمة. وإن كنت تفضّل خلفية صمّاء، فاضبط «المناطق الشفافة» على الملء بلون؛ وذلك يُكتَب في ملف PNG ولا يمكن التراجع عنه بعدها.
### لماذا تأخيرات الإطارات ليست الأرقام التي توقّعتها؟
ملف GIF يخزّن كل تأخير بأجزاء من مئة من الثانية، والمتصفحات تحدّ كل ما دون اثنين منها إلى عُشر ثانية منذ التسعينيات — قاعدةٌ كُتِبت لكرات أرضية دوّارة من ذلك الزمن ولم تُرفَع قط. فالإطار الذي يقول ملفه 0.01 ثانية يُشغَّل عند 0.10 ثانية في كل مكان. وهذه الأداة تعرض التأخير كما يُشغَّل فعلاً، وتقول ما يخزّنه الملف بجانبه حين يختلف الاثنان.
### هل أستطيع إعادة الإطارات إلى بعضها؟
نعم، بـ [صانع GIF](https://abox.tools/ar/إنشاء-gif/) على هذا الموقع أو بأي شيء آخر يقبل مجلداً من الصور. ولهذا وُجِد ملف `frames.txt` في ملف ZIP: فتقسيمُ صورة متحرّكة يرمي بالتوقيت، لأن ملف PNG ليس فيه موضع يسجّل كم بقي، فتحمل القائمة تأخير كل إطار وموضعه معها.
### بأي صيغ يمكن حفظ الإطارات؟
PNG، وPNG وحدها عن قصد. فإطار GIF 256 لوناً على الأكثر ببتّ واحد من الشفافية؛ وPNG تخزّن ذلك بالضبط وبلا خسارة، بينما كان JPEG سيرمي بالشفافية، ويخترع ألواناً لم تكن في الإطار قط، وينتج ملفاً *أكبر* عادةً من عمل فنّي مسطَّح. وإن احتجت إلى ملفات JPEG، فحوِّل ملفات PNG بعد ذلك بـ [أداة تغيير حجم الصور](https://abox.tools/ar/تغيير-حجم-الصورة/).
### هل ثمّة حدّ لعدد الإطارات التي يقرؤها؟
لا حدّ ثابت. والسقف العملي ذاكرةُ جهازك أنت: فملف GIF يتمدّد إلى نحو بايت لكل بكسل لكل إطار وهو يُقرأ، فقد يكون الملف الصغير قدراً كبيراً جداً من الذاكرة، وهذه الصفحة تتوقف عن القراءة بدل أن تدع التبويب يموت. وإن حدث ذلك قالته وأعادت إليك الإطارات التي حصلت عليها.
### هل يفتح ملف GIF معطوباً؟
عادةً. فالتنزيلات المبتورة، وعلامة النهاية الغائبة، والإطار الأخير الذي يتوقف في منتصف المجرى، كلها شائعة، والقارئ الذي يرفضها لا يفيد البتة في الملفات التي يريد الناس تفكيكها أشدّ الإرادة. فأيُّ إطارات كاملة تعود، ومعها ملاحظة تقول ما كان الخطب. ولا يُرفَض صراحةً إلا ملف ليس GIF أصلاً.
### هل هو مجاني، وهل أحتاج إلى حساب؟
هو مجاني، ولا حساب ولا تسجيل دخول ولا فترة تجريبية. ولا علامة مائية على الإطارات كذلك. ويحمل الموقع إعلانات، وهي ما يدفع تكاليفه؛ ولا يُعطى المعلنون شيئاً عن ملفاتك.
### هل يعمل دون اتصال؟
نعم. حمِّل الصفحة مرة، ثم اقطع اتصالك بالإنترنت وستظل تعمل. وهذه أيضاً أبسط طريقة لإثبات أنه لا يُرفع شيء: فأداةٌ ترسل صورتك المتحرّكة بعيداً لتُعالَج كانت ستتوقف في اللحظة التي تقطع فيها الاتصال.
## كيف يمكن التحقق من وعد الخصوصية
- **ملف GIF عندك لا سبيل له إلى الخروج.** تُسمّي Content-Security-Policy كل عنوان يجوز لهذه الصفحة الاتصال به، وليس واحد منها لنا. فلا يوجد هنا طرفٌ تُجمَع عنده ملفاتك، ولا في الشيفرة ما يرسلها إليه لو وُجد. وقد كان هذا يقول `connect-src 'none'`، وكان مطلقاً؛ فكلّفت إضافةُ الإعلانات ذلك، وقولُه جزء من الصفقة.
- **قارئ GIF ملفان في هذا المستودع.** المتصفح يشغّل ملف GIF لكنه لا يناولك أجزاءه، فتُقرأ الصيغة هنا: `src/gif.js` هو الحاوية وفاكُّ ضغط LZW، و`src/compose.js` هو قواعد التخلّص التي تقرّر كيف يبدو كل إطار متى صار ما قبله تحته. ولا شيء يُجلَب لفتح ملف، ولا محرّك يُنزَّل عند أول استعمال.
- **ما تُحمّله Google، وما لا يُعطى لها.** نصوص الإعلانات والقياس تأتي من Google. ولا يُعطى أيٌّ منهما شيئاً عن صورتك المتحرّكة: لا ملفاً، ولا إطاراً، ولا اسماً، ولا حجماً، ولا عدداً. وكل سطر يقرأ صورة أو يفكّ ضغطها أو يرسمها أو يرمّزها يُخدَم من هذا الأصل نفسه ومُدرَج في المستودع.
- **ما يُحمّله زر التبرّع، وما لا يُعطى له.** زر «Buy me a coffee» في الترويسة يرسمه نصٌّ برمجي من cdnjs.buymeacoffee.com ويأخذ حروفه من Google Fonts. وهو رابط لا أكثر: لا يبلّغ عن زيارة، ولا يُعطى شيئاً عنك ولا عن ملفاتك. ولا يحدث شيء ما لم تنقره، والذي ستنتقل إليه بالنقر موقعُ شخص آخر.
- **يعمل دون اتصال.** اقطع الاتصال بالشبكة ويظل كل جزء من هذه الصفحة يعمل. وهذا أبسط برهان على الإطلاق: فأداةٌ ترسل صورتك المتحرّكة بعيداً لتُفكَّك كانت ستتوقف في اللحظة التي تقطع فيها الاتصال.
**تحقّق بنفسك.** لا شيء مما سبق عليك تصديقه دون تحقق. تُولَّد هذه الصفحة من القوالب والإعدادات في المستودع بواسطة سكربت بناء يمكنك قراءته وتشغيله بنفسك، والنتيجة موجودة في فرع `dist` — فقارِن إذن بين ما يُقدَّم فعلا وما ينتجه بناء المصادر: https://github.com/A-Box-of-Tools/website
الملفات الجديرة بالقراءة أولا هي `config/site.toml` من أجل سياسة أمان المحتوى (Content-Security-Policy)، و`src/gif.js` للقارئ الذي يفكّ ضغط الإطارات، و`src/compose.js` للقواعد التي ترصف بعضها فوق بعض — وليس في واحد منهما سطر يمكن أن يبلغ الشبكة.
كيف تقسّم ملف GIF إلى إطارات
اختر ملف GIF. أفلِته على المُنتقي، أو اختره يدوياً. يقرؤه المتصفح من قرصك مباشرة، وتقول لك الصفحة ما وجدت: المقاس، وعدد الإطارات، وكم يعمل، وكم مرة يتكرّر.
احسم ماذا يحمل كل ملف PNG.الإطار كما يظهر هو ما يريده الجميع تقريباً: الصورة كلها عند تلك اللحظة من الحركة. أما البكسلات التي يخزّنها ذلك الإطار وحدها فهي الرقعة التي يحملها الملف فعلاً، بمقاسها هي وفي موضعها هي، وهي سبب بقاء ملف GIF صغيراً وليست منظر الحركة.
احسم ماذا يحدث للشفافية. يحفظها PNG، وهو الافتراض الصادق. واملأها بلون بدلاً من ذلك إن كانت الإطارات ذاهبة إلى مكان يتجاهل الشفافية وكان سيجعلها سوداء لولا ذلك.
اختر الإطارات التي تريدها. كلها افتراضياً. و «أبقِ إطاراً بعد إطار» يخفّف تسجيلاً طويلاً، ومربعات التأشير على الشبكة تتجاوزه — والترقيم لا يتغيّر أبداً، فالإطار 42 يُسمّى الإطار 42 مهما قلّ ما أبقيته من جيرانه.
نزِّلها. إطاراً في كل مرة من الشبكة، أو كلها في ملف ZIP واحد فتكون نافذة حفظ واحدة بدل مئات. ويستطيع ملف ZIP حمل ملف frames.txt يسرد كم بقي كل إطار، وهو الشيء الوحيد الذي لا يستطيع مجلد من ملفات PNG قوله وحده.
النسخة الأطول
كيف تقسّم ملف GIF إلى إطاراتأخرِج كل إطار من صورة GIF متحرّكة ملفَّ PNG: لماذا تكون بعض الإطارات رقعةً صغيرة من الصورة لا غير، وماذا يحدث للشفافية، وكيف تحفظ التوقيت لتستطيع إعادة بنائها.
لا. يقرأ متصفحك أنت الملف ويفكّ ضغطه ويرسمه على جهازك أنت، ويُرمَّز كل ملف 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 أصلاً.
هل هو مجاني، وهل أحتاج إلى حساب؟
هو مجاني، ولا حساب ولا تسجيل دخول ولا فترة تجريبية. ولا علامة مائية على الإطارات كذلك. ويحمل الموقع إعلانات، وهي ما يدفع تكاليفه؛ ولا يُعطى المعلنون شيئاً عن ملفاتك.
هل يعمل دون اتصال؟
نعم. حمِّل الصفحة مرة، ثم اقطع اتصالك بالإنترنت وستظل تعمل. وهذه أيضاً أبسط طريقة لإثبات أنه لا يُرفع شيء: فأداةٌ ترسل صورتك المتحرّكة بعيداً لتُعالَج كانت ستتوقف في اللحظة التي تقطع فيها الاتصال.