ไฟล์ JPEG คืออะไร?
JPEG เป็นรูปแบบภาพประเภทหนึ่งที่บันทึกโดยใช้วิธีการบีบอัดแบบสูญเสียข้อมูล ภาพที่ส่งออกเป็นผลมาจากการบีบอัด เป็นการแลกเปลี่ยนระหว่างขนาดพื้นที่จัดเก็บและคุณภาพของภาพ ผู้ใช้สามารถปรับระดับการบีบอัดเพื่อให้ได้ระดับคุณภาพที่ต้องการในขณะเดียวกันก็ลดขนาดการจัดเก็บลง คุณภาพของภาพจะได้รับผลกระทบเพียงเล็กน้อยหากใช้การบีบอัดภาพแบบ 10:1 ยิ่งค่าการบีบอัดสูงเท่าใด คุณภาพของภาพก็จะยิ่งลดลงเท่านั้น
ข้อมูลจำเพาะของรูปแบบไฟล์
รูปแบบไฟล์ภาพ JPEG ได้รับการกำหนดมาตรฐานโดย Joint Photographic Experts Group และด้วยเหตุนี้จึงใช้ชื่อ JPEG รูปแบบนี้เป็นทางเลือกในการจัดเก็บและส่งภาพถ่ายบนเว็บ ขณะนี้ระบบปฏิบัติการเกือบทั้งหมดมีโปรแกรมดูที่รองรับการแสดงภาพ JPEG ซึ่งมักจะจัดเก็บด้วยนามสกุล JPG เช่นกัน แม้แต่เว็บเบราว์เซอร์ก็รองรับการแสดงภาพ JPEG ก่อนที่จะเข้าสู่ข้อกำหนดรูปแบบไฟล์ JPEG จำเป็นต้องกล่าวถึงกระบวนการโดยรวมของขั้นตอนที่เกี่ยวข้องกับการสร้าง JPEG
ขั้นตอนการบีบอัด JPEG
การแปลงร่าง: ภาพสีจะเปลี่ยนจาก RGB เป็นภาพความสว่าง/สี (ตาไวต่อความส่องสว่าง ไม่ใช่ความเข้มของสี ดังนั้นส่วนที่เป็นสีจะสูญเสียข้อมูลจำนวนมาก ดังนั้นจึงสามารถบีบอัดได้มาก
การสุ่มตัวอย่างแบบดาวน์: การสุ่มตัวอย่างแบบดาวน์จะดำเนินการสำหรับส่วนประกอบที่มีสี ไม่ใช่สำหรับส่วนประกอบความสว่าง การสุ่มตัวอย่างแบบดาวน์ทำได้ในอัตราส่วน 2:1 ในแนวนอนและ 1:1 ในแนวตั้ง (2 ชั่วโมง 1 V) ดังนั้นภาพจึงมีขนาดเล็กลงเนื่องจากองค์ประกอบ ‘y’ ไม่ได้ถูกสัมผัส จึงไม่มีการสูญเสียคุณภาพของภาพที่เห็นได้ชัดเจน
การจัดระเบียบเป็นกลุ่ม: พิกเซลขององค์ประกอบสีแต่ละรายการจะจัดเป็นกลุ่มขนาด 8×2 พิกเซลที่เรียกว่า “หน่วยข้อมูล” หากจำนวนแถวหรือคอลัมน์ไม่คูณด้วย 8 แถวล่างและคอลัมน์ขวาสุดจะซ้ำกัน
การแปลงโคไซน์แบบไม่ต่อเนื่อง: จากนั้นการแปลงโคไซน์แบบไม่ต่อเนื่อง (DCT) จะถูกนำไปใช้กับแต่ละหน่วยข้อมูลเพื่อสร้างแผนที่ขนาด 8×8 ของส่วนประกอบที่แปลงแล้ว DCT เกี่ยวข้องกับการสูญเสียข้อมูลบางส่วนเนื่องจากความแม่นยำทางคณิตศาสตร์ที่จำกัดของคอมพิวเตอร์ ซึ่งหมายความว่าแม้ไม่มีแผนที่ คุณภาพของภาพจะสูญเสียไปบ้าง แต่โดยปกติแล้วจะมีขนาดเล็ก
Quantization: แต่ละองค์ประกอบที่แปลงแล้ว 64 รายการในหน่วยข้อมูลจะถูกหารด้วยตัวเลขแยกกันซึ่งเรียกว่า ‘Quantization Coefficient (QC)’ แล้วปัดเศษเป็นจำนวนเต็ม นี่คือจุดที่ข้อมูลสูญหายอย่างไม่สามารถแก้ไขได้ QC จำนวนมากทำให้เกิดการสูญเสียมากขึ้น โดยทั่วไป JPEG ส่วนใหญ่อนุญาตให้ใช้ตาราง QC ที่แนะนำโดยมาตรฐาน JPEG
การเข้ารหัส: ค่าสัมประสิทธิ์การแปลงเชิงปริมาณ 64 ค่า (ซึ่งตอนนี้เป็นจำนวนเต็ม) ของแต่ละหน่วยข้อมูลจะถูกเข้ารหัสโดยใช้การเข้ารหัส RLE และ Huffman ร่วมกัน
การเพิ่มส่วนหัว: ขั้นตอนสุดท้ายจะเพิ่มส่วนหัวและพารามิเตอร์ JPEG ทั้งหมดที่ใช้และแสดงผลผลลัพธ์
ตัวถอดรหัส JPEG ใช้ขั้นตอนย้อนกลับเพื่อสร้างภาพต้นฉบับจากภาพที่บีบอัด
โครงสร้างไฟล์
ภาพ JPEG จะแสดงเป็นลำดับของกลุ่มโดยแต่ละส่วนจะขึ้นต้นด้วยเครื่องหมาย เครื่องหมายแต่ละตัวเริ่มต้นด้วย 0xFF ไบต์ตามด้วยธงเครื่องหมายเพื่อแสดงประเภทของเครื่องหมาย เพย์โหลดที่ตามด้วยเครื่องหมายจะแตกต่างกันไปตามประเภทเครื่องหมาย ประเภทเครื่องหมาย JPEG ทั่วไปมีดังต่อไปนี้:
ชื่อสั้น | ไบต์ | เพย์โหลด | ชื่อ | ความคิดเห็น |
---|---|---|---|---|
SOI | 0xFF, 0xD8 | ไม่มี | จุดเริ่มต้นของรูปภาพ | |
S0F0 | 0xFF, 0xC0 | ขนาดตัวแปร | จุดเริ่มต้นของเฟรม | |
S0F2 | 0xFF, 0xC2 | ขนาดตัวแปร | เริ่มต้นสำหรับเฟรม | |
DHT | 0xFF, 0xC4 | ขนาดตัวแปร | กำหนดตาราง Huffman | |
DQT | 0xFF, 0xDB | ขนาดตัวแปร | กำหนดตารางปริมาณ | |
DRI | 0xFF, 0xDD | 4 ไบต์ | กำหนดช่วงเวลารีสตาร์ท | |
SOS | 0xFF, 0xDA | ขนาดตัวแปร | เริ่มการสแกน | |
RSTn | 0xFF, 0xD//n//(/th//n//#0..7) | ไม่มี | รีสตาร์ท | |
APPn | 0xFF, 0xE//n// | ขนาดตัวแปร | เฉพาะแอปพลิเคชัน | |
COM | 0xFF, 0xFE | ขนาดตัวแปร | ข้อคิดเห็น | |
EOI | 0xFF, 0xD9 | ไม่มี | จุดสิ้นสุดของภาพ |
ภายในข้อมูลรหัสเอนโทรปี หลังจากไบต์ 0xFF ใดๆ ไบต์ 0x00 จะถูกแทรกโดยตัวเข้ารหัสก่อนไบต์ถัดไป เพื่อไม่ให้ดูเหมือนเป็นเครื่องหมายที่ไม่ต้องการ เพื่อป้องกันข้อผิดพลาดในการจัดเฟรม ตัวถอดรหัสต้องข้าม 0x00 ไบต์นี้ เทคนิคนี้เรียกว่า การบรรจุไบต์ (ดูข้อมูลจำเพาะ JPEG ส่วน F.1.2.3) ใช้กับข้อมูลที่เข้ารหัสเอนโทรปีเท่านั้น ไม่ใช่ข้อมูลเพย์โหลดของตัวทำเครื่องหมาย . อย่างไรก็ตาม โปรดทราบว่าข้อมูลที่เข้ารหัสด้วยเอนโทรปีมีเครื่องหมายไม่กี่ตัวของมันเอง โดยเฉพาะเครื่องหมายรีเซ็ต (0xD0 ถึง 0xD7) ซึ่งใช้เพื่อแยกส่วนอิสระของข้อมูลที่เข้ารหัสเอนโทรปีเพื่อให้สามารถถอดรหัสแบบขนานได้ และตัวเข้ารหัสมีอิสระที่จะแทรกเครื่องหมายรีเซ็ตเหล่านี้ในช่วงเวลาปกติ (แม้ว่าจะไม่ใช่ตัวเข้ารหัสทุกตัวที่ทำเช่นนี้)