Graphics Interchange Format
GIF (CompuServe، 1987) تدعم التحريك بحد أقصى 256 لوناً لكل إطار باستخدام ضغط LZW. جدل براءة اختراع LZW عام 1994 أدى لولادة صيغة PNG. حوّل وأنشئ ملفات GIF متحركة في متصفحك مع FileDex — بدون رفع.
ملفاتك لا تغادر جهازك
أسئلة شائعة
كيف أحوّل فيديو MP4 قصير إلى صيغة GIF؟
أسقط ملف MP4 في محوّل FileDex واختر GIF كصيغة الإخراج. تقليل عدد الإطارات إلى 15 والعرض إلى 480 بكسل ضروري لتجنب ملف بحجم عشرات الميغابايت. أدوات التحويل الجيدة تُحسّن جدول الألوان تلقائياً للحصول على أفضل نتيجة بصرية.
لماذا حجم ملف GIF أكبر بكثير من فيديو MP4 بنفس المحتوى؟
GIF يضغط كل إطار كصورة مستقلة بخوارزمية LZW بدون فقدان، بينما MP4 يستغل التشابه بين الإطارات المتتالية. Codec الفيديو يُخزّن الفروقات فقط بدل الصورة الكاملة. هذا يجعل MP4 أصغر 10 إلى 20 مرة لنفس المحتوى المرئي.
هل صيغة GIF تدعم الخلفية الشفافة؟
GIF تدعم شفافية ثنائية: البكسل إما مرئي أو مخفي بالكامل دون مستويات وسيطة. حواف العناصر تظهر خشنة على خلفيات ملونة. للحصول على شفافية متدرجة، استخدم صيغة APNG أو WebP المتحرك.
ما الفرق بين GIF و WebP للصور المتحركة؟
WebP يدعم أكثر من 16 مليون لون مقابل 256 لوناً في GIF، ويُنتج ملفات أصغر حجماً بنسبة 60-80%. WebP يدعم أيضاً الشفافية الجزئية. العائق الوحيد: البريد الإلكتروني وبعض التطبيقات القديمة لا تعرض WebP المتحرك.
كيف أقلّل حجم ملف GIF متحرك؟
ثلاث طرق فعّالة: قلّل عدد الألوان من 256 إلى 64 أو 32، صغّر أبعاد الصورة، واحذف إطارات متناوبة لخفض معدل الإطارات. أداة gifsicle تُنفّذ الثلاثة عبر سطر الأوامر. تقليص الألوان وحده يُوفّر 40-60% من الحجم.
هل تُرسل ملفات GIF في WhatsApp كما هي أم يتم ضغطها؟
WhatsApp يُحوّل ملفات GIF المرسلة كوسائط إلى فيديو MP4 داخلياً ويعرضها كصور متحركة. الملف الأصلي لا يصل للمستقبل. لإرسال ملف GIF الحقيقي دون تحويل، أرسله كمستند.
لماذا تظهر ألوان ملف GIF باهتة مقارنة بالصورة الأصلية؟
جدول ألوان GIF يتسع لـ 256 لوناً فقط من أصل 16 مليون لون ممكن. الخوارزمية تختار أقرب 256 لوناً وتستخدم dithering لمحاكاة الباقي. الصور ذات التدرجات اللونية الواسعة تفقد نعومتها بوضوح بعد التحويل إلى GIF.
ما يميز .GIF
تتكوّن صيغة GIF من سلسلة إطارات ثابتة تُعرض بتتابع زمني محدد لإنتاج وهم الحركة. كل إطار صورة مستقلة بتنسيق 256 لوناً كحد أقصى، مضغوطة بخوارزمية LZW. الصيغة صدرت عام 1987 عن شركة CompuServe ولم تتغير بنيتها الجوهرية منذ النسخة 89a.
اكتشف التفاصيل التقنية
خوارزمية LZW: قاموس يبني نفسه
LZW اختصار Lempel-Ziv-Welch — خوارزمية ضغط بدون فقدان تعمل ببناء قاموس للأنماط المتكررة أثناء القراءة. عند مرور الخوارزمية على سلسلة بكسلات متتالية بنفس اللون، تُسجّل النمط في القاموس وتُشير إليه برقم قصير بدل تكرار القيم.
المساحات ذات اللون الموحد تُضغط بكفاءة عالية — صف بكسلات بلون واحد يُختزل إلى بضع بايتات. التدرجات اللونية والصور الفوتوغرافية تُقاوم الضغط لأن كل بكسل يختلف عن جاره فلا تتكون أنماط طويلة في القاموس.
صورة GIF ثابتة بأبعاد 800x600 بتدرج لوني قد تتجاوز 500 كيلوبايت. نفس الأبعاد بخلفية صلبة ونص: أقل من 15 كيلوبايت. هذا الفارق — 33 ضعفاً — يشرح لماذا شعارات المواقع القديمة كانت تستخدم GIF بنجاح بينما الصور الفوتوغرافية تُنتج ملفات أكبر من JPEG بعشر مرات.
براءة اختراع LZW انتهت عام 2004 بعد جدل استمر عقداً. قبل انتهائها، الخوف من رسوم الترخيص دفع لتطوير صيغة PNG كبديل مجاني — لكن PNG لا تدعم التحريك في نسختها الأساسية.
حد 256 لوناً: قيد من 1987
كل إطار في ملف GIF يحمل جدول ألوان خاصاً يتسع لـ 256 لوناً فقط — 8 بت لكل بكسل. عند تصميم الصيغة، شاشات الحواسيب لم تعرض أكثر من ذلك أصلاً.
الخدعة المستخدمة لمحاكاة ألوان أكثر: dithering — توزيع نقاط من ألوان مختلفة بنمط منتظم أو عشوائي لخداع العين بلون وسيط غير موجود في الجدول. Floyd-Steinberg هو خوارزمية dithering الأشهر وتُنتج نتائج مقبولة على أغلب الصور.
ملف GIF متحرك يمكنه استخدام جدول ألوان مختلف لكل إطار — ما يُعرف بـ local color table. هذا يرفع العدد الفعلي للألوان المُستخدمة في الرسوم المتحركة لكنه يُضخّم حجم الملف لأن كل جدول يستهلك حتى 768 بايت (256 لون x 3 بايت لكل لون).
اختيار الألوان الـ 256 من الصورة الأصلية (التي قد تحتوي 16 مليون لون) يُسمّى color quantization. خوارزمية Median Cut تقسم فضاء الألوان إلى مناطق متساوية الكثافة. NeuQuant تستخدم شبكة عصبية مُبسّطة. الفارق بينهما واضح في صور الطبيعة ذات التدرجات الخضراء والزرقاء.
آلية الرسوم المتحركة الداخلية
كل إطار يحمل 3 خصائص تتحكم بالعرض: مدة التأخير (بوحدة 10 ميلي ثانية — أي أقل تأخير ممكن هو 10 ميلي ثانية)، طريقة التخلص من الإطار السابق (disposal method)، وموقع الإطار على اللوحة (إزاحة أفقية ورأسية).
خاصية الإزاحة تسمح لإطار أصغر من اللوحة بالرسم في موقع محدد — تقنية تُقلّل الحجم بعدم إعادة رسم الأجزاء الثابتة. إطار يُغطي 10% فقط من اللوحة يستهلك 10% من البيانات.
طريقة disposal تحدد ما يحدث قبل رسم الإطار التالي. القيمة 0: لا إجراء — نادراً ما تُستخدم. القيمة 1: الإطار الجديد يُرسم فوق القديم مباشرة — الأكثر شيوعاً. القيمة 2: المساحة تُمسح إلى لون الخلفية أولاً ثم يُرسم الإطار الجديد. القيمة 3: تُستعاد الحالة السابقة قبل رسم الإطار الحالي — تُستخدم في تأثيرات معقدة.
أخطاء disposal هي السبب الأول للوميض والتشوهات في ملفات GIF المُحررة يدوياً. كثير من الأدوات تتجاهل هذه القيمة عند التصدير.
الشفافية: بت واحد فقط
GIF تدعم الشفافية لكن بشكل بدائي — كل بكسل إما معتم 100% أو شفاف 100%. لا توجد شفافية جزئية. هذا يعني أن حواف النص أو الأشكال المنحنية على خلفية شفافة تظهر مسننة لأنه لا يمكن مزج البكسل مع ما خلفه.
الحل القديم: اختيار لون خلفية يطابق الموقع المستهدف. لكن هذا يُفشل الصورة على أي خلفية مختلفة. PNG تحل المشكلة بقناة ألفا كاملة — 256 مستوى شفافية لكل بكسل.
بدائل GIF: APNG و WebP و MP4
APNG يُضيف التحريك فوق صيغة PNG مع دعم كامل للشفافية الجزئية و 16 مليون لون. الدعم في المتصفحات أصبح شاملاً منذ 2023. الحجم أكبر من GIF للألوان القليلة لكن أصغر بكثير للصور الفوتوغرافية.
WebP من Google يجمع بين الشفافية الكاملة والتحريك والضغط مع فقدان — بديل أفضل من GIF في كل المعايير. حجم أصغر 60-80% من GIF المُكافئ.
MP4 بصيغة H.264 يتفوق على الجميع في نسبة الضغط. فيديو 5 ثوانٍ بدقة 480p: أقل من 1.5 ميغابايت مقابل 15 ميغابايت لملف GIF مكافئ. العيب: لا شفافية ولا تشغيل تلقائي في البريد الإلكتروني.
خدعة المنصات: GIF الذي ليس GIF
منصات التواصل الكبرى (تويتر، تيليجرام، Discord) تحوّل ملفات GIF سراً إلى فيديو MP4 عند الرفع — ما تراه كـ"GIF" هو فعلياً فيديو H.264 بحجم أصغر 90%. منصة Tenor التابعة لـ Google تُقدّم نسخة MP4 ونسخة WebM لكل "GIF" في مكتبتها.
السبب اقتصادي بحت. عند تقديم مليارات الملفات يومياً، توفير 90% من النطاق الترددي يعني ملايين الدولارات شهرياً. المستخدم لا يلحظ الفارق لأن واجهة التطبيق تعرض الفيديو بلا عناصر تحكم تماماً كـ GIF.
الاستخدام العربي وثقافة الملصقات
على WhatsApp و Telegram في المنطقة العربية، الملصقات المتحركة بصيغة WebP حلّت محل GIF في المحادثات اليومية لتبادل ردود الفعل والتعبيرات. Telegram يدعم ملصقات متحركة بصيغة TGS (مبنية على Lottie) بحجم أقصى 64 كيلوبايت — أخف 200 مرة من GIF مكافئ.
WhatsApp يعرض مكتبة GIF مدمجة مُقدّمة من Tenor. عند اختيار "GIF" من المكتبة، التطبيق يُحمّل نسخة MP4 مضغوطة وليس ملف GIF الأصلي. البحث بالعربية في هذه المكتبة محدود مقارنة بالإنجليزية — معظم النتائج تأتي من كلمات مفتاحية إنجليزية.
مع ذلك، GIF تبقى صيغة الملف الوحيدة للصور المتحركة التي تعمل في كل مكان: البريد الإلكتروني، المتصفحات القديمة، تطبيقات المراسلة، وحتى شاشات العرض الصناعية. هذا التوافق الشامل يضمن بقاءها.
البنية الثنائية لملف GIF
كل ملف GIF يبدأ بتوقيع 6 بايتات: GIF87a أو GIF89a — هذه هي magic bytes التي تُحدد الصيغة والإصدار. يليها واصف الشاشة المنطقية: عرض وارتفاع بوحدة البكسل (2 بايت لكل منهما)، عمق الألوان، ووجود جدول ألوان عام.
بعد الواصف يأتي جدول الألوان العام إن وُجد — 3 بايتات لكل لون (أحمر، أخضر، أزرق). ثم سلسلة من كتل البيانات: كتل صور، كتل تمديد (extension blocks) تحمل معلومات التحريك والشفافية والتعليقات النصية، وأخيراً بايت الإنهاء 0x3B.
كتل التمديد هي ما يُميّز الإصدار 89a عن 87a. بدونها لا توجد شفافية ولا تحريك — فقط صورة ثابتة بـ 256 لوناً.
تحسين الحجم: تقنيات متقدمة
أدوات مثل gifsicle و gifsicle --optimize=3 تُعيد ترتيب جداول الألوان وتُدمج الإطارات المتشابهة وتُزيل البيانات الزائدة. التحسين من المستوى 3 يُخزّن فقط البكسلات المتغيرة بين كل إطارين — وهذا يُقلّص الحجم 30-50% دون أي تأثير مرئي.
تقنية أخرى: تقليل عدد الإطارات. GIF بمعدل 30 إطاراً في الثانية لا يبدو أنعم من 15 إطاراً للعين البشرية في أغلب المحتوى. حذف نصف الإطارات يُنصّف الحجم. تصغير الأبعاد من 640 إلى 320 بكسل يُقلّص الحجم 75% لأن عدد البكسلات ينخفض إلى الربع.
الجمع بين الثلاثة — ألوان أقل، إطارات أقل، أبعاد أصغر — يُحوّل ملف 12 ميغابايت إلى 800 كيلوبايت مع محتوى مقبول للمشاركة عبر البريد الإلكتروني أو رسائل المحادثة.
مقارنة .GIF مع البدائل
| المقارنة | المعيار | الفائز |
|---|---|---|
| .GIF vs .WEBP | حجم الملف المتحرك WebP المتحرك يستخدم ضغط VP8 فيُنتج ملفات أصغر 25-34% من GIF المُكافئ مع دعم 16 مليون لون وشفافية كاملة. GIF محدود بـ 256 لوناً لكل إطار ولا يملك ضغطاً بين الإطارات. | WEBP أفضل |
| .GIF vs .APNG | جودة التحريك مع الشفافية APNG يدعم 16 مليون لون مع قناة ألفا كاملة (256 مستوى شفافية) لكل إطار متحرك. GIF محدود بشفافية ثنائية — كل بكسل إما معتم أو شفاف بالكامل، فتظهر حواف مسننة على الخلفيات الشفافة. | APNG أفضل |
| .GIF vs .MP4 | كفاءة الضغط للمحتوى المتحرك MP4 بترميز H.264 يستغل التشابه بين الإطارات المتتالية فيحقق ملفات أصغر 10-20 ضعفاً. مقطع 5 ثوانٍ بدقة 480p: أقل من 300 كيلوبايت كـ MP4 مقابل 5 ميغابايت كـ GIF. العيب: MP4 لا يدعم الشفافية. | MP4 أفضل |
| .GIF vs .PNG | جودة الصور الثابتة PNG تدعم 48 بت لكل بكسل (16.7 مليون لون) مع قناة ألفا كاملة وضغط Deflate بكفاءة أعلى. GIF الثابت محدود بـ 256 لوناً مع شفافية ثنائية فقط. PNG أفضل لكل استخدام ثابت باستثناء الرسوم البسيطة جداً. | PNG أفضل |
حوّل .GIF إلى...
المرجع التقني
- نوع MIME
image/gif- Magic Bytes
47 49 46 38GIF8 signature, followed by 7a (GIF87a) or 9a (GIF89a) version.- المطوّر
- CompuServe
- سنة التقديم
- 1987
- معيار مفتوح
- نعم
GIF8 signature, followed by 7a (GIF87a) or 9a (GIF89a) version.
البنية الثنائية
تبدأ ملفات GIF بترويسة من 6 بايتات تحتوي على توقيع ASCII وهو 'GIF' يليه سلسلة الإصدار '87a' أو '89a'. يُعلن واصف الشاشة المنطقية (7 بايتات) عن أبعاد اللوحة وعلامة جدول الألوان العام ودقة الألوان وفهرس لون الخلفية. إذا كان مُعلَّماً، يتبعه جدول الألوان العام بمدخلات RGB من 3 بايتات (حتى 768 بايت لـ 256 لوناً). تحتوي كتل بيانات الصورة على واصف الصورة المحلية (10 بايتات) وجدول ألوان محلي اختياري وبايت الحد الأدنى لحجم رمز LZW وكتل فرعية متغيرة الطول من بيانات البكسل المضغوطة بـ LZW. يضيف GIF89a كتل الامتداد: امتداد التحكم في الرسوميات (تأخير الحركة وطريقة التخلص وفهرس الشفافية) وامتداد التعليقات وامتداد النص العادي وامتداد التطبيق (تكرار Netscape). ينتهي الملف ببايت خاتمة واحد 0x3B.
| Offset | Length | Field | Example | Description |
|---|---|---|---|---|
0x00 | 3 bytes | التوقيع | 47 49 46 | ASCII 'GIF' — يُعرّف الملف كصيغة GIF. |
0x03 | 3 bytes | الإصدار | 38 39 61 | ASCII '89a' (GIF89a) أو '87a' (GIF87a). يضيف 89a الحركة والشفافية وامتدادات التعليقات. |
0x06 | 2 bytes | عرض اللوحة | E8 03 | عرض الشاشة المنطقية بالبكسل (uint16 بترتيب little-endian). مثال: 1000 بكسل. |
0x08 | 2 bytes | ارتفاع اللوحة | C8 00 | ارتفاع الشاشة المنطقية بالبكسل (uint16 بترتيب little-endian). مثال: 200 بكسل. |
0x0A | 1 byte | البايت المُعبّأ | F7 | البتات 0-2: حجم جدول الألوان العام (2^(N+1) مدخل). البت 3: علامة الترتيب. البتات 4-6: دقة الألوان. البت 7: وجود جدول الألوان العام. |
0x0B | 1 byte | فهرس لون الخلفية | 00 | الفهرس في جدول الألوان العام للون الخلفية. |
0x0C | 1 byte | نسبة عرض البكسل | 00 | 0 = بكسلات مربعة. غير صفري: النسبة = (القيمة + 15) / 64. |
نقاط الضعف
- قنابل فك الضغط — ملفات GIF بأبعاد لوحة كبيرة جداً لكن بحجم ملف صغير يمكن أن تستنفد الذاكرة عند فك الترميز
- تدفقات LZW مُصاغة بشكل خبيث — جداول رموز LZW المشوهة يمكن أن تُسبب تجاوز المخزن المؤقت في وحدات فك الترميز المعرضة للخطر
- حقن امتداد التعليقات — النص العشوائي في كتل تعليقات GIF يمكن أن يحمل حمولات هندسة اجتماعية
الحماية: يفك FileDex ترميز GIF بالكامل في صندوق حماية المتصفح باستخدام Canvas API. لا توجد معالجة على الخادم، ولا رفع ملفات، ولا تنفيذ لمحتوى مضمن. حدود الذاكرة يفرضها وقت تشغيل المتصفح.
- مواصفات GIF89a Specification — CompuServe (hosted by W3C)
- سجل LOC Format Description — Graphics Interchange Format (fdd000133)
- سجل IANA Media Type: image/gif
- سجل PRONOM fmt/4 — GIF89a (The National Archives)
- تاريخ GIF — Wikipedia
- تاريخ CompuServe — Original publisher of GIF87a (1987) and GIF89a (1990)
- مواصفات W3C Graphics GIF Resources