แรงจูงใจหลักสำหรับรูปแบบ PNG คือการสร้างทดแทน GIF ที่ไม่เพียง แต่ฟรี แต่ยังปรับปรุงในทุกประการ ด้วยเหตุนี้การบีบอัด PNG จึงไม่สูญเสียข้อมูลทั้งหมดนั่นคือข้อมูลภาพดั้งเดิมสามารถสร้างขึ้นใหม่ได้อย่างแน่นอนบิตสำหรับบิต - เช่นเดียวกับใน GIF และ TIFF รูปแบบส่วนใหญ่
PNG ใช้กระบวนการบีบอัดแบบ 2 ขั้นตอน:
- การบีบอัดล่วงหน้า: การกรอง (การทำนาย)
- การบีบอัด: ยุบ (ดูวิกิพีเดีย )
ขั้นตอนการบีบอัดล่วงหน้าเรียกว่าการกรองซึ่งเป็นวิธีการแปลงข้อมูลภาพแบบย้อนกลับเพื่อให้กลไกการบีบอัดหลักสามารถทำงานได้อย่างมีประสิทธิภาพมากขึ้น
ตัวอย่างง่ายๆให้พิจารณาลำดับของไบต์ที่เพิ่มขึ้นอย่างสม่ำเสมอจาก 1 เป็น 255:
1, 2, 3, 4, 5, .... 255
เนื่องจากไม่มีการทำซ้ำในลำดับจึงบีบอัดไม่ดีหรือไม่ดีเลย แต่การปรับเปลี่ยนเล็กน้อยของลำดับ - กล่าวคือปล่อยให้ไบต์แรกเพียงอย่างเดียว แต่แทนที่แต่ละไบต์ที่ตามมาด้วยความแตกต่างระหว่างมันและบรรพบุรุษ - แปลงลำดับเป็นชุดที่สามารถบีบอัดได้อย่างมาก:
1, 1, 1, 1, 1, .... 1
การแปลงข้างต้นเป็นแบบไม่สูญเสียเนื่องจากไม่มีการละไบต์และสามารถย้อนกลับได้ทั้งหมด ขนาดที่บีบอัดของซีรี่ส์นี้จะลดลงมาก แต่ชุดเดิมยังสามารถสร้างใหม่ได้อย่างสมบูรณ์แบบ
ข้อมูลภาพที่แท้จริงนั้นไม่ค่อยสมบูรณ์แบบ แต่การกรองจะปรับปรุงการบีบอัดในภาพระดับสีเทาและภาพสี truecolor และสามารถช่วยในการถ่ายภาพพาเล็ต PNG รองรับตัวกรองห้าประเภทและผู้เข้ารหัสอาจเลือกใช้ตัวกรองที่แตกต่างกันสำหรับแต่ละแถวของพิกเซลในภาพ:
อัลกอริธึมทำงานเป็นไบต์ แต่สำหรับพิกเซลขนาดใหญ่ (เช่น 24- บิต RGB หรือ 64- บิต RGBA) จะเปรียบเทียบไบต์ที่สอดคล้องกันเท่านั้นความหมายส่วนประกอบสีแดงของสีพิกเซลจะถูกจัดการแยกต่างหากจากองค์ประกอบพิกเซลสีเขียวและสีน้ำเงิน
ในการเลือกตัวกรองที่ดีที่สุดสำหรับแต่ละแถวตัวเข้ารหัสจะต้องทดสอบชุดค่าผสมที่เป็นไปได้ทั้งหมด สิ่งนี้เป็นไปไม่ได้อย่างชัดเจนเนื่องจากภาพ 20 แถวจะต้องมีการทดสอบมากกว่า 95 ล้านล้านชุดโดยที่ "การทดสอบ" จะเกี่ยวข้องกับการกรองและบีบอัดภาพทั้งหมด
ระดับการบีบอัดจะถูกกำหนดเป็นตัวเลขระหว่าง 0 (ไม่มี) และ 9 (ดีที่สุด) สิ่งเหล่านี้อ้างถึงการแลกเปลี่ยนระหว่างความเร็วและขนาดและเกี่ยวข้องกับจำนวนชุดตัวกรองแถวที่ต้องลอง ไม่มีมาตรฐานเกี่ยวกับระดับการบีบอัดเหล่านี้ดังนั้นโปรแกรมแก้ไขรูปภาพทุกตัวอาจมีอัลกอริธึมของตัวเองในการพิจารณาถึงจำนวนฟิลเตอร์ที่ควรลองเมื่อปรับขนาดภาพให้เหมาะสมที่สุด
ระดับการบีบอัด 0 หมายถึงไม่ใช้ฟิลเตอร์เลยซึ่งเร็ว แต่ก็สิ้นเปลือง ระดับที่สูงขึ้นหมายถึงมีการลองชุดค่าผสมมากขึ้นเรื่อย ๆ ในแถวรูปภาพและจะมีเพียงชุดค่าผสมที่ดีที่สุดเท่านั้น
ฉันเดาว่าวิธีที่ง่ายที่สุดในการบีบอัดที่ดีที่สุดคือการทดสอบบีบอัดแต่ละแถวด้วยตัวกรองแต่ละตัวบันทึกผลลัพธ์ที่น้อยที่สุดและทำซ้ำสำหรับแถวถัดไป จำนวนนี้จะกรองและบีบอัดภาพทั้งหมดห้าครั้งซึ่งอาจเป็นการแลกเปลี่ยนที่สมเหตุสมผลสำหรับรูปภาพที่จะถูกส่งและถอดรหัสหลายครั้ง ค่าการบีบอัดที่ต่ำลงจะทำได้น้อยลงตามดุลยพินิจของผู้พัฒนาเครื่องมือ
นอกเหนือจากตัวกรองแล้วระดับการบีบอัดอาจมีผลต่อระดับการบีบอัด zlib ซึ่งเป็นตัวเลขระหว่าง 0 (ไม่มี Deflate) และ 9 (Deflate สูงสุด) ระดับ 0-9 ที่ระบุส่งผลต่อการใช้งานตัวกรองซึ่งเป็นคุณสมบัติการเพิ่มประสิทธิภาพหลักของ PNG ยังขึ้นอยู่กับผู้พัฒนาเครื่องมือ
สรุปได้ว่า PNG มีพารามิเตอร์การบีบอัดที่สามารถลดขนาดไฟล์ได้อย่างมากโดยไม่สูญเสียแม้แต่พิกเซลเดียว
แหล่งที่มา:
วิกิพีเดียเอกสารเครือข่ายแบบพกพา
libpng บทที่ 9 - การบีบอัดและการกรอง