aspose.info
TH

รูปแบบไฟล์ PNG - ไฟล์ภาพแรสเตอร์

อัปเดตเมื่อ

ไฟล์ PNG คืออะไร?

ไฟล์ PNG (Portable Network Graphics) เป็นรูปแบบไฟล์ภาพแรสเตอร์ที่ใช้การบีบอัดแบบไม่สูญเสียข้อมูล รูปแบบไฟล์นี้สร้างขึ้นเพื่อทดแทนรูปแบบการแลกเปลี่ยนกราฟิก (GIF) และไม่มีข้อจำกัดด้านลิขสิทธิ์ อย่างไรก็ตาม รูปแบบไฟล์ PNG ไม่รองรับภาพเคลื่อนไหว รูปแบบไฟล์ PNG รองรับการบีบอัดภาพแบบไม่สูญเสียซึ่งทำให้เป็นที่นิยมในหมู่ผู้ใช้ เมื่อเวลาผ่านไป PNG ได้พัฒนาเป็นหนึ่งในรูปแบบไฟล์รูปภาพที่ใช้กันอย่างแพร่หลาย

ประวัติโดยย่อของรูปแบบไฟล์ PNG

เหตุผลหลักเบื้องหลังการสร้างรูปแบบไฟล์ PNG คืออัลกอริธึมการบีบอัด Lempel-Ziv-Welch ที่ได้รับการจดสิทธิบัตร ซึ่งใช้ในรูปแบบไฟล์ GIF สิ่งนี้พร้อมกับข้อจำกัดอื่นๆ ของ GIF ทำให้ต้องมีการเปลี่ยนรูปแบบไฟล์ GIF ข้อเสนอแรกและชื่อสำหรับรูปแบบไฟล์ PNG มีขึ้นในเดือนมกราคม พ.ศ. 2538 เหตุการณ์สำคัญเกี่ยวกับรูปแบบไฟล์ PNG มีดังต่อไปนี้:

  • ตุลาคม 1996: ข้อมูลจำเพาะ PNG เวอร์ชัน 1.0 ได้รับการเผยแพร่และต่อมาปรากฏเป็น RFC 2083 สิ่งเดียวกันนี้กลายเป็นคำแนะนำของ W3C ในเดือนตุลาคม 1996
  • ธันวาคม พ.ศ. 2541: เวอร์ชัน 1.1 ซึ่งมีการเปลี่ยนแปลงเล็กน้อยและการเพิ่มส่วนใหม่อีก 3 ส่วนได้รับการปล่อยตัว
  • สิงหาคม 1999: เวอร์ชัน 1.2 เพิ่มส่วนพิเศษหนึ่งส่วน ได้รับการปล่อยตัว
  • พฤศจิกายน 2546: PNG กลายเป็นมาตรฐานสากล (ISO/IEC 15948:2003) PNG เวอร์ชันนี้แตกต่างจากเวอร์ชัน 1.2 เพียงเล็กน้อย และไม่มีการเพิ่มองค์ประกอบใหม่
  • มีนาคม 2547: ISO/IEC 15948:2004

การเปรียบเทียบการทำงานของ GIF และ PNG

รูปแบบไฟล์ PNG ได้รับการออกแบบมาให้เรียบง่ายและพกพาสะดวก ไม่มีข้อผูกมัดตามกฎหมาย ใช้แทนกันได้ ยืดหยุ่นและทนทาน ตารางต่อไปนี้แสดงรายการคุณสมบัติ GIF ที่สืบทอดมาจากรูปแบบไฟล์ PNG นอกเหนือจากคุณสมบัติใหม่

คุณสมบัติGIFPNG
ดัชนีภาพสีสูงสุด 256 สีใช่ใช่
รองรับการสตรีมใช่ใช่
ความโปร่งใสใช่ใช่
ข้อมูลเสริมใช่ใช่
ความเป็นอิสระของฮาร์ดแวร์และแพลตฟอร์มใช่ใช่
มีประสิทธิภาพใช่ใช่
ภาพสีจริงสูงสุด 48 บิตต่อพิกเซลไม่ใช่
รูปภาพระดับสีเทาสูงสุด 16 บิตต่อพิกเซลไม่ใช่
ช่องอัลฟ่าแบบเต็ม (มาสก์ความโปร่งใสทั่วไป)ไม่ใช่
ข้อมูลแกมม่าของภาพไม่ใช่
ความน่าเชื่อถือไม่ใช่
การนำเสนอเริ่มต้นเร็วขึ้นไม่ใช่

โครงสร้างไฟล์ PNG

