UGLYPEAR AI تُكمل ترقية أعمالها: ضغط المستندات عالي الأداء × أساس هندسة بيانات RAGتعرّف على الأعمال الجديدة →

مبدأ ضغط PNG: لماذا خوارزمية DEFLATE غير منقوص؟

الخلاصة أولًا: يُعد PNG من الضغط غير المنقوص لأنه يستخدم خوارزمية DEFLATE، حيث إن خطوتي ضغط القاموس LZ77 وترميز Huffman هما عمليتان رياضيتان قابلتان للعكس تمامًا، فتتساوى البيانات بعد فك الضغط مع البيانات الأصلية بايتًا بايتًا. تسلسل ضغط PNG هو: تخضع بيانات البكسل أولًا لتنبؤ تصفية الصفوف لإزالة التكرار بين البكسلات المتجاورة، ثم تُضغط عبر خوارزمية DEFLATE. لقطة واجهة مستخدم بأبعاد 3000×2000، يضغطها PNG من 17.2 ميجابايت إلى 0.35 ميجابايت، أي انخفاض بنسبة 97.9%، مع بقاء قيمة كل بكسل دون تغيير. فيما يلي شرح تفصيلي من زاويتي بنية ملف PNG ومبدأ خوارزمية DEFLATE.

إذا لم تكن ملمًا بعد بالطرق الشائعة لضغط الصور، فننصح بقراءة دليل ضغط الصور: مقارنة بين JPG وPNG وWebP أولًا.

أولًا: بنية ملف PNG، كيف تُنظَّم البيانات

يتألف ملف PNG من سلسلة من كتل البيانات (chunks)، وكل كتلة تحتوي على أربعة أجزاء: النوع والطول والبيانات والتحقق. بفهم وظيفة هذه الكتل، تفهم البنية الداخلية لملف PNG.

كتلة البياناتالاسم الكاملالوظيفةهل هي ضرورية؟الحجم النموذجي
التوقيعPNG Signatureمعرّف الملف 8 بايت (89 50 4E 47 0D 0A 1A 0A)ضروري8 بايت
IHDRImage Headerالمعلومات الأساسية للصورة (العرض/الارتفاع/عمق اللون/نوع اللون)ضروري25 بايت
IDATImage Dataبيانات البكسل المضغوطة (ترميز DEFLATE)ضروريغير ثابت (الجزء الرئيسي)
IENDImage Endعلامة نهاية الملفضروري12 بايت
PLTEPaletteلوحة الألوان (وضع الألوان المفهرسة)ضروري في وضع الفهرسة≤768 بايت
tRNSTransparencyمعلومات الشفافيةاختياريغير ثابت
tEXtTextبيانات وصفية نصية (المؤلف/الوصف وغيرهما)اختياريغير ثابت
gAMAImage Gammaمعلومات تصحيح جامااختياري16 بايت

الكتلة الأهم في ملف PNG هي IDAT، إذ تخزّن بيانات البكسل التي مرّت بتنبؤ تصفية الصفوف وضغط DEFLATE. صورة RGB بأبعاد 3000×2000 وعمق 24 بت، حجم بيانات بكسلاتها الأصلية نحو 17.2 ميجابايت (3000×2000×3 بايت)، وبعد ضغط PNG قد لا يتجاوز جزء IDAT 0.3–0.5 ميجابايت. يتوقف أثر الضغط أساسًا على قابلية تكرار محتوى الصورة: تكون نسبة الضغط الأعلى في المساحات الكبيرة ذات اللون الواحد، وأقلها في الصور المشوشة.

ثانيًا: مبدأ خوارزمية DEFLATE، خطوتا ضغط LZ77 وHuffman

المحرك الأساسي لضغط PNG هو خوارزمية DEFLATE، وتتألف من خطوتين: الخطوة الأولى هي ضغط القاموس LZ77 لإزالة التسلسلات المكررة، والخطوة الثانية ترميز Huffman لإزالة تكرار الترميز. كلتا الخطوتين عمليتان غير منقوصتان وقابلتان للعكس، وهذا هو السبب الجذري في أن ضغط PNG غير منقوص.

الخطوةالخوارزميةالمبدأالتكرار المُزالالقابلية للعكس
الخطوة الأولىLZ77البحث عن تسلسلات البايتات المتكررة واستبدالها بمرجع (المسافة، الطول)تكرار التسلسلاتقابلة للعكس تمامًا
الخطوة الثانيةترميز Huffmanالبيانات عالية التردد برمز قصير، والمنخفضة التردد برمز طويلتكرار الترميزقابلة للعكس تمامًا

1. ضغط القاموس LZ77

