ما هو ملف PNG؟
ملف ** PNG ** (Portable Network Graphics) هو تنسيق ملف صورة نقطية يستخدم ضغطًا بدون فقدان البيانات. تم إنشاء تنسيق الملف هذا كبديل لتنسيق تبادل الرسومات (GIF) وليس له قيود على حقوق النشر. ومع ذلك ، لا يدعم تنسيق ملف PNG الرسوم المتحركة. يدعم تنسيق ملف PNG ضغط الصور بدون فقدان البيانات مما يجعله شائعًا بين مستخدميه. مع مرور الوقت ، تطورت PNG كواحدة من تنسيقات ملفات الصور المستخدمة على نطاق واسع.
تاريخ موجز لتنسيق ملف PNG
كان السبب الرئيسي وراء إنشاء تنسيق ملف PNG هو خوارزمية الضغط الحاصلة على براءة اختراع ، Lempel-Ziv-Welch ، المستخدمة في تنسيق ملف GIF. أدى هذا إلى جانب قيود GIF الأخرى إلى ظهور حاجة لاستبدال تنسيق ملف GIF. جاء أول اقتراح واسم لتنسيق ملف PNG في يناير 1995. الأحداث الرئيسية فيما يتعلق بتنسيقات ملفات PNG مذكورة أدناه:
- أكتوبر 1996: تم إصدار الإصدار 1.0 من مواصفات PNG وظهر لاحقًا كـ RFC 2083. أصبح الأمر نفسه توصية W3C في أكتوبر 1996.
- ديسمبر 1998: تم إصدار الإصدار 1.1 ، مع بعض التغييرات الصغيرة وإضافة ثلاث قطع جديدة.
- أغسطس 1999: تم إطلاق الإصدار 1.2 ، بإضافة جزء إضافي واحد.
- نوفمبر 2003: أصبحت PNG معيارًا دوليًا (ISO / IEC 15948: 2003). يختلف هذا الإصدار من PNG قليلاً عن الإصدار 1.2 ولا يضيف أي أجزاء جديدة.
- مارس 2004: ISO / IEC 15948: 2004
مقارنة وظيفية بين GIF و PNG
تم تصميم تنسيق ملف PNG ليكون بسيطًا ومحمولًا ، وغير مرتبط به قانونيًا ، وقابل للتبادل ، ومرنًا وقويًا. يسرد الجدول التالي ميزات GIF الموروثة بواسطة تنسيق ملف PNG بالإضافة إلى الميزات الجديدة.
ميزة | GIF | PNG |
---|---|---|
صور بألوان الفهرس تصل إلى 256 لونًا | نعم | نعم |
دعم الدفق | نعم | نعم |
الشفافية | نعم | نعم |
معلومات ثانوية | نعم | نعم |
استقلالية الأجهزة والمنصة | نعم | نعم |
فعال | نعم | نعم |
صور Truecolor تصل إلى 48 بت لكل بكسل | لا | نعم |
صور بتدرج الرمادي حتى 16 بت لكل بكسل | لا | نعم |
قناة ألفا كاملة (أقنعة الشفافية العامة) | لا | نعم |
معلومات صورة غاما | لا | نعم |
الموثوقية | لا | نعم |
عرض تقديمي أولي أسرع | لا | نعم |
هيكل ملف PNG
تدعم جميع أنظمة التشغيل تقريبًا فتح ملفات PNG. على سبيل المثال ، يمتلك عارض Microsoft Windows القدرة على فتح ملفات PNG لأن نظام التشغيل لديه افتراضيًا الدعم المتاح كجزء من التثبيت. يتكون ملف PNG من “توقيع” PNG متبوعًا بسلسلة من // قطع //.
رأس ملف PNG
تحتوي البايت الثمانية الأولى من ملف PNG دائمًا على القيم (العشرية) التالية:
{{{137 80 78 71 13 10 26 10 }}}
يشير هذا التوقيع إلى أن باقي الملف يحتوي على صورة PNG واحدة ، تتكون من سلسلة من الأجزاء تبدأ بجزء IHDR وتنتهي بقطعة IEND.
قطع
تتكون كل قطعة من أربعة أجزاء:
** الطول: ** 4 بايت عدد صحيح بدون إشارة يعطي عدد البايتات في حقل بيانات القطعة. يحسب الطول حقل البيانات فقط ، وليس نفسه ، أو كود نوع القطعة ، أو CRC. الصفر هو طول صالح. على الرغم من أن أجهزة التشفير ومفكك التشفير يجب أن تعامل الطول على أنه غير إشارة ، يجب ألا تتجاوز قيمته 231 بايت.
** نوع القطعة: ** رمز نوع القطعة 4 بايت. للراحة في الوصف وفحص ملفات PNG ، تقتصر أكواد النوع على أن تتكون من أحرف ASCII كبيرة وصغيرة (AZ و az ، أو 65-90 و 97-122 عشري). ومع ذلك ، يجب أن تعامل أجهزة التشفير وفك التشفير الرموز على أنها قيم ثنائية ثابتة ، وليست سلاسل أحرف. على سبيل المثال ، لن يكون من الصحيح تمثيل رمز النوع IDAT بواسطة مكافئات EBCDIC لتلك الأحرف. تمت مناقشة اصطلاحات التسمية الإضافية لأنواع القطع في القسم التالي.
** بيانات مجمعة: ** وحدات بايت البيانات المناسبة لنوع القطعة ، إن وجدت. يمكن أن يكون هذا الحقل بطول صفر.
** CRC: ** A 4 بايت CRC (Cyclic Redundancy Check) محسوبًا على البايتات السابقة في القطعة ، بما في ذلك كود نوع القطعة وحقول بيانات القطعة ، ولكن لا يشمل حقل الطول. اتفاقية حقوق الطفل موجودة دائمًا ، حتى بالنسبة للأجزاء التي لا تحتوي على بيانات.
يمكن أن يكون طول البيانات المقتطعة أي عدد من البايت حتى الحد الأقصى ؛ لذلك ، لا يمكن للمنفذين افتراض محاذاة الأجزاء على أية حدود أكبر من البايت.
يمكن أن تظهر القطع بأي ترتيب ، مع مراعاة القيود المفروضة على كل نوع من أنواع القطع. (أحد القيود الملحوظة هو أن IHDR يجب أن يظهر أولاً ويجب أن تظهر IEND أخيرًا ؛ وبالتالي فإن مقطع IEND يعمل كعلامة نهاية الملف.) يمكن أن تظهر أجزاء متعددة من نفس النوع ، ولكن فقط إذا كان مسموحًا بذلك على وجه التحديد لهذا النوع.
أنواع القطع
يتم تصنيف أنواع القطع إلى قطع ** حرجة ** و ** مساعدة ** استنادًا إلى قيمة ASCII الحساسة لحالة الأحرف المكونة من 4 بايت والمخصصة لنوع القطعة. يجب أن تفهم جميع التطبيقات الأجزاء الحرجة المعيارية وتعرضها بنجاح. يجب أن تحتوي صورة PNG الصالحة على جزء IHDR ، ومقطع IDAT واحد أو أكثر ، وجزء IEND.
ضغط
تحدد طريقة ضغط PNG 0 (طريقة الضغط الوحيدة المحددة حاليًا لـ PNG) ضغط انكماش / تضخم مع نافذة منزلقة بحد أقصى 32768 بايت. ضغط الانكماش هو أحد مشتقات LZ77 المستخدمة في ملفات zip و gzip و pkzip والبرامج ذات الصلة. تم إجراء أبحاث مستفيضة لدعم وضعها الخالي من براءات الاختراع. يتم تخزين البيانات المضغوطة في داتاستريم zlib كسلسلة من الكتل ، كل منها يمكن أن يمثل بيانات خام (غير مضغوطة) ، أو بيانات مضغوطة LZ77 مشفرة برموز هوفمان الثابتة ، أو بيانات مضغوطة LZ77 مشفرة برموز هوفمان المخصصة. تحدد بت العلامة في الكتلة النهائية أنها الكتلة الأخيرة ، مما يسمح لوحدة فك التشفير بالتعرف على نهاية تدفق البيانات المضغوط.
تصفية الضغط المسبق
يتم تطبيق مرشحات الضغط المسبق لتجهيز بيانات الصورة للضغط الأمثل. تحدد طريقة مرشح PNG خمسة أنواع أساسية من المرشحات على النحو التالي:
نوع الفلتر | الاسم | القيمة المتوقعة |
---|---|---|
0 | بلا | تم إرسال خط الفحص |
1 | Sub | ينقل الفرق بين كل بايت وقيمة البايت المقابل للبكسل السابق. |
2 | لأعلى | مرشح Up () هو تمامًا مثل عامل التصفية Sub () فيما عدا أنه يتم استخدام البكسل الموجود أعلى البكسل الحالي مباشرةً ، وليس فقط على يساره ، كمتوقع. |
3 | المتوسط | يستخدم عامل التصفية المتوسط () متوسط البيكسل المتجاورين (على اليسار وما فوق) للتنبؤ بقيمة البكسل. |
4 | Paeth | يحسب مرشح Paeth () دالة خطية بسيطة للبكسلات الثلاثة المجاورة (يسار ، أعلى ، أعلى يسار) ، ثم يختار كمتنبئ البكسل المجاور الأقرب إلى القيمة المحسوبة. |
يتم تطبيق خوارزميات التصفية على “البايت” ، وليس على وحدات البكسل ، بغض النظر عن عمق البت أو نوع لون الصورة. تعمل خوارزميات التصفية على تسلسل البايت الذي يتكون من خط المسح. إذا احتوت الصورة على قناة ألفا ، فإن بيانات ألفا يتم ترشيحها بنفس طريقة تصفية بيانات الصورة.
عندما تكون الصورة متشابكة ، يتم التعامل مع كل مسار لنمط التشابك كصورة مستقلة لأغراض التصفية. تعمل المرشحات على تسلسلات البايت التي تشكلها البيكسلات المرسلة بالفعل أثناء المرور ، و “خط المسح السابق” هو الذي تم إرساله مسبقًا في نفس المسار ، وليس المجاور في الصورة الكاملة. لاحظ أن الصورة الفرعية المنقولة في أي مسار تكون دائمًا مستطيلة ، ولكنها ذات عرض و / أو ارتفاع أصغر من الصورة الكاملة. لا يتم تطبيق التصفية عندما تكون هذه الصورة الفرعية فارغة.