PicScrub logoPicScrub
العودة إلى الصيغ

صيغة GIF

Graphics Interchange Format

بنية الكتل

GIF من تلك الصيغ التي عاشت عقودًا أطول مما كان متوقعًا لها. ابتكرتها شركة CompuServe سنة 1987، وما زالت حاضرة في كل مكان اليوم، ويعود ذلك أساسًا إلى دعمها للصور المتحركة.

تعتمد الصيغة بنية قائمة على الكتل، وهي بنية مريحة في بساطتها مقارنة بالصيغ الحديثة: ترويسة، وبعض الواصفات، وجدول ألوان، وبيانات صورتك، وبايت ختامي واحد يقول "انتهى."

بنية ملف GIF

Header
LSD
GCT
Extensions
Image Data
Trailer
Header
6 بايت
GIF87a أو GIF89a
LSD
7 بايت
واصف الشاشة المنطقية
GCT
768 بايت
جدول الألوان العام (اختياري)
Extensions
100 بايت
كتل الامتدادات (البيانات الوصفية)
Image Data
طول متغيّر
واصف الصورة + بيانات LZW
Trailer
1 بايت
بايت الإنهاء 0x3B

ترويسة GIF

توقيع GIF
الإصدار (89a)
العرض (640)
الارتفاع (480)
الحقول المحزومة
مؤشر لون الخلفية
نسبة أبعاد البكسل
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

الفروق بين الإصدارين

GIF87a

المواصفة الأصلية. بلا كتل امتدادات.

GIF89a

أضاف الامتدادات والحركة والشفافية.

كتل الامتدادات

أضاف الإصدار GIF89a (مراجعة عام 1989) كتل الامتدادات، وبها نالت GIF دعم الحركة. وكل كتلة امتداد تبدأ بـ 0x21 يليه بايت يحدد نوعها، وهو ما يجعل رصدها سهلًا وأنت تمرّ على الملف. بعض هذه الكتل نريد الإبقاء عليه (توقيت الحركة)، وبعضها نريد إزالته (التعليقات).

امتداد التحكم الرسومي (0xF9)

يتحكم في توقيت الحركة والشفافية وطريقة التخلص من الإطار. ويسبق كل واصف صورة في ملفات GIF المتحركة. ويبقى دائمًا.

21 F9 04 [disposal] [delay] [transparent] 00

امتداد التعليقات (0xFE)

تعليقات نصية عادية. وقد تحمل أي معلومة، بما في ذلك اسم المؤلف وتاريخ الإنشاء والبرنامج المستخدم أو ملاحظات شخصية. يزيلها PicScrub.

21 FE [size] [comment data...] 00

امتداد التطبيقات (0xFF)

بيانات خاصة بالتطبيقات. وأهمها NETSCAPE2.0 الخاص بتكرار الحركة. وقد يحمل أيضًا بيانات XMP الوصفية.

21 FF 0B [app identifier] [auth code] [data...] 00

امتداد النص العادي (0x01)

نادر الاستخدام. يعرض نصًا باستخدام جدول ألوان GIF. وتتجاهله معظم البرامج الحديثة.

امتدادات التطبيقات

NETSCAPE2.0:تكرار الحركة

يتحكم في عدد مرات تكرار الصورة المتحركة. والقيمة 0 تعني التكرار اللانهائي.

مقدمة الامتداد
حجم الكتلة (11)
NETSCAPE2.0
حجم الكتلة الفرعية
معرّف الكتلة الفرعية
عدد مرات التكرار
بايت الإنهاء
OffsetHexASCII
0000
21FF0B4E45545343415045322E300301000000
!..NETSCAPE2.0.....

يبقي PicScrub على NETSCAPE2.0 كي تعمل الحركة كما هي.

XMP Data:منصة البيانات الوصفية القابلة للتوسيع

معرّف التطبيق: XMP DataXMP. ويحتوي على بيانات XMP/RDF كاملة بصيغة XML.

يزيل PicScrub امتدادات تطبيقات XMP.

الحفاظ على الحركة

الجانب الدقيق في GIF هو التمييز بين بيانات الحركة (التي نحتاج إلى الإبقاء عليها) والبيانات الوصفية (التي نريد إزالتها). فكلاهما يسكن في كتل الامتدادات، ولذلك لا يمكننا حذف الامتدادات كلها.

ما يبقى من أجل الحركة

  • • عدد تكرارات NETSCAPE2.0
  • • امتدادات التحكم الرسومي
  • • فترات تأخير الإطارات
  • • طرق التخلص من الإطارات
  • • مؤشرات الشفافية
  • • جداول الألوان المحلية

ما يُزال

  • • امتدادات التعليقات
  • • كتل تطبيقات XMP
  • • كتل التطبيقات غير المعروفة
  • • امتدادات النص العادي

كيف يعالج PicScrub ملفات GIF

1

التحقق من الترويسة

البحث عن توقيع GIF87a أو GIF89a

2

نسخ بيانات الترويسة

الإبقاء على واصف الشاشة المنطقية وجدول الألوان العام كما هما

3

ترشيح الامتدادات

الإبقاء على NETSCAPE2.0 والتحكم الرسومي، وإزالة التعليقات وXMP

4

الإبقاء على بيانات الصورة

نسخ كل واصفات الصور وجداول الألوان المحلية وبيانات LZW كما هي

5

كتابة بايت الإنهاء

إنهاء الملف ببايت الإنهاء 0x3B

ضغط LZW

ملاحظة سريعة عن بيانات الصورة في GIF: إنها تستخدم ضغط LZW، وقد كان محميًا ببراءة اختراع حتى عام 2004 (وهو ما أثار جدلًا واسعًا في التسعينيات). وPicScrub لا يمس البيانات المضغوطة إطلاقًا، بل ينسخها بايتًا ببايت، أي بلا أي فقدان للجودة.

لماذا يهم هذا

بالإبقاء على بيانات LZW الأصلية، يضمن PicScrub ما يلي:

  • • بلا أي فقدان للجودة (حفاظ تام على الصورة بتًا ببت)
  • • معالجة سريعة (بلا دورة فك ترميز وإعادة ترميز)
  • • حجم مطابق لبيانات الصورة

حدود البيانات الوصفية في GIF

الخبر الجيد بشأن GIF أنها أقدم من معيار EXIF، فلا توجد إحداثيات GPS ولا معلومات كاميرا تقلق بشأنها. أما ما يخص البيانات الوصفية فأبسط بكثير.

ما الذي قد يتسرب

مخاوف الخصوصية في GIF محدودة نسبيًا مقارنة بـ JPEG:

  • • امتدادات التعليقات (وقد تحمل ملاحظات المؤلف أحيانًا)
  • • بيانات XMP الوصفية (نادرة، لكنها ممكنة)
  • • التعريف بالبرنامج داخل كتل التطبيقات