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

صيغة PNG

Portable Network Graphics

بنية قائمة على الكتل

تملك PNG واحدة من أنظف بنى الملفات الموجودة. فكل شيء فيها منظّم في "كتل"، وهي وحدات مستقلة لكل منها نوع وبيانات ومجموع تدقيق. والجميل في التصميم أن بإمكان أدوات فك الترميز تخطي أي كتلة لا تفهمها، وهكذا تدعم PNG البيانات الوصفية دون أن تكسر البرامج القديمة.

واللمسة الذكية تكمن في تسمية الكتل: إن كان أول حرف كبيرًا فالكتلة "حرجة" (لن تُعرض الصورة من دونها). أما الحرف الصغير فيعني أنها "ثانوية"، أي مفيدة لكنها غير ضرورية. وكل كتل البيانات الوصفية التي تهمنا ثانوية، ولهذا يمكننا إزالتها بأمان.

بنية ملف PNG

Signature
IHDR
Metadata
IDAT
IEND
Signature
8 بايت
89 50 4E 47 0D 0A 1A 0A
IHDR
25 بايت
ترويسة الصورة (إلزامية)
Metadata
100 بايت
كتل tEXt وiTXt وeXIf
IDAT
طول متغيّر
بيانات الصورة المضغوطة
IEND
12 بايت
علامة نهاية الصورة

توقيع PNG وكتلة IHDR

توقيع PNG
طول IHDR (13)
نوع IHDR
العرض (256)
الارتفاع (256)
عمق البت ونوع اللون وغيرها
OffsetHexASCII
0000
89504E470D0A1A0A0000000D49484452
.PNG........IHDR
0010
00000100000001000802000000000000
.............

بنية الكتلة

الطولالنوعالبياناتCRC32
4 بايت4 بايتمتغيّر4 بايت

قواعد تسمية أنواع الكتل

  • • الحرف الأول كبير = كتلة حرجة (يجب فهمها)
  • • الحرف الأول صغير = كتلة ثانوية (اختيارية، ويمكن تجاهلها)
  • • الحرف الثاني = عامة (كبير) أو خاصة (صغير)

الكتل الحرجة

يجب أن تكون هذه الكتل موجودة ومفهومة كي تكون الصورة صالحة. ويبقي 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.

Format: keyword + null + text

zTXt:نص مضغوط

مثل tEXt تمامًا لكن بضغط zlib. وتُستخدم للنصوص الأطول.

iTXt:نص دولي

نص بترميز UTF-8 مع ضغط اختياري. وتدعم وسوم اللغة والكلمات المفتاحية المترجمة. وتُستخدم لبيانات XMP الوصفية.

XMP keyword: XML:com.adobe.xmp\0

eXIf:بيانات 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

1

التحقق من التوقيع

البحث عن توقيع PNG: 89 50 4E 47 0D 0A 1A 0A

2

تحليل الكتل

قراءة طول كل كتلة ونوعها والتحقق من مجموع تدقيقها

3

ترشيح كتل البيانات الوصفية

تحديد كتل tEXt وzTXt وiTXt وeXIf وtIME وتخطيها

4

إعادة بناء الملف

كتابة التوقيع ثم الكتل المرشّحة ثم IEND

الكتل التي تبقى

  • • IHDR وPLTE وIDAT وIEND (حرجة)
  • • sRGB وgAMA وcHRM (الألوان)
  • • iCCP (ملف الألوان، اختياري)
  • • pHYs (أبعاد البكسل)
  • • tRNS (الشفافية)

الكتل التي تُزال

  • • tEXt (بيانات وصفية نصية)
  • • zTXt (نص مضغوط)
  • • iTXt (نص دولي، وXMP)
  • • eXIf (بيانات EXIF)
  • • tIME (وقت التعديل)