ระบบปฏิบัติการเกือบทั้งหมดรองรับการเปิดไฟล์ PNG ตัวอย่างเช่น โปรแกรมดู Microsoft Windows มีความสามารถในการเปิดไฟล์ PNG เนื่องจากระบบปฏิบัติการมีการสนับสนุนเป็นส่วนหนึ่งของการติดตั้งตามค่าเริ่มต้น ไฟล์ PNG ประกอบด้วย “ลายเซ็น” PNG ตามด้วยชุดของ //chunks//

ส่วนหัวของไฟล์ PNG

แปดไบต์แรกของไฟล์ PNG มีค่า (ทศนิยม) ต่อไปนี้เสมอ:

{{{137 80 78 71 13 10 26 10 }}}

ลายเซ็นนี้ระบุว่าส่วนที่เหลือของไฟล์มีภาพ PNG หนึ่งภาพ ซึ่งประกอบด้วยชุดของชิ้นที่ขึ้นต้นด้วยชิ้น IHDR และลงท้ายด้วยชิ้น IEND

ลูกชิ้น

แต่ละก้อนประกอบด้วยสี่ส่วน:

Length: จำนวนเต็ม 4 ไบต์ที่ไม่มีเครื่องหมายระบุจำนวนไบต์ในช่องข้อมูลของก้อน ความยาวจะนับเฉพาะฟิลด์ข้อมูล ไม่ใช่ตัวมันเอง โค้ดประเภทก้อน หรือ CRC ศูนย์คือความยาวที่ถูกต้อง แม้ว่าตัวเข้ารหัสและตัวถอดรหัสควรถือว่าความยาวนั้นไม่ได้ลงนาม แต่ค่าของมันจะต้องไม่เกิน 231 ไบต์

ประเภทก้อน: โค้ดประเภทก้อนขนาด 4 ไบต์ เพื่อความสะดวกในการอธิบายและตรวจสอบไฟล์ PNG รหัสประเภทจะถูกจำกัดให้ประกอบด้วยตัวอักษร ASCII ตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก (AZ และ az หรือทศนิยม 65-90 และ 97-122) อย่างไรก็ตาม ตัวเข้ารหัสและตัวถอดรหัสต้องปฏิบัติต่อรหัสเป็นค่าไบนารีคงที่ ไม่ใช่สตริงอักขระ ตัวอย่างเช่น การแสดงรหัสประเภท IDAT โดยเทียบเท่ากับ EBCDIC ของตัวอักษรเหล่านั้นจะไม่ถูกต้อง หลักเกณฑ์การตั้งชื่อเพิ่มเติมสำหรับประเภทก้อนจะกล่าวถึงในส่วนถัดไป

ข้อมูลก้อน: ไบต์ข้อมูลที่เหมาะสมกับประเภทก้อน ถ้ามี ฟิลด์นี้มีความยาวเป็นศูนย์ได้

CRC: CRC 4 ไบต์ (Cyclic Redundancy Check) คำนวณจากไบต์ก่อนหน้าในกลุ่ม รวมถึงรหัสประเภทกลุ่มและช่องข้อมูลกลุ่ม แต่ไม่รวมช่องความยาว CRC จะแสดงอยู่เสมอ แม้แต่ในส่วนที่ไม่มีข้อมูล

ความยาวของข้อมูลก้อนสามารถเป็นจำนวนไบต์ใดก็ได้จนถึงจำนวนสูงสุด ดังนั้นผู้ดำเนินการจึงไม่สามารถสันนิษฐานได้ว่าชิ้นนั้นจัดชิดขอบใด ๆ ที่ใหญ่กว่าไบต์

ชิ้นสามารถปรากฏในลำดับใดก็ได้ ขึ้นอยู่กับข้อจำกัดที่วางในแต่ละประเภท (ข้อจำกัดที่ชัดเจนประการหนึ่งคือ IHDR ต้องปรากฏก่อน และ IEND ต้องปรากฏเป็นลำดับสุดท้าย ดังนั้นก้อน IEND จึงทำหน้าที่เป็นตัวทำเครื่องหมายจุดสิ้นสุดของไฟล์) ก้อนประเภทเดียวกันหลายชิ้นสามารถปรากฏได้ แต่เฉพาะเมื่ออนุญาตเฉพาะสำหรับประเภทนั้นเท่านั้น

ประเภทก้อน

Chunk Types แบ่งออกเป็น Critical และ Ancillary chunks ตามค่า ASCII ที่คำนึงถึงขนาดตัวพิมพ์ 4 ไบต์ที่กำหนดให้กับ Chunk Type การใช้งานทั้งหมดต้องเข้าใจและแสดงผลส่วนสำคัญมาตรฐานได้สำเร็จ รูปภาพ PNG ที่ถูกต้องต้องมีชิ้น IHDR, ชิ้น IDAT อย่างน้อยหนึ่งชิ้น และชิ้น IEND

การบีบอัด

วิธีการบีบอัด PNG 0 (วิธีการบีบอัดวิธีเดียวที่กำหนดไว้สำหรับ PNG) ระบุการบีบอัดแบบยุบ/ขยายด้วยหน้าต่างเลื่อนที่มีขนาดสูงสุด 32768 ไบต์ การบีบอัดแบบยุบตัวเป็นอนุพันธ์ของ LZ77 ที่ใช้ในโปรแกรม zip, gzip, pkzip และโปรแกรมที่เกี่ยวข้อง มีการทำวิจัยอย่างกว้างขวางเพื่อสนับสนุนสถานะปลอดสิทธิบัตร ข้อมูลที่บีบอัดภายในสตรีมข้อมูล zlib ถูกจัดเก็บเป็นชุดของบล็อก ซึ่งแต่ละบล็อกสามารถแสดงข้อมูลดิบ (ไม่บีบอัด) ข้อมูลบีบอัด LZ77 ที่เข้ารหัสด้วยรหัส Huffman แบบตายตัว หรือข้อมูลที่บีบอัด LZ77 ที่เข้ารหัสด้วยรหัส Huffman แบบกำหนดเอง บิตเครื่องหมายในบล็อกสุดท้ายระบุว่าเป็นบล็อกสุดท้าย ทำให้ตัวถอดรหัสสามารถจดจำจุดสิ้นสุดของสตรีมข้อมูลที่บีบอัดได้

การกรองก่อนการบีบอัด

ใช้ฟิลเตอร์ก่อนการบีบอัดเพื่อเตรียมข้อมูลภาพสำหรับการบีบอัดที่เหมาะสมที่สุด วิธีการกรอง PNG กำหนดประเภทตัวกรองพื้นฐานห้าประเภทดังนี้:

ประเภทตัวกรองชื่อค่าที่คาดการณ์
0ไม่มีเส้นสแกนถูกส่งโดยไม่ได้แก้ไข
1ย่อยส่งความแตกต่างระหว่างแต่ละไบต์และค่าของไบต์ที่สอดคล้องกันของพิกเซลก่อนหน้า
2ขึ้นตัวกรอง Up() เหมือนกับตัวกรอง Sub() ยกเว้นว่าพิกเซลที่อยู่เหนือพิกเซลปัจจุบันทันที แทนที่จะใช้ทางด้านซ้าย ถูกใช้เป็นตัวทำนาย
3ค่าเฉลี่ยตัวกรองค่าเฉลี่ย() ใช้ค่าเฉลี่ยของพิกเซลข้างเคียงสองพิกเซล (ซ้ายและด้านบน) เพื่อทำนายค่าของพิกเซล
4Paethตัวกรอง Paeth() คำนวณฟังก์ชันเชิงเส้นอย่างง่ายของพิกเซลข้างเคียงสามพิกเซล (ซ้าย ด้านบน ซ้ายบน) จากนั้นเลือกพิกเซลข้างเคียงที่ใกล้เคียงกับค่าที่คำนวณได้เป็นตัวทำนาย

อัลกอริทึมการกรองใช้กับ ‘ไบต์’ ไม่ใช่พิกเซล โดยไม่คำนึงถึงความลึกของบิตหรือประเภทสีของรูปภาพ อัลกอริธึมการกรองทำงานบนลำดับไบต์ที่เกิดจาก scanline หากรูปภาพมีช่องอัลฟา ข้อมูลอัลฟาจะถูกกรองในลักษณะเดียวกับข้อมูลรูปภาพ

เมื่อรูปภาพถูกอินเทอร์เลซ การส่งผ่านของรูปแบบการอินเทอร์เลซแต่ละครั้งจะถือว่าเป็นอิมเมจอิสระเพื่อวัตถุประสงค์ในการกรอง ตัวกรองทำงานในลำดับไบต์ที่เกิดจากพิกเซลจริงที่ส่งผ่านระหว่างการส่งผ่าน และ “สแกนไลน์ก่อนหน้า” คือตัวกรองที่ส่งก่อนหน้านี้ในพาสเดียวกัน ไม่ใช่อันที่อยู่ติดกันในภาพที่สมบูรณ์ โปรดทราบว่าภาพย่อยที่ส่งผ่านหนึ่งรอบจะเป็นรูปสี่เหลี่ยมผืนผ้าเสมอ แต่มีความกว้างและ/หรือความสูงน้อยกว่าภาพที่สมบูรณ์ การกรองจะไม่ถูกนำไปใช้เมื่อภาพย่อยนี้ว่างเปล่า

อ้างอิง

ดูเพิ่มเติม