รูปภาพ PNG (.png)
W3C มาตรฐานPortable Network Graphics (PNG) เป็นรูปแบบไฟล์กราฟิกแบบเรสเตอร์ที่ไม่มีข้อจำกัดด้านสิทธิบัตร ซึ่งรองรับการบีบอัดข้อมูลแบบไม่สูญเสียคุณภาพ สีแบบมีดัชนี และความโปร่งใสของช่องสัญญาณแอลฟาแบบแปรผัน
แปลง PNG เป็น JPG
ตัวแปลงจาก PNG เป็น JPG ฟรีในเบราว์เซอร์ แปลงไฟล์ได้ทันทีบนอุปกรณ์ของคุณ
บีบอัด PNG ออนไลน์
เป็นส่วนตัว - ไฟล์จะไม่ออกจากอุปกรณ์ของคุณ
ตรวจสอบไฟล์และข้อมูลเมตา
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ PNG โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวระดับไบต์
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ PNG โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
89 50 4E 47 0D 0A 1A 0Aการแสดงผลรูปแบบ ASCII: .PNG....
มาตรฐาน: W3C Recommendation (1996) / ISO/IEC 15948:2004
ข้อมูลจำเพาะทางเทคนิค
| สถาปัตยกรรมคอนเทนเนอร์ | คอนเทนเนอร์ไบนารีแบบแบ่งชังก์ โดยแต่ละชังก์มีการตรวจสอบ CRC32 ขนาด 4 ไบต์ |
| การบีบอัด | Deflate (LZ77 + การเข้ารหัสฮัฟแมน) พร้อมตัวกรองสแกนไลน์เชิงคาดการณ์ 5 แบบ (None, Sub, Up, Average, Paeth) |
| การจัดลำดับไบต์ | Big-Endian (ลำดับไบต์แบบเครือข่าย) สำหรับความยาวชังก์ ขนาดภาพ และค่า CRC |
| พื้นที่สี | sRGB, Display P3, จานสีแบบมีดัชนี (1-8 บิต), ระดับสีเทา, ทรูคัลเลอร์ (24/48-bit) |
| ช่องสัญญาณและโครงสร้าง | RGB + แอลฟา (สูงสุด 16 บิตต่อช่องสัญญาณ / 64-bit RGBA) |
| ขนาดสูงสุด | 2,147,483,647 x 2,147,483,647 พิกเซล (เลขจำนวนเต็มบวกขนาด 4 ไบต์) |
| ความโปร่งใส | ช่องสัญญาณแอลฟาที่ปรับค่าความโปร่งใสได้เต็มรูปแบบ 8 บิต / 16 บิต |
| การสตรีมและแบบโปรเกรสซีฟ | อัลกอริทึม interlace 7 รอบ Adam7 ช่วยเรนเดอร์ภาพแบบ 2 มิติทีละส่วนได้ |
ตารางเปรียบเทียบทางเทคนิค: PNG กับคู่แข่ง
| คุณลักษณะทางเทคนิค | PNG (ปัจจุบัน) | WebP | AVIF | JPEG |
|---|---|---|---|---|
| ประเภทการบีบอัด | แบบไม่สูญเสียคุณภาพอย่างเคร่งครัด (Deflate + ตัวกรองเชิงคาดการณ์ 2 มิติ) | แบบสูญเสียคุณภาพ (VP8) และแบบไม่สูญเสียคุณภาพ (VP8L) | แบบสูญเสียคุณภาพ (AV1 intra) และแบบไม่สูญเสียคุณภาพ | แบบสูญเสียคุณภาพอย่างเคร่งครัด (Discrete Cosine Transform) |
| ความโปร่งใสแอลฟา | ช่องสัญญาณแอลฟาแบบแปรผัน 8 บิต / 16 บิตเต็มรูปแบบ | รองรับช่องสัญญาณแอลฟา 8 บิต | รองรับแอลฟา 8 บิต / 10 บิต / 12 บิต | ไม่รองรับช่องสัญญาณความโปร่งใส |
| ขนาดไฟล์ (ภาพถ่าย) | มักมีขนาดใหญ่กว่ารูปแบบที่สูญเสียข้อมูลเมื่อใช้กับภาพถ่าย ขนาดจริงแตกต่างตามภาพและตัวเข้ารหัส | อาจมีขนาดเล็กกว่า JPEG ผลลัพธ์แตกต่างตามภาพและตัวเข้ารหัส | อาจมีขนาดเล็กกว่า JPEG ผลลัพธ์แตกต่างตามภาพและตัวเข้ารหัส | ขนาดกลางมาตรฐาน |
| ขนาดไฟล์ (กราฟิก/UI) | มีขนาดกะทัดรัดมากสำหรับภาพหน้าจอ ภาพลายเส้น และข้อความ | โหมดไม่สูญเสียคุณภาพยอดเยี่ยม | ดี แต่เข้ารหัสได้ช้ากว่า | แย่ (สร้างสิ่งประดิษฐ์เป็นคลื่นรบกวนตามขอบคม) |
| ความเข้ากันได้กับเบราว์เซอร์ | ใช้งานได้สากล 100% ในทุกเบราว์เซอร์ตั้งแต่ปี 1998 | รองรับในเบราว์เซอร์สมัยใหม่ 97%+ | รองรับในเบราว์เซอร์สมัยใหม่ 93%+ | สากล 100% |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
โปรแกรมดูภาพแสดงข้อความ 'Fatal error: Not a valid PNG file' หรือไม่สามารถเปิดได้
สาเหตุหลัก: 8 ไบต์แรกถูกเปลี่ยนแปลงโดยโหมดการถ่ายโอนแบบ ASCII (แปลง 0x0D 0x0A เป็น 0x0A หรือ 0x0D 0x0D 0x0A)
การกู้คืน: เปิดไฟล์ในโปรแกรมแก้ไขฐานสิบหก (hex editor) แล้วตรวจสอบว่า 8 ไบต์แรกตรงกับ '89 50 4E 47 0D 0A 1A 0A' การกู้คืนไบต์ส่วนหัวทั้ง 8 ไบต์ให้ตรงตามนี้มักช่วยกู้ภาพได้
pngcheck รายงาน 'CRC error in chunk IDAT' หรือภาพโหลดมาบางส่วนโดยมีสแกนไลน์ส่วนล่างเสียหาย
สาเหตุหลัก: ความเสียหายของบิตในสตรีมข้อมูล zlib ที่บีบอัด หรือเช็คซัม CRC32 ไม่ถูกต้องในส่วนย่อย IDAT
การกู้คืน: ใช้ pngcheck -f หรือยูทิลิตี้กู้คืนสตรีม Deflate เพื่อคำนวณค่า CRC32 ที่ถูกต้องใหม่ หรือคลายการบีบอัดสแกนไลน์ที่เหลือรอดจนถึงบล็อกที่เสียหาย
ภาพเรนเดอร์ได้ดีในโปรแกรมดูภาพบนเดสก์ท็อปแต่ล้มเหลวในแอปพลิเคชัน iOS
สาเหตุหลัก: iOS คาดหวังรูปแบบสลับไบต์ CgBI ที่เป็นกรรมสิทธิ์ของ Apple หรือส่วนย่อยพื้นที่สีที่ไม่ใช่มาตรฐาน
การกู้คืน: ปรับมาตรฐานภาพโดยใช้ 'pngcrush -revert-iphone-optimizations' เพื่อคืนค่าลำดับ W3C RGBA มาตรฐาน
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
PNG รองรับในระบบปฏิบัติการและแอปจำนวนมาก ความเสี่ยงด้านความปลอดภัยรวมถึงการใช้หน่วยความจำตัวถอดรหัสจนหมดและบล็อกเสริมที่เป็นอันตราย
เวกเตอร์การโจมตีที่ทราบ
- ส่วนย่อยข้อมูลเมตา tEXt และ zTXt ขนาดใหญ่เกินไป ทำให้เกิดการปฏิเสธการให้บริการเนื่องจากหน่วยความจำหมด (OOM) ในตัวถอดรหัสที่ไม่มีแซนด์บ็อกซ์
- ช่องโหว่บัฟเฟอร์ล้นของฮีปใน libpng เวอร์ชันเก่า (เช่น CVE-2015-8126 ใน png_set_PLTE)
- การโจมตีด้วยการคลายการบีบอัดจนจำนวนพิกเซลล้น โดยไฟล์ภาพขนาดเล็กประกาศมิติขนาดมหาศาล (เช่น 100,000 x 100,000 พิกเซล)
- การลักลอบนำข้อมูลออกโดยใช้สเตกาโนกราฟี ซ่อนเพย์โหลดที่เข้ารหัสไว้ในส่วนย่อยส่วนตัวเสริม (เช่น eXIf หรือประเภทส่วนย่อยแบบกำหนดเอง)
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน: ตรวจสอบความถูกต้องของขนาดภาพเสมอก่อนจัดสรรบัฟเฟอร์พิกเซลในหน่วยความจำ ลบส่วนย่อยเสริมที่ไม่จำเป็นออก (eXIf, tEXt) เมื่อมีการอัปโหลดของผู้ใช้โดยใช้เครื่องมือทำความสะอาดข้อมูลที่ปลอดภัยต่อหน่วยความจำ
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- PNG ใช้การบีบอัดแบบไม่สูญเสียข้อมูล ดังนั้นการเข้ารหัสภาพที่ไม่เปลี่ยนแปลงจะไม่ทำให้เกิดการสูญเสียจากการบีบอัด แต่การแก้ไขหรือแปลงสีอาจเปลี่ยนค่าพิกเซลได้
- ความโปร่งใสแอลฟา 8 บิตแบบไล่ระดับช่วยให้ผสานภาพเข้ากับพื้นหลังที่ซับซ้อนได้อย่างแนบเนียน
- ส่วนย่อยการแก้ไขแกมมาและโครมาติซิตี้ช่วยให้การเรนเดอร์มีความสม่ำเสมอในจอภาพที่หลากหลาย
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- ขนาดไฟล์ใหญ่กว่ารูปแบบที่มีการสูญเสียคุณภาพสมัยใหม่อย่าง WebP หรือ AVIF สำหรับเนื้อหาภาพถ่ายอย่างเห็นได้ชัด
- ไม่มีภาพเคลื่อนไหวหลายเฟรมในตัวสำหรับ PNG มาตรฐาน (ต้องใช้ส่วนขยาย APNG)
- ความลึกของสีสูง (16 บิตต่อช่องสัญญาณ) สร้างบัฟเฟอร์ถอดรหัสในหน่วยความจำขนาดใหญ่ที่ไม่ได้บีบอัด
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- ส่วนหัวลายเซ็น 8 ไบต์ออกแบบมาโดยเฉพาะเพื่อตรวจจับความเสียหายของอักขระขึ้นบรรทัดใหม่ CR/LF จากการถ่ายโอนผ่าน FTP
- คำย่อแบบวนซ้ำที่ไม่เป็นทางการสำหรับ PNG คือ 'PNG's Not GIF'
- Apple ใช้ส่วนย่อย CgBI ที่เป็นกรรมสิทธิ์ใน PNG ของแอป iOS ซึ่งสลับลำดับจาก RGBA เป็น BGRA เพื่อการเรนเดอร์ผ่าน GPU โดยตรง
คำถามทางเทคนิคที่พบบ่อย
ทำไมขนาดไฟล์ PNG จึงเพิ่มขึ้นบางครั้งเมื่อบันทึกในโปรแกรมแก้ไขภาพ
ชุดซอฟต์แวร์ที่แตกต่างกันใช้ระดับการบีบอัด Deflate และฮิวทริสติกส์ตัวกรองสแกนไลน์เชิงคาดการณ์ที่ต่างกัน โปรแกรมอย่าง Photoshop มักจะผนวกโปรไฟล์สีที่ไม่ได้บีบอัด บล็อกข้อมูลเมตา XMP และขนาดส่วนย่อย IDAT ที่ไม่ได้ปรับให้เหมาะสม เครื่องมือเฉพาะทางอย่าง File2File.app Compressor จะประเมินตัวกรองสแกนไลน์ทั้ง 5 แบบใหม่เพื่อให้ได้ขนาดไฟล์ที่เล็กที่สุด
ความแตกต่างระหว่าง PNG-8 และ PNG-24 คืออะไร
PNG-8 ใช้จานสีแบบมีดัชนีสูงสุด 256 สี (คล้ายกับ GIF) ทำให้ได้ไฟล์ขนาดเล็กมากที่เหมาะสำหรับไอคอนอย่างง่าย PNG-24 รองรับ 16.7 ล้านสี (Truecolor 8 บิตต่อช่องสัญญาณ) โดยที่ PNG-32 จะเพิ่มช่องสัญญาณความโปร่งใสแอลฟา 8 บิตเข้ามาด้วย
เหตุใด PNG จึงมีตัวกรองสแกนไลน์เชิงคาดการณ์ถึง 5 แบบ
Deflate ทำหน้าที่บีบอัดรูปแบบไบต์ที่ซ้ำกัน เนื่องจากค่าพิกเซลภาพถ่ายหรือไล่ระดับมีการเปลี่ยนแปลงทีละน้อย PNG จึงใช้ตัวกรองกับสแกนไลน์แต่ละบรรทัด (None, Sub, Up, Average, Paeth) โดยคำนวณความแตกต่างระหว่างพิกเซลที่อยู่ติดกัน การดำเนินการนี้จะแปลงข้อมูลไล่ระดับให้เป็นชุดสตริงของไบต์ที่มีค่าใกล้ศูนย์ ซึ่งจะบีบอัดได้ดีขึ้นอย่างมากภายใต้อัลกอริทึม Deflate
PNG รองรับพื้นที่สี CMYK สำหรับการพิมพ์เชิงพาณิชย์หรือไม่
ไม่รองรับ ข้อกำหนดอย่างเป็นทางการของ W3C PNG จำกัดประเภทสีไว้เฉพาะสเกลสีเทา (Grayscale), แบบมีดัชนี (Indexed) และ RGB โดยเจตนา เวิร์กโฟลว์การพิมพ์ระดับมืออาชีพที่ต้องใช้ CMYK จะต้องใช้คอนเทนเนอร์ TIFF หรือ PDF
คู่การแปลงไฟล์ PNG ที่เกี่ยวข้อง
การแปลงภาพแรสเตอร์ PNG เป็นรูปแบบ JPEG จะช่วยลดขนาดไฟล์โดยใช้การบีบอัดแบบสูญเสียข้อมูล ซึ่งทำให้รูปภาพโหลดเร็วขึ้นบนเว็บไซต์และใช้พื้นที่จัดเก็บน้อยลง
การแปลงภาพแรสเตอร์ JPEG แบบสูญเสียข้อมูลให้เป็นภาพแรสเตอร์ PNG แบบไม่สูญเสียข้อมูล ช่วยป้องกันการเสื่อมของคุณภาพซ้ำซ้อนและรองรับความโปร่งใสของช่องอัลฟา
การแปลงภาพ PNG เป็น WebP อาจลดขนาดไฟล์โดยคงความโปร่งใสไว้ ผลลัพธ์ขึ้นอยู่กับการเข้ารหัสแบบสูญเสียหรือไม่สูญเสียข้อมูลและเนื้อหาภาพ
การแปลง WebP เป็น PNG สร้างภาพนิ่งสำหรับซอฟต์แวร์ที่รองรับ PNG แต่ไม่เก็บภาพเคลื่อนไหวของ WebP และไม่สามารถกู้คืนรายละเอียดจากแหล่งที่สูญเสียข้อมูลได้
การแปลง HEIC เป็น PNG เปลี่ยนภาพที่บีบอัดด้วย HEVC แบบสูญเสียข้อมูลให้เป็นไฟล์กราฟิกแบบไม่สูญเสียข้อมูลที่รองรับอย่างกว้างขวาง
แปลงกราฟิก SVG ที่ปรับขนาดได้เป็นภาพแรสเตอร์ PNG แบบพิกเซลคงที่ เพื่อให้ใช้งานร่วมกับแอปพลิเคชันต่าง ๆ ได้
ฝังภาพ PNG แบบแรสเตอร์ไว้ในคอนเทนเนอร์ XML ของ SVG เพื่อให้ปรับขนาดเลย์เอาต์เว็บได้และใช้งานร่วมกับเลย์เอาต์เวกเตอร์
แปลงกราฟิก Adobe Photoshop PSD เป็นภาพ PNG แบบไม่สูญเสียรายละเอียด พร้อมช่องโปร่งใสแอลฟาเต็มรูปแบบ ทำงานบนเบราว์เซอร์ของคุณทันทีโดยไม่มีการส่งข้อมูลไปยังเซิร์ฟเวอร์