صيغة HEIC
High Efficiency Image Container
حاوية ISOBMFF
إن سبق أن تعاملت مع ملفات فيديو MP4، فستجد HEIC مألوفة. فقد اختارت Apple صيغة ISO Base Media File Format (اختصارًا ISOBMFF) حاويةً لـ HEIC، أي أنها تشترك في حمضها النووي مع صيغ الفيديو لا مع صيغ الصور التقليدية مثل JPEG أو PNG.
تتألف الصيغة من "صناديق" متداخلة (تُسمى أيضًا ذرات) لكل منها رمز نوع من أربعة أحرف. وهو تصميم أنيق على نحو مفاجئ، إذ يتيح تسلسلات هرمية معقدة من البيانات ويبقى مع ذلك سهل التحليل نسبيًا متى فهمت أساسياته.
بنية ملف HEIC
ترويسة HEIC (صندوق ftyp)
| Offset | Hex | ASCII | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 000000186674797068656963 | ....ftypheic | |||||||||||
| 000C | 000000006D69663168656963 | ....mif1heic | |||||||||||
بنية الصندوق
إن كان الحجم = 1، فسيأتي بعد النوع حجم ممتد من 8 بايتات. وإن كان الحجم = 0، فالصندوق يمتد حتى نهاية الملف.
أهم الصناديق
قد يصبح تسلسل الصناديق في ملفات HEIC عميقًا. فعلى خلاف JPEG التي تجلس فيها البيانات الوصفية عند إزاحات متوقعة، تدفن HEIC بياناتها الوصفية تحت طبقات عدة من بنية متداخلة. وإليك كيف تتراصف الأجزاء الرئيسية.
ftyp:نوع الملف
أول صندوق في الملف. يحتوي على العلامة الرئيسية والعلامات المتوافقة، وهو إلزامي للتعرف على الصيغة.
heic heix hevc hevx heim heis hevm hevs mif1 msf1meta:حاوية البيانات الوصفية
تحتوي على كل البيانات الوصفية، بما فيها مواضع العناصر وخصائصها وارتباطاتها. وهنا تسكن بيانات EXIF/XMP.
meta (metadata container) ├── hdlr (handler reference) ├── pitm (primary item ID) ├── iloc (item locations → offsets into mdat) │ └── [item_id, offset, length] entries ├── iinf (item info → find 'Exif' item) │ └── infe entries with item types ├── iprp (item properties) │ ├── ipco (property container) │ │ ├── hvcC (HEVC decoder config) │ │ ├── ispe (image dimensions) │ │ ├── colr (ICC profile, offset+12) │ │ ├── Exif (EXIF in TIFF format) │ │ └── pixi (pixel information) │ └── ipma (property associations) └── iref (item references)
mdat:بيانات الوسائط
تحتوي على بيانات الصورة المرمّزة بـ HEVC. ويوفر صندوق iloc داخل meta الإزاحات المؤدية إلى mdat.
البيانات الوصفية في HEIC
إن كنت معتادًا على علامات APP في JPEG، فإن HEIC تسلك مسلكًا مختلفًا. فبدل علامات متتالية في بداية الملف، تسكن البيانات الوصفية على هيئة "خصائص عناصر" داخل صندوق meta. أما بيانات EXIF نفسها فما زالت بصيغة TIFF المألوفة، لكن العثور عليها يتطلب التنقل في تسلسل الصناديق أولًا.
خاصية EXIF
تُخزَّن في ipco (حاوية خصائص العناصر) بالنوع "Exif". وتحتوي على بيانات EXIF المعيارية بصيغة TIFF، تمامًا كما في JPEG.
خاصية XMP
بيانات وصفية قائمة على XML، تُخزَّن كخاصية من نوع "mime" بنوع محتوى "application/rdf+xml".
ملف ICC
ملف ألوان يُخزَّن في صندوق "colr" بالنوع "prof".
لماذا تهم الإزاحات
يحتوي صندوق iloc على إزاحات بايتات دقيقة تشير إلى داخل mdat. فإن تغيّر حجم أي صندوق (بإزالة بيانات وصفية مثلًا)، وجب إعادة حساب هذه الإزاحات وإلا أصبح الملف غير قابل للقراءة.
إخفاء الهوية دون فقدان
وهنا تصبح HEIC شائكة. فقد صُممت الصيغة لتخزين الفيديو والصور بكفاءة، لا لتسهيل التلاعب بالبيانات الوصفية.
التحدي
بنية HEIC القائمة على الإزاحات تجعل حذف البايتات محفوفًا بالمخاطر. فصندوق iloc يحتوي على إزاحات بايتات دقيقة تشير إلى داخل mdat، وإن حذفت صندوقًا واحدًا فقط أصبحت تلك الإزاحات خاطئة ولم تعد الصورة تُفتح.
أسلوب الكتابة بالأصفار
بدل حذف صناديق البيانات الوصفية، يكتب PicScrub أصفارًا فوق محتواها مع الإبقاء على بنية الصناديق وأحجامها.
After: [Exif][0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00...]
لماذا الكتابة بالأصفار؟
- • تحافظ على سلامة الملف:تبقى كل الإزاحات صحيحة
- • بلا إعادة ضغط:بيانات الصورة لا تُمس
- • البيانات الوصفية تُتلَف:الأصفار لا تحمل أي معلومة
- • هل يمكن التراجع؟:لا، فما كُتب فوقه ضاع
كيف يعالج PicScrub ملفات HEIC
تحليل بنية الصناديق
تحليل ftyp وmeta تحليلًا تعاوديًا وتحديد كل الصناديق
تحديد موضع البيانات الوصفية
العثور على خاصيتَي Exif وXMP داخل حاوية ipco
تصفير محتوى البيانات الوصفية
الكتابة بالأصفار فوق محتوى صناديق البيانات الوصفية
الحفاظ على البنية
الإبقاء على ترويسات الصناديق وأحجامها وكل الإزاحات كما هي
ملاحظة عن حجم الملف
لأن PicScrub يكتب أصفارًا بدل الحذف، فسيكون حجم الملف الناتج مساويًا لحجم الملف الأصلي. فمساحة البيانات الوصفية تبقى كما هي لكنها تُملأ بالأصفار.
HEIC وHEIF وAVIF
التسميات مربكة، فلنوضحها. HEIF هي صيغة الحاوية، أما HEIC وAVIF فتصفان المرمّز المستخدم في ضغط الصورة داخل تلك الحاوية.
| الصيغة | الحاوية | المرمّز | الاستخدام |
|---|---|---|---|
| HEIC | HEIF | HEVC (H.265) | أجهزة Apple |
| HEIF | HEIF | متعدد | حاوية عامة |
| AVIF | HEIF | AV1 | الويب (بلا رسوم ترخيص) |
الثلاثة تستخدم بنية الحاوية ISOBMFF/HEIF نفسها، ولذلك ينجح أسلوب PicScrub معها جميعًا.