صيغة PNG
Portable Network Graphics
بنية قائمة على الكتل
تملك PNG واحدة من أنظف بنى الملفات الموجودة. فكل شيء فيها منظّم في "كتل"، وهي وحدات مستقلة لكل منها نوع وبيانات ومجموع تدقيق. والجميل في التصميم أن بإمكان أدوات فك الترميز تخطي أي كتلة لا تفهمها، وهكذا تدعم PNG البيانات الوصفية دون أن تكسر البرامج القديمة.
واللمسة الذكية تكمن في تسمية الكتل: إن كان أول حرف كبيرًا فالكتلة "حرجة" (لن تُعرض الصورة من دونها). أما الحرف الصغير فيعني أنها "ثانوية"، أي مفيدة لكنها غير ضرورية. وكل كتل البيانات الوصفية التي تهمنا ثانوية، ولهذا يمكننا إزالتها بأمان.
بنية ملف PNG
توقيع PNG وكتلة IHDR
| Offset | Hex | ASCII | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0000 | 89504E470D0A1A0A0000000D49484452 | .PNG........IHDR | |||||||||||||||
| 0010 | 00000100000001000802000000000000 | ............. | |||||||||||||||
بنية الكتلة
قواعد تسمية أنواع الكتل
- • الحرف الأول كبير = كتلة حرجة (يجب فهمها)
- • الحرف الأول صغير = كتلة ثانوية (اختيارية، ويمكن تجاهلها)
- • الحرف الثاني = عامة (كبير) أو خاصة (صغير)
الكتل الحرجة
يجب أن تكون هذه الكتل موجودة ومفهومة كي تكون الصورة صالحة. ويبقي PicScrub دائمًا على الكتل الحرجة.
IHDR:ترويسة الصورة
أول كتلة بعد التوقيع. تحتوي على العرض والارتفاع وعمق البت ونوع اللون وطريقة الضغط وطريقة الترشيح وطريقة التشابك. وحجم بياناتها 13 بايتًا بالضبط.
IDAT:بيانات الصورة
تحتوي على بيانات الصورة المضغوطة (بـ zlib/deflate). وقد تتوزع على عدة كتل IDAT، ويجب أن تكون كل كتل IDAT متتالية.
IEND:نهاية الصورة
تحدد نهاية دفق بيانات PNG. ويجب أن تكون الكتلة الأخيرة، وليس فيها أي بايت بيانات.
PLTE:لوحة الألوان
إلزامية للصور ذات الألوان المفهرسة (نوع اللون 3). وتضم من 1 إلى 256 مدخلًا لونيًا بنظام RGB.
كتل البيانات الوصفية
كتل ثانوية قد تحمل بيانات وصفية حساسة للخصوصية. وهذه هي الكتل التي يزيلها PicScrub.
tEXt:نص غير مضغوط
أزواج من مفتاح وقيمة بترميز Latin-1. ومن المفاتيح الشائعة: Author وDescription وCopyright وCreation Time وSoftware.
zTXt:نص مضغوط
مثل tEXt تمامًا لكن بضغط zlib. وتُستخدم للنصوص الأطول.
iTXt:نص دولي
نص بترميز UTF-8 مع ضغط اختياري. وتدعم وسوم اللغة والكلمات المفتاحية المترجمة. وتُستخدم لبيانات XMP الوصفية.
XML:com.adobe.xmp\0eXIf:بيانات EXIF
سُجّلت امتدادًا لـ PNG سنة 2017. وتحتوي على بيانات EXIF خامًا بصيغة TIFF، بالبنية نفسها المستخدمة في JPEG. وقد تحمل بيانات GPS وطوابع زمنية ومعلومات عن الجهاز.
iCCP:ملف ألوان ICC
ملف ألوان ICC مدمج ومضغوط بـ zlib. ويبقي عليه PicScrub افتراضيًا حفاظًا على دقة الألوان.
tIME:وقت آخر تعديل
سبعة بايتات: السنة (2) والشهر واليوم والساعة والدقيقة والثانية. وتكشف متى عُدّلت الصورة آخر مرة.
الكتل المتعلقة بالألوان
تؤثر هذه الكتل في عرض الألوان، لكنها لا تحمل عادة أي معلومات شخصية. ويبقي عليها PicScrub افتراضيًا.
sRGB
تشير إلى فضاء ألوان sRGB. بايت واحد يحدد نية العرض.
gAMA
قيمة غاما كعدد صحيح موجب من 4 بايتات (مضروبة في 100000).
cHRM
إحداثيات الألوان الأساسية ونقطة البياض.
sBIT
أعماق البت الأصلية للعينات في كل قناة.
التحقق بـ CRC32
تتضمن كل كتلة في PNG مجموع تدقيق CRC32 يُحسب على نوع الكتلة وبياناتها، وهو ما يضمن سلامة البيانات.
حساب CRC
CRC32 input = chunk_type (4 bytes) + chunk_data (N bytes) CRC32 output = 4 bytes appended after chunk data // PNG uses CRC-32 polynomial: 0xEDB88320
لماذا يتحقق PicScrub من CRC
عند قراءة ملفات PNG، يتحقق PicScrub من مجموع تدقيق كل كتلة لضمان سلامة البيانات. أما الكتل التالفة فتُعالَج بسلاسة دون أن يتعطل شيء.
كيف يعالج PicScrub ملفات PNG
التحقق من التوقيع
البحث عن توقيع PNG: 89 50 4E 47 0D 0A 1A 0A
تحليل الكتل
قراءة طول كل كتلة ونوعها والتحقق من مجموع تدقيقها
ترشيح كتل البيانات الوصفية
تحديد كتل tEXt وzTXt وiTXt وeXIf وtIME وتخطيها
إعادة بناء الملف
كتابة التوقيع ثم الكتل المرشّحة ثم IEND
الكتل التي تبقى
- • IHDR وPLTE وIDAT وIEND (حرجة)
- • sRGB وgAMA وcHRM (الألوان)
- • iCCP (ملف الألوان، اختياري)
- • pHYs (أبعاد البكسل)
- • tRNS (الشفافية)
الكتل التي تُزال
- • tEXt (بيانات وصفية نصية)
- • zTXt (نص مضغوط)
- • iTXt (نص دولي، وXMP)
- • eXIf (بيانات EXIF)
- • tIME (وقت التعديل)