IMG·ARCH
العقدة 07الغلاف لا الخوارزمية
SIGNAL

كيف تصير الصورة ملفاًبروتوكول

العمارة الحاوية

الملف ليس بِتّات مضغوطة عارية — إنه بنية منظّمة تحوي البِتّات والأبعاد وفضاء اللون والبيانات الوصفية والشفافية والحركة. هندسة الحاوية قرار مستقلّ تماماً عن خوارزمية الضغط، ويحدّد نصف قدرات الصيغة.

أنت مصمّم صيغة في 1995. تكتب ملفاً يقرأه برنامج لم يُكتب بعد. واجه:

  1. التعرّف: كيف يعرف البرنامج من أول بايتات أنه ملفّك؟ ولماذا لا يكفي الامتداد؟
  2. التوسّع: ستضيف ميزة بعد سنوات. كيف يقرأ برنامج قديم ملفاً جديداً دون أن ينهار — يتجاهل ما لا يفهمه بأمان؟ وما الذي يُرفق مع كل قطعة ليعرف القارئ "كم أتخطّى؟ وهل التخطّي آمن أم قاتل؟"
  3. السلامة: كيف يكتشف القارئ أن الملف تلف؟
  4. الترتيب: endianness — ولماذا يجب أن تنصّ عليه صراحةً؟

المبدأ الجامع: TLV — DNA كل حاوية

قسّم الملف إلى قطع، كلٌّ تحمل Type (ما هذه؟) + Length (كم طولها؟) + Value. القارئ يقرأ Type؛ إن جهله، يقرأ Length ويقفز بأمان. هذا حلّ التوسّع المستقبلي.

FIG 1 بنية chunk في PNG — كل بايت يحلّ مشكلة
التوقيع (8 بايت) — كاشف أعطال نقل 89 P N G 0D 0A 1A 0A 0x89: أعلى بِت مضبوط (يكشف تجريد البِت الثامن) · CR/LF: يكشف تحويل الأسطر · EOF كل chunk: Length (4B) Type (4 محارف) Data CRC-32 (4B) حالة أحرف Type تحمل أعلاماً: IHDR / IDAT — حرف أول كبير = critical (يجب فهمه) tEXt / gAMA — حرف أول صغير = ancillary (تخطٍّ آمن)
التوقيع ليس عشوائياً — كل بايت يكشف نوع تلف نقل كان يُفسد الملفات الثنائية في التسعينات. حالة حرف Type تحلّ "التخطّي الآمن مقابل القاتل" (لغز ٢)، و CRC-32 يحدّد أين التلف (لغز ٣)، و big-endian منصوص عليه (لغز ٤).

ثلاث حاويات — نفس الـDNA، أرواح مختلفة

FIG 2 ISOBMFF (HEIF/AVIF) — شجرة boxes من عالم MP4
ftyp= "avif" meta hdlrنوع: صور pitmالعنصر الأساسي ilocمواقع العناصر iinf iprp/ipco خصائص: ispe (أبعاد)، colr (لون/HDR)، pixi (عمق) alpha = عنصر AV1 منفصل mdatالبيانات: تيّار AV1 المضغوط (iloc يشير لإزاحاته)
فصل الموقع (iloc) عن البيانات (mdat) يتيح ترتيباً مرناً (مثلاً metadata أولاً لبدء العرض قبل تحميل كل البيانات). HEIF/AVIF أطفال ضواغط فيديو فورثت بنية MP4 ونظامها البيئي.
الحاويةالصيغةالسمة
chunks + CRCPNGتوقيع كاشف-أعطال، أعلام critical/ancillary بحالة الأحرف
RIFFWebPTLV little-endian؛ VP8/VP8L/VP8X/ALPH/ANIM
ISOBMFFHEIF/AVIFشجرة boxes؛ items متعدّدة، alpha كعنصر، HDR أصيل
markersJPEGأقدم، أقلّ انتظاماً؛ metadata في APPn (فوضى تاريخية)
الخلاصة المعمارية

صيغة الصورة = (خوارزمية ضغط) ⊗ (حاوية). البُعدان مستقلّان. القدرات (alpha, anim, HDR, metadata, تدريجي, كشف تلف, توسّع) يقرّرها الصندوق لا الضاغط. هذا الفصل سيُمكّن JPEG XL من احتواء وضعين مختلفين تحت سقف واحد.

  1. افتح PNG حقيقياً بـxxd. فسّر التوقيع الثماني بايتاً بايتاً، ثم فكّك chunks على الورق (Length→Type→القطعة التالية). ارسم خريطة الملف.
  2. ابنِ محلّل chunks من الصفر: يطبع (الاسم، الإزاحة، الطول، critical/ancillary من حالة الحرف). تحقّق من CRC-32 (نفّذه بنفسك).
  3. اختبار التوسّع: احقن chunk ثانوياً مزيّفاً (حرف أول صغير) بطول و CRC صحيحين. هل يفتح العارض الملف؟ يجب أن يتخطّاه. الآن اجعل الحرف الأول كبيراً وأعِد — يجب أن يرفض العارض. تشاهد آلية critical/ancillary تعمل بيدك.