تُعد LZ77 خوارزمية ضغط معجمية بـ«نافذة منزلقة». تحتفظ بنافذة منزلقة (عادة 32 كيلوبايت)، وتبحث داخل النافذة عن أطول تسلسل بايتات يطابق الموضع الحالي. عند العثور على تطابق، تستبدل هذه البايتات بمرجع (المسافة، الطول)، وإن لم تجد تطابقًا تُخرج البايتات الأصلية.

مثال توضيحي: لنفترض أن بيانات الصورة تحتوي على بكسلات بيضاء متتالية (RGB 255,255,255) مكررة 1000 مرة. تجد LZ77 هذا النمط المتكرر في النافذة، فبعد تسجيل أول ثلاثية، تُستبدل الـ999 ثلاثية التالية بمرجع «ارجع 3 بايتات، انسخ 3 بايتات، كرر 999 مرة». وهكذا يُضغط 3000 بايت من البيانات الأصلية إلى عشرات البايتات من تسلسل المراجع، بنسبة تتجاوز 99%.

سمة البياناتأثر ضغط LZ77نسبة الضغط النموذجيةالسبب
مساحة كبيرة بلون واحدممتاز+95%تسلسلات مكررة طويلة، وكفاءة استبدال المراجع عالية
تدرج أفقيجيد70%–85%يمكن مطابقة نمط التدرج
نقش منتظمجيد60%–80%يمكن الرجوع إلى تكرار النقش
تشويش عشوائيضعيف0%–10%لا توجد تسلسلات مكررة يمكن مطابقتها
صور طبيعيةضعيف5%–20%اختلاف البكسلات كبير، وقلة التطابقات

2. ترميز Huffman

تمرر البيانات الناتجة من LZ77 (مزيج من المراجع والبايتات الأصلية) عبر ترميز Huffman. الفكرة الجوهرية لـ Huffman هي: الرموز عالية التكرار تُرمّز برمز قصير، والرموز منخفضة التكرار برمز طويل، مما يقلل متوسط طول الترميز.

مثال: إذا شكّلت «علامة المرجع» في مخرجات LZ77 نسبة 60% من التكرار، وبلغت قيمة البايت الأصلي 255 نسبة 20%، وظهرت القيم الأخرى بنسب ضئيلة. تُخصّص Huffman لـ«علامة المرجع» ترميزًا ببتّين، ولقيمة 255 ترميزًا بثلاث بتات، وللقيم منخفضة التكرار ترميزًا من 8 إلى 12 بتًا. وبهذا ينخفض متوسط طول ترميز كل رمز من 8 بتات ثابتة إلى 3–4 بتات، مع ضغط إضافي بنحو 50%.

يستخدم DEFLATE طريقتين لترميز Huffman: شجرة Huffman ثابتة (جدول ترميز محدد مسبقًا، سريع لكن نسبة الضغط متوسطة) وشجرة Huffman ديناميكية (تُبنى وفق ترددات البيانات الفعلية للوصول إلى جدول الترميز الأمثل، نسبة الضغط أعلى لكن تحتاج تخزينًا إضافيًا لجدول الترميز). يشترط معيار PNG استخدام ترميز Huffman الديناميكي للحصول على أفضل أثر ضغط.

ثالثًا: آلية الضغط غير المنقوص، تنبؤ تصفية الصفوف + DEFLATE

لا يعتمد الضغط غير المنقوص في PNG على خوارزمية DEFLATE فحسب، بل توجد خطوة معالجة مسبقة مهمة، وهي «تنبؤ تصفية الصفوف» (Filter). تُنفَّذ هذه الخطوة قبل DEFLATE، والهدف منها جعل بيانات البكسلات أكثر ملاءمة لضغط LZ77.

تكون قيم البكسلات المتجاورة في الصورة متقاربة في العادة (مثلًا قيم البكسلات في منطقة السماء الزرقاء متقاربة). يقوم تنبؤ تصفية الصفوف بطرح قيمة البكسل الأيسر أو العلوي من كل بكسل، فتحوّل القيم المطلقة إلى فروق، وتكون هذه الفروق صغيرة أو صفرًا في العادة، وهو نمط بيانات أكثر ملاءمة لضغط LZ77 وHuffman.

نوع التصفيةالاسمصيغة التنبؤالسيناريوهات المناسبة
0Noneبدون تنبؤ، القيمة الأصليةبيانات تشويش غير منتظمة
1Subالقيمة الحالية − قيمة اليسارصور ذات تدرج أفقي
2Upالقيمة الحالية − قيمة الأعلىصور ذات تدرج رأسي
3Averageالقيمة الحالية − (اليسار + الأعلى)/2صور ذات انتقال سلس
4Paethالقيمة الحالية − قيمة تنبؤ Paethعام (الأمثل لأغلب الصور)

يمكن لمشفّر PNG اختيار نوع التصفية لكل صف على حدة. تعتمد أداة SmartSlim SmartSlim على محرك ضغط Rust مطوّر ذاتيًا، وتجرب أنواع التصفية الخمسة لكل صف، وتختار الأنسب وفق أثر الضغط، وهذا يمكن أن يقلل الحجم 10%–20% إضافية مقارنة باستخدام نوع تصفية ثابت.

تسلسل الضغط الكامل:
بكسلات أصلية ← تنبؤ تصفية الصفوف (اختيار التصفية الأمثل) ← ضغط القاموس LZ77 ← ترميز Huffman ← كتلة بيانات IDAT

تسلسل فك الضغط عكسي تمامًا:
كتلة بيانات IDAT ← فك ترميز Huffman ← فك ضغط LZ77 ← عكس التصفية واستعادة البكسلات ← بكسلات أصلية

الخطوتان عمليتان رياضيتان عكسيتان دقيقتان، وتكون بيانات البكسلات بعد فك الضغط مطابقة للبيانات الأصلية بايتًا بايت، وهذه هي الضمانة الجذرية لكون PNG غير منقوص.

رابعًا: اختبار فعلي، مقارنة أحجام PNG وJPEG وWebP

قارنا أثر الضغط لثلاثة صيغ باستخدام نفس مجموعة صور الاختبار، مع تغطية أنواع مختلفة من المحتوى البصري.

نوع الصورةالأبعادBMP الأصليةPNGJPEG (q80)WebP (q80)نسبة ضغط PNG
لقطة واجهة مستخدم1920×10805.93 ميجابايت0.35 ميجابايت0.82 ميجابايت0.28 ميجابايت94.1%
مخطط هيكلي2000×15008.58 ميجابايت0.42 ميجابايت1.15 ميجابايت0.35 ميجابايت95.1%
صورة طبيعية3000×200017.16 ميجابايت12.50 ميجابايت1.80 ميجابايت1.42 ميجابايت27.2%
صورة شخصية4000×300034.33 ميجابايت28.80 ميجابايت3.50 ميجابايت2.80 ميجابايت16.1%
مجموعة أيقونات1024×10243.00 ميجابايت0.08 ميجابايت0.45 ميجابايت0.06 ميجابايت97.3%
وثيقة ممسوحة ضوئيًا2480×350824.80 ميجابايت1.20 ميجابايت0.85 ميجابايت0.72 ميجابايت95.2%

تكشف بيانات الاختبار حقيقة جوهرية: أثر ضغط PNG يتوقف بشدة على نوع الصورة. في صور لقطات الواجهة والمخططات الهيكلية والأيقونات التي تحوي مساحات كبيرة من الألوان الواحدة، تصل نسبة ضغط PNG إلى 94%–97%، متفوقة بفارق كبير على JPEG. لكن في الصور الطبيعية والصور الشخصية ذات اختلاف البكسلات الكبير، لا تتجاوز نسبة ضغط PNG 16%–27%، وهي أقل بكثير من نسبة JPEG البالغة 89%–90%.

لننظر الآن إلى المقارنة بين PNG القياسي وPNG المحسّن:

نوع الصورةPNG القياسيPNG المحسّننسبة الانخفاض بعد التحسينطريقة التحسين
لقطة واجهة مستخدم0.42 ميجابايت0.35 ميجابايت16.7%تصفية Paeth + أعلى مستوى zlib
مخطط هيكلي0.52 ميجابايت0.42 ميجابايت19.2%اختيار التصفية المثلى لكل صف + حذف البيانات الوصفية
مجموعة أيقونات0.12 ميجابايت0.08 ميجابايت33.3%التحويل إلى ألوان مفهرسة بـ 8 بتات + تحسين التصفية
وثيقة ممسوحة ضوئيًا1.50 ميجابايت1.20 ميجابايت20.0%اختيار التصفية المثلى لكل صف + حذف gAMA

يستطيع تحسين PNG في SmartSlim SmartSlim تقليل الحجم بنسبة 15%–33% إضافية مقارنة بـ PNG القياسي، وجوهر ذلك هو الجمع بين اختيار التصفية المثلى لكل صف وأعلى مستوى ضغط في zlib.

لمزيد من المقارنات بين الصيغ، يمكنك الرجوع إلى الضغط غير المنقوص مقابل الضغط المنقوص: الفرق الجوهري ومقارنة بين WebP وPNG وJPG.

خامسًا: الأسئلة الشائعة FAQ

س1: لماذا يُعد PNG ضغطًا غير منقوص؟

يستخدم PNG خوارزمية DEFLATE لضغط البيانات، وتتألف هذه الخوارزمية من خطوتي ضغط القاموس LZ77 وترميز Huffman. تبحث LZ77 عن تسلسلات البايتات المتكررة وتستبدلها بمرجع (مسافة + طول)، بينما يستخدم Huffman ترميزًا متغير الطول يمنح الرموز عالية التكرار رموزًا قصيرة. كلتا الخطوتين عمليتان قابلتان للعكس، فعند فك الضغط يُستعاد الترميز المتغير الطول عبر فك ترميز Huffman، وتُستعاد البايتات الأصلية من المراجع وفق LZ77، فتتساوى البيانات تمامًا دون فقدان أي معلومة، ومن ثم يُعد PNG ضغطًا غير منقوص.

س2: أيهما أعلى في نسبة الضغط، PNG أم JPEG؟

في الصور الفوتوغرافية، تفوق JPEG بكثير على PNG. صورة فوتوغرافية بأبعاد 3000×2000، يكون حجمها بصيغة PNG نحو 12.5 ميجابايت، وبصيغة JPEG بجودة 80 نحو 1.8 ميجابايت، بفارق 7 أضعاف. السبب أن JPEG يستخدم تحويل DCT المنقوص للتخلص من التفاصيل عالية التردد، بينما يجب على PNG الاحتفاظ بكل بكسل دون فقدان. لكن في المخططات الهيكلية ولقطات الشاشة والأيقونات التي تحوي مساحات كبيرة بلون واحد، يكون PNG أصغر حجمًا، فمثلًا لقطة واجهة مستخدم بـ 0.3 ميجابايت بصيغة PNG، و0.8 ميجابايت بصيغة JPEG بجودة 80. اختيار الصيغة يتوقف على نوع المحتوى.

س3: ما أعلى نسبة ضغط يمكن أن يصل إليها PNG؟

يعتمد ذلك على محتوى الصورة. الصور ذات المساحات الكبيرة من الألوان الواحدة أو التدرجات يمكن أن تتجاوز نسبة ضغطها 90% (مثل ضغط لقطة واجهة مستخدم من 5 ميجابايت إلى 0.3 ميجابايت)، بينما تكون نسبة ضغط الصور الفوتوغرافية ذات التشويش عادة بين 10% و30% فقط، لأن اختلاف البكسلات كبير ولا تجد LZ77 تسلسلات متكررة. يقترب الحد النظري لخوارزمية DEFLATE في PNG من مستوى ضغط ZIP، ولا يمكنها الوصول إلى نسب ضغط عالية جدًا كـ JPEG عبر التخلص من المعلومات.

س4: ما الفرق بين تحسين PNG وضغط PNG؟

ضغط PNG يعني ترميز بيانات البكسل الأصلية بصيغة PNG عبر DEFLATE، وهو تسلسل قياسي. أما تحسين PNG فهو تقليل إضافي للحجم فوق الضغط القياسي، ويشمل: تجربة أنواع تنبؤ تصفية الصفوف الخمسة واختيار الأمثل، واستخدام أعلى مستوى ضغط في zlib، وحذف كتل البيانات الوصفية (مثل tEXt/gAMA)، وتحويل 24 بت RGBA إلى ألوان مفهرسة بـ 8 بتات (إذا كانت الألوان ≤ 256 لونًا). يستطيع تحسين PNG في SmartSlim SmartSlim تقليل الحجم بنسبة 15%–30% مقارنة بـ PNG القياسي.

الخلاصة

يستطيع PNG أن يكون ضغطًا غير منقوص، والجوهر أن خطوتي LZ77 وHuffman في خوارزمية DEFLATE عمليتان رياضيتان قابلتان للعكس تمامًا، إلى جانب المعالجة المسبقة عبر تنبؤ تصفية الصفوف التي تعزز قابلية البيانات للضغط. يكون أثر ضغط PNG ممتازًا في لقطات الواجهة والمخططات الهيكلية والأيقونات ذات المساحات الكبيرة من الألوان الواحدة (نسبة ضغط 94%–97%)، لكنه محدود في الصور الفوتوغرافية (16%–27%)، وفي هذه الحالة يُنصح باختيار JPEG أو WebP.

إذا كنت بحاجة إلى تحسين حجم صور PNG، فإن SmartSlim SmartSlim يوفر - عبر محرك ضغط Rust - اختيار التصفية المثلى لكل صف وأعلى مستوى ضغط في zlib، مما يقلل الحجم بنسبة 15%–33% مقارنة بـ PNG القياسي، ويدعم 9 صيغ صور من بينها png وjpg وjpeg وwebp وbmp وtiff، مع ضغط محلي لا تغادر فيه البيانات نطاق المؤسسة.

هل تحتاج إلى ضغط الملفات؟ جرّب SmartSlim SmartSlim

مدعوم بمحرك ضغط Rust مطوّر ذاتيًا، يدعم أكثر من 40 صيغة في 10 فئات رئيسية تشمل PDF والصور والفيديو وOffice وOFD، مع ضغط محلي لا تغادر فيه البيانات نطاق المؤسسة.