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

صيغة TIFF

Tagged Image File Format

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

TIFF هي جدّة البيانات الوصفية للصور. فحين ترى بيانات EXIF داخل ملف JPEG، فأنت في الحقيقة أمام بنية TIFF مدمجة داخل الملف. وفهم TIFF يعني فهم الطريقة التي تعمل بها معظم البيانات الوصفية للصور.

تبدأ الصيغة بترويسة من 8 بايتات تخبرك بأمرين حاسمين: ترتيب البايتات (إنتل أم موتورولا) وموضع أول IFD. وما بعد ذلك مجرد تتبّع للمؤشرات.

بنية ملف TIFF

Header
IFD0
Strip Data
EXIF IFD
GPS IFD
Header
8 بايت
ترتيب البايتات + الرقم السحري + إزاحة IFD
IFD0
200 بايت
دليل الصورة الرئيسي
Strip Data
طول متغيّر
بيانات بكسلات الصورة
EXIF IFD
500 بايت
الدليل الفرعي لبيانات EXIF
GPS IFD
100 بايت
الدليل الفرعي لبيانات GPS

ترويسة TIFF

ترتيب البايتات (II = little-endian)
الرقم السحري (42)
إزاحة أول IFD
OffsetHexASCII
0000
49492A0008000000
II*.....

ترتيب البايتات

49 49 (II)

إنتل:little-endian (البايت الأقل أهمية أولًا)

4D 4D (MM)

موتورولا:big-endian (البايت الأكثر أهمية أولًا)

بنية IFD

يرمز IFD إلى Image File Directory، لكن فكّر فيه على أنه جدول محتويات. فهو قائمة مسطّحة من الوسوم، يشير كل منها إلى جزء من البيانات. والجانب الذكي أن كل IFD يمكن أن يشير إلى IFD آخر، فتنشأ بنية شجرية.

تخطيط IFD

2 بايتعدد المدخلات (عدد الوسوم)
12 × N بايتمدخلات الوسوم (12 بايتًا لكل مدخل)
4 بايتإزاحة الـ IFD التالي (0 إن لم يوجد)

بنية مدخل الوسم (12 بايتًا)

معرّف الوسمالنوعالعددالقيمة/الإزاحة
2 بايت2 بايت4 بايت4 بايت

إن كانت البيانات تتسع في 4 بايتات، فتُخزَّن مباشرة في حقل القيمة. وإلا فإن الحقل يحمل إزاحة تشير إلى موضع البيانات.

أنواع الوسوم

TIFF صيغة صارمة في الأنواع. فكل وسم لا يحدد ما يحتويه فحسب، بل يحدد أيضًا كيف تُفسَّر بايتاته. ولهذا عليك أن تفهم نظام الأنواع كي تحلل TIFF تحليلًا صحيحًا.

المعرّفالاسمالحجمالوصف
1BYTE1عدد صحيح موجب بـ 8 بتات
2ASCII1سلسلة منتهية بصفر (8 بتات)
3SHORT2عدد صحيح موجب بـ 16 بتًا
4LONG4عدد صحيح موجب بـ 32 بتًا
5RATIONAL8قيمتا LONG: بسط ومقام
6SBYTE1عدد صحيح بإشارة بـ 8 بتات
7UNDEFINED1بايتات خام (بيانات ثنائية)
8SSHORT2عدد صحيح بإشارة بـ 16 بتًا
9SLONG4عدد صحيح بإشارة بـ 32 بتًا
10SRATIONAL8قيمتا SLONG: بسط ومقام بإشارة
11FLOAT4عدد عشري IEEE بـ 32 بتًا
12DOUBLE8عدد عشري IEEE بـ 64 بتًا
13IFD4مؤشر إلى IFD متداخل

قاعدة تخزين القيم

إن كان size × count ≤ 4 بايتات، فتُخزَّن القيمة مباشرة في حقل القيمة ذي الأربعة بايتات. وإلا فإن الحقل يحمل إزاحة تشير إلى موضع البيانات داخل الملف.

حساب إزاحات IFD

أصعب ما في تحليل TIFF هو تتبّع سلسلة الإزاحات. فكل شيء محسوب نسبة إلى بداية الملف، وستقفز كثيرًا بين المواضع. وإليك كيف تسير الحسابات:

// IFD0 location
IFD0_offset = bytes[4:8] // From TIFF header
// Next IFD location (e.g., IFD1 for thumbnail)
next_IFD = IFD0_offset + 2 + (entry_count × 12) + 4
// SubIFD location (EXIF, GPS)
subIFD_offset = tag_value // From pointer tag (0x8769, 0x8825)

أهم الوسوم

وسوم بيانات الصورة (تبقى)

0x0100:ImageWidth
0x0101:ImageLength
0x0102:BitsPerSample
0x0103:Compression
0x0111:StripOffsets
0x0117:StripByteCounts

وسوم البيانات الوصفية (تُزال)

0x010F:Make (الشركة المصنّعة للكاميرا)
0x0110:Model (طراز الكاميرا)
0x0132:DateTime
0x013B:Artist
0x8298:Copyright
0x9003:DateTimeOriginal

وسوم المؤشرات (الأدلة الفرعية)

0x8769:ExifIFDPointer
0x8825:GPSInfoIFDPointer
0xA005:InteroperabilityIFDPointer

الأدلة الفرعية

كثيرًا ما يحتوي الدليل الرئيسي (IFD0) على "وسوم مؤشرات" تشير إلى أدلة فرعية. وهكذا تُنظَّم بيانات EXIF وGPS وغيرها في مجموعات منطقية مع إبقاء الدليل الرئيسي نظيفًا.

الدليل الفرعي لـ EXIF

يحمل بيانات وصفية خاصة بالكاميرا: التعريض وفتحة العدسة وحساسية ISO والبعد البؤري والفلاش وتوازن اللون الأبيض وغيرها.

الدليل الفرعي لـ GPS

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

ملاحظات المصنّع

بيانات كاميرا مملوكة، وصيغتها تختلف من مصنّع إلى آخر. وقد تحمل أرقامًا تسلسلية وإصدار البرنامج الثابت وإعدادات مخصصة.

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

1

تحليل الترويسة

تحديد ترتيب البايتات (II/MM) وموضع أول IFD

2

بناء قائمة الوسوم المسموحة

تحديد الوسوم الضرورية لعرض الصورة

3

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

إزالة وسوم البيانات الوصفية وتصفير مؤشرات الأدلة الفرعية

4

إعادة كتابة الملف

إعادة بناء ملف TIFF بأدلة نظيفة وبيانات صورة منسوخة كما هي

إعادة حساب الإزاحات

تعتمد ملفات TIFF على إزاحات الملف اعتمادًا كبيرًا. ولذلك حين تُزال البيانات الوصفية، يجب على PicScrub إعادة حساب كل الإزاحات حفاظًا على سلامة الملف.