# محلّل GIF — ما الذي في ملف GIF فعلاً

الإطارات والتأخيرات ولوحات الألوان، وأين ذهب كل بايت.

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

هذه الصفحة أداة تفاعلية تعمل بالكامل داخل متصفحك، على العنوان https://abox.tools/ar/تحليل-gif/ — ولا يُرفَع أي شيء تعطيه إياها. وفيما يلي كل ما تقوله الصفحة عن الأداة بالكلمات؛ لاستخدامها، افتح العنوان.

## ملفات GIF الخاصة بك لا تُرفع **أبدا**. لا يوجد خادم.

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

- ✗ بلا رفع
- ✗ بلا حساب
- ✓ يعمل دون اتصال
- ✓ مفتوح المصدر
- ✓ الملفات تبقى على جهازك

## كيف تحلّل ملف GIF

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

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

[ماذا يوجد داخل ملف GIF فعلاً](https://abox.tools/ar/أدلة/ماذا-يوجد-داخل-gif/): الإطاراتُ والتأخيراتُ وقواعدُ التخلّص وجداولُ الألوان مشروحةً، ولماذا ترفض المتصفحاتُ أسرعَ التأخيرات، وكيف تعرف أين ذهب حجمُ ملف GIF فعلاً.

## أيضا في الصندوق

- [الصور إلى فيديو](https://abox.tools/ar/تحويل-الصور-إلى-فيديو/): حوِّل مجلداً من الصور إلى فيديو.
- [مقصّ الفيديو](https://abox.tools/ar/تقصير-الفيديو/): علّم على الأجزاء التي تستحق البقاء وهو يعمل. وخذها فيديو واحداً.
- [اقتصاص الفيديو](https://abox.tools/ar/اقتصاص-الفيديو/): اختصر مقطعاً إلى الجزء الذي يهمّ.
- [عكس الفيديو](https://abox.tools/ar/تشغيل-الفيديو-عكسيا/): آخر إطار أولاً، والصوت معه.

## أسئلة

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

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

### لماذا يعمل ملف GIF عندي أبطأ مما تقول التأخيرات؟

لأن كل متصفح يرفض احترام تأخير دون جزأين من مئة من الثانية ويُبقي الإطار عُشر ثانية بدلاً من ذلك. وقد كُتِبت القاعدة في Netscape سنة 1996، للكرات الأرضية الدوّارة ولافتات «تحت الإنشاء» في ذلك الزمن، ونُسِخت في كل متصفح منذئذ؛ ولم يرفعها شيء قط. \
\
فملفُّ GIF الذي تقول إطاراته كلها 0.01 ثانية لا يعمل عند 100 إطار في الثانية. بل عند 10، وهو أبطأ خمس إلى عشر مرات مما قصده ما صنعه. وهذه الصفحة تعرض الرقمين — ما يقوله الملف وما سيفعله فعلاً — وتعلّم على الإطارات المتأثّرة. والعلاج، في ما صنع الملف، أن يُكتَب 0.02 لا 0.01.

### ماذا تعني «طريقة التخلّص»؟

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

### لماذا ملف GIF عندي بهذا الكبر؟

جدولُ «أين ذهبت البايتات» يجيب عن ذلك لملفك بعينه لا في العموم، والأجوبة الممكنة قليلة. \
\
فإن كان جميعه تقريباً **بكسلات مضغوطة**، فالملف كثيرٌ من الصورة ببساطة: إذ يخزّن GIF كل إطار بكسلاتٍ كاملة، بلا تعويض حركة وبلا مقبض جودة، فالحجم تقريباً هو المساحة في عدد الإطارات. وإطاراتٌ أقلّ أو مقاسٌ أصغر أو ألوانٌ أقلّ هي الروافع الوحيدة. \
\
وإن كانت شريحة كبيرة **جداول ألوان**، فالملف يكتب لوحة لكل إطار بـ 768 بايتاً لكل واحدة. وإن كانت شريحة كبيرة **بيانات وصفية**، فقد ترك محرِّرٌ حزمة XMP وراءه ويمكن إزالتها دون مسّ الصورة. وإن كانت الإطارات كلها تغطي اللوحة كلها، فلم يحسب المرمِّز قط أي جزء تغيّر فعلاً — وذلك في كل ما هو مصوَّر أو مسجَّل أكثرُ الملف.

### ما الفرق بين عرضَي الإطارات؟

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

### يقول إن في ملفي تعليقاً أو XMP. ما ذاك؟

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

### هل يستطيع فتح ملف GIF معطوب؟

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

### هل يغيّر ملفي؟

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

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

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

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

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

## كيف يمكن التحقق من وعد الخصوصية

- **ملف GIF عندك لا سبيل له إلى الخروج.** تُسمّي Content-Security-Policy كل عنوان يجوز لهذه الصفحة الاتصال به، وليس واحد منها لنا. فلا يوجد هنا طرفٌ يُجمَع عنده ملفك، ولا في الشيفرة ما يرسله إليه لو وُجد. وقد كان هذا يقول `connect-src 'none'`، وكان مطلقاً؛ فكلّفت إضافةُ الإعلانات ذلك، وقولُه جزء من الصفقة.
- **القارئ أربعة ملفات في هذا المستودع.** ولا شيء هنا يستعمل فاكَّ ترميز GIF الخاص بالمتصفح لمعرفة ما في الملف، لأن ذلك الفاكّ لن يقول أين ذهب بايت. فتُقرأ الصيغة يدوياً: `src/gif.js` يمشي في الكتل، و`src/lzw.js` يفكّ ضغط البكسلات، و `src/frames.js` يرصفها، و`src/budget.js` يجمع الأجزاء من جديد ويتحقّق أنها تبلغ حجم الملف.
- **التعليقات والبيانات الوصفية تُعرَض عليك، ولا تُعرَض على أحد سواك.** قد يحمل ملف GIF كتلة تعليق، أو حزمة XMP تصف تعديلاً، أو ملفَّ ألوان، وهذه الصفحة تطبعها كلها. وتُوضَع على الشاشة أمامك ولا تذهب إلى أي مكان آخر: فلا حدث تحليلات في هذا المستودع يحمل شيئاً منها، ولا تستطيع الصفحة إرسال واحد لو وُجد.
- **ما تُحمّله Google، وما لا يُعطى لها.** نصوص الإعلانات والقياس تأتي من Google. ولا يُعطى أيٌّ منهما شيئاً عن ملفك: لا الملف، ولا مصغَّرة، ولا اسم، ولا حجم، ولا عدد إطارات، ولا تعليق. وكل سطر يقرأ ملف GIF أو يفكّ ضغطه أو يرسمه يُخدَم من هذا الأصل نفسه ومُدرَج في المستودع.
- **ما يُحمّله زر التبرّع، وما لا يُعطى له.** زر «Buy me a coffee» في الترويسة يرسمه نصٌّ برمجي من cdnjs.buymeacoffee.com ويأخذ حروفه من Google Fonts. وهو رابط لا أكثر: لا يبلّغ عن زيارة، ولا يُعطى شيئاً عنك ولا عن ملفاتك. ولا يحدث شيء ما لم تنقره، والذي ستنتقل إليه بالنقر موقعُ شخص آخر.
- **يعمل دون اتصال.** اقطع الاتصال بالشبكة ويظل كل جزء من هذه الصفحة يعمل. وهذا أبسط برهان على الإطلاق: فأداةٌ ترسل ملف GIF عندك بعيداً ليُحلَّل كانت ستتوقف في اللحظة التي تقطع فيها الاتصال.

**تحقّق بنفسك.** لا شيء مما سبق عليك تصديقه دون تحقق. تُولَّد هذه الصفحة من القوالب والإعدادات في المستودع بواسطة سكربت بناء يمكنك قراءته وتشغيله بنفسك، والنتيجة موجودة في فرع `dist` — فقارِن إذن بين ما يُقدَّم فعلا وما ينتجه بناء المصادر: https://github.com/A-Box-of-Tools/website

الملفات الجديرة بالقراءة أولا هي `config/site.toml` من أجل سياسة أمان المحتوى (Content-Security-Policy)، و`src/gif.js` لقارئ الكتل الذي يمشي في الملف، و`src/lzw.js` لفاكِّ الضغط، و `src/budget.js` لمحاسبة البايتات — وليس في واحد منها سطر يمكن أن يبلغ الشبكة.
