صيغة GIF
Graphics Interchange Format
بنية الكتل
GIF من تلك الصيغ التي عاشت عقودًا أطول مما كان متوقعًا لها. ابتكرتها شركة CompuServe سنة 1987، وما زالت حاضرة في كل مكان اليوم، ويعود ذلك أساسًا إلى دعمها للصور المتحركة.
تعتمد الصيغة بنية قائمة على الكتل، وهي بنية مريحة في بساطتها مقارنة بالصيغ الحديثة: ترويسة، وبعض الواصفات، وجدول ألوان، وبيانات صورتك، وبايت ختامي واحد يقول "انتهى."
بنية ملف GIF
ترويسة GIF
| Offset | Hex | ASCII | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 4749463839618002E001F70000 | GIF89a....... | ||||||||||||
الفروق بين الإصدارين
المواصفة الأصلية. بلا كتل امتدادات.
أضاف الامتدادات والحركة والشفافية.
كتل الامتدادات
أضاف الإصدار GIF89a (مراجعة عام 1989) كتل الامتدادات، وبها نالت GIF دعم الحركة. وكل كتلة امتداد تبدأ بـ 0x21 يليه بايت يحدد نوعها، وهو ما يجعل رصدها سهلًا وأنت تمرّ على الملف. بعض هذه الكتل نريد الإبقاء عليه (توقيت الحركة)، وبعضها نريد إزالته (التعليقات).
امتداد التحكم الرسومي (0xF9)
يتحكم في توقيت الحركة والشفافية وطريقة التخلص من الإطار. ويسبق كل واصف صورة في ملفات GIF المتحركة. ويبقى دائمًا.
امتداد التعليقات (0xFE)
تعليقات نصية عادية. وقد تحمل أي معلومة، بما في ذلك اسم المؤلف وتاريخ الإنشاء والبرنامج المستخدم أو ملاحظات شخصية. يزيلها PicScrub.
امتداد التطبيقات (0xFF)
بيانات خاصة بالتطبيقات. وأهمها NETSCAPE2.0 الخاص بتكرار الحركة. وقد يحمل أيضًا بيانات XMP الوصفية.
امتداد النص العادي (0x01)
نادر الاستخدام. يعرض نصًا باستخدام جدول ألوان GIF. وتتجاهله معظم البرامج الحديثة.
امتدادات التطبيقات
NETSCAPE2.0:تكرار الحركة
يتحكم في عدد مرات تكرار الصورة المتحركة. والقيمة 0 تعني التكرار اللانهائي.
| Offset | Hex | ASCII | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 21FF0B4E45545343415045322E300301000000 | !..NETSCAPE2.0..... | ||||||||||||||||||
يبقي PicScrub على NETSCAPE2.0 كي تعمل الحركة كما هي.
XMP Data:منصة البيانات الوصفية القابلة للتوسيع
معرّف التطبيق: XMP DataXMP. ويحتوي على بيانات XMP/RDF كاملة بصيغة XML.
يزيل PicScrub امتدادات تطبيقات XMP.
الحفاظ على الحركة
الجانب الدقيق في GIF هو التمييز بين بيانات الحركة (التي نحتاج إلى الإبقاء عليها) والبيانات الوصفية (التي نريد إزالتها). فكلاهما يسكن في كتل الامتدادات، ولذلك لا يمكننا حذف الامتدادات كلها.
ما يبقى من أجل الحركة
- • عدد تكرارات NETSCAPE2.0
- • امتدادات التحكم الرسومي
- • فترات تأخير الإطارات
- • طرق التخلص من الإطارات
- • مؤشرات الشفافية
- • جداول الألوان المحلية
ما يُزال
- • امتدادات التعليقات
- • كتل تطبيقات XMP
- • كتل التطبيقات غير المعروفة
- • امتدادات النص العادي
كيف يعالج PicScrub ملفات GIF
التحقق من الترويسة
البحث عن توقيع GIF87a أو GIF89a
نسخ بيانات الترويسة
الإبقاء على واصف الشاشة المنطقية وجدول الألوان العام كما هما
ترشيح الامتدادات
الإبقاء على NETSCAPE2.0 والتحكم الرسومي، وإزالة التعليقات وXMP
الإبقاء على بيانات الصورة
نسخ كل واصفات الصور وجداول الألوان المحلية وبيانات LZW كما هي
كتابة بايت الإنهاء
إنهاء الملف ببايت الإنهاء 0x3B
ضغط LZW
ملاحظة سريعة عن بيانات الصورة في GIF: إنها تستخدم ضغط LZW، وقد كان محميًا ببراءة اختراع حتى عام 2004 (وهو ما أثار جدلًا واسعًا في التسعينيات). وPicScrub لا يمس البيانات المضغوطة إطلاقًا، بل ينسخها بايتًا ببايت، أي بلا أي فقدان للجودة.
لماذا يهم هذا
بالإبقاء على بيانات LZW الأصلية، يضمن PicScrub ما يلي:
- • بلا أي فقدان للجودة (حفاظ تام على الصورة بتًا ببت)
- • معالجة سريعة (بلا دورة فك ترميز وإعادة ترميز)
- • حجم مطابق لبيانات الصورة
حدود البيانات الوصفية في GIF
الخبر الجيد بشأن GIF أنها أقدم من معيار EXIF، فلا توجد إحداثيات GPS ولا معلومات كاميرا تقلق بشأنها. أما ما يخص البيانات الوصفية فأبسط بكثير.
ما الذي قد يتسرب
مخاوف الخصوصية في GIF محدودة نسبيًا مقارنة بـ JPEG:
- • امتدادات التعليقات (وقد تحمل ملاحظات المؤلف أحيانًا)
- • بيانات XMP الوصفية (نادرة، لكنها ممكنة)
- • التعريف بالبرنامج داخل كتل التطبيقات