صيغة TIFF
Tagged Image File Format
بنية الترويسة
TIFF هي جدّة البيانات الوصفية للصور. فحين ترى بيانات EXIF داخل ملف JPEG، فأنت في الحقيقة أمام بنية TIFF مدمجة داخل الملف. وفهم TIFF يعني فهم الطريقة التي تعمل بها معظم البيانات الوصفية للصور.
تبدأ الصيغة بترويسة من 8 بايتات تخبرك بأمرين حاسمين: ترتيب البايتات (إنتل أم موتورولا) وموضع أول IFD. وما بعد ذلك مجرد تتبّع للمؤشرات.
بنية ملف TIFF
ترويسة TIFF
| Offset | Hex | ASCII | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 0000 | 49492A0008000000 | II*..... | |||||||
ترتيب البايتات
49 49 (II)إنتل:little-endian (البايت الأقل أهمية أولًا)
4D 4D (MM)موتورولا:big-endian (البايت الأكثر أهمية أولًا)
بنية IFD
يرمز IFD إلى Image File Directory، لكن فكّر فيه على أنه جدول محتويات. فهو قائمة مسطّحة من الوسوم، يشير كل منها إلى جزء من البيانات. والجانب الذكي أن كل IFD يمكن أن يشير إلى IFD آخر، فتنشأ بنية شجرية.
تخطيط IFD
بنية مدخل الوسم (12 بايتًا)
إن كانت البيانات تتسع في 4 بايتات، فتُخزَّن مباشرة في حقل القيمة. وإلا فإن الحقل يحمل إزاحة تشير إلى موضع البيانات.
أنواع الوسوم
TIFF صيغة صارمة في الأنواع. فكل وسم لا يحدد ما يحتويه فحسب، بل يحدد أيضًا كيف تُفسَّر بايتاته. ولهذا عليك أن تفهم نظام الأنواع كي تحلل TIFF تحليلًا صحيحًا.
| المعرّف | الاسم | الحجم | الوصف |
|---|---|---|---|
| 1 | BYTE | 1 | عدد صحيح موجب بـ 8 بتات |
| 2 | ASCII | 1 | سلسلة منتهية بصفر (8 بتات) |
| 3 | SHORT | 2 | عدد صحيح موجب بـ 16 بتًا |
| 4 | LONG | 4 | عدد صحيح موجب بـ 32 بتًا |
| 5 | RATIONAL | 8 | قيمتا LONG: بسط ومقام |
| 6 | SBYTE | 1 | عدد صحيح بإشارة بـ 8 بتات |
| 7 | UNDEFINED | 1 | بايتات خام (بيانات ثنائية) |
| 8 | SSHORT | 2 | عدد صحيح بإشارة بـ 16 بتًا |
| 9 | SLONG | 4 | عدد صحيح بإشارة بـ 32 بتًا |
| 10 | SRATIONAL | 8 | قيمتا SLONG: بسط ومقام بإشارة |
| 11 | FLOAT | 4 | عدد عشري IEEE بـ 32 بتًا |
| 12 | DOUBLE | 8 | عدد عشري IEEE بـ 64 بتًا |
| 13 | IFD | 4 | مؤشر إلى IFD متداخل |
قاعدة تخزين القيم
إن كان size × count ≤ 4 بايتات، فتُخزَّن القيمة مباشرة في حقل القيمة ذي الأربعة بايتات. وإلا فإن الحقل يحمل إزاحة تشير إلى موضع البيانات داخل الملف.
حساب إزاحات IFD
أصعب ما في تحليل TIFF هو تتبّع سلسلة الإزاحات. فكل شيء محسوب نسبة إلى بداية الملف، وستقفز كثيرًا بين المواضع. وإليك كيف تسير الحسابات:
IFD0_offset = bytes[4:8] // From TIFF header
next_IFD = IFD0_offset + 2 + (entry_count × 12) + 4
subIFD_offset = tag_value // From pointer tag (0x8769, 0x8825)
أهم الوسوم
وسوم بيانات الصورة (تبقى)
0x0100:ImageWidth0x0101:ImageLength0x0102:BitsPerSample0x0103:Compression0x0111:StripOffsets0x0117:StripByteCountsوسوم البيانات الوصفية (تُزال)
0x010F:Make (الشركة المصنّعة للكاميرا)0x0110:Model (طراز الكاميرا)0x0132:DateTime0x013B:Artist0x8298:Copyright0x9003:DateTimeOriginalوسوم المؤشرات (الأدلة الفرعية)
0x8769:ExifIFDPointer0x8825:GPSInfoIFDPointer0xA005:InteroperabilityIFDPointerالأدلة الفرعية
كثيرًا ما يحتوي الدليل الرئيسي (IFD0) على "وسوم مؤشرات" تشير إلى أدلة فرعية. وهكذا تُنظَّم بيانات EXIF وGPS وغيرها في مجموعات منطقية مع إبقاء الدليل الرئيسي نظيفًا.
الدليل الفرعي لـ EXIF
يحمل بيانات وصفية خاصة بالكاميرا: التعريض وفتحة العدسة وحساسية ISO والبعد البؤري والفلاش وتوازن اللون الأبيض وغيرها.
الدليل الفرعي لـ GPS
يحمل بيانات الموقع الجغرافي: خط العرض وخط الطول والارتفاع والطابع الزمني والأقمار الصناعية والسرعة والاتجاه. وهو مصدر قلق كبير على الخصوصية.
ملاحظات المصنّع
بيانات كاميرا مملوكة، وصيغتها تختلف من مصنّع إلى آخر. وقد تحمل أرقامًا تسلسلية وإصدار البرنامج الثابت وإعدادات مخصصة.
كيف يعالج PicScrub ملفات TIFF
تحليل الترويسة
تحديد ترتيب البايتات (II/MM) وموضع أول IFD
بناء قائمة الوسوم المسموحة
تحديد الوسوم الضرورية لعرض الصورة
ترشيح مدخلات IFD
إزالة وسوم البيانات الوصفية وتصفير مؤشرات الأدلة الفرعية
إعادة كتابة الملف
إعادة بناء ملف TIFF بأدلة نظيفة وبيانات صورة منسوخة كما هي
إعادة حساب الإزاحات
تعتمد ملفات TIFF على إزاحات الملف اعتمادًا كبيرًا. ولذلك حين تُزال البيانات الوصفية، يجب على PicScrub إعادة حساب كل الإزاحات حفاظًا على سلامة الملف.