ไฟล์ EXIF คืออะไร??
EXIF ย่อมาจาก “Exchangeable Image File Format” ซึ่งเป็นคำจำกัดความแรกที่ได้รับจาก Japan Camera Industry Association (JCIA) ในปี 1985 มาตรฐานนี้ได้รับการจัดการโดย Japan Electronics และ สมาคมอุตสาหกรรมเทคโนโลยีสารสนเทศ (JEITA) ณ วันนี้ EXIF เป็นมาตรฐานสำหรับข้อมูลจำเพาะของรูปแบบภาพและเสียงที่ใช้โดยกล้องดิจิทัลและสแกนเนอร์เป็นหลัก
มาตรฐาน EXIF รวมการแท็กและข้อมูลเมตากับไฟล์รูปภาพ ข้อมูลเมตาสามารถประกอบด้วยข้อมูลต่างๆ เช่น รุ่นของกล้อง ความเร็วชัตเตอร์ วันที่และเวลา รูรับแสง ผู้ผลิต เวลาเปิดรับแสง ความละเอียด X ความละเอียด Y เป็นต้น โดยปกติข้อมูล EXIF จะถูกซ่อนไว้ตามค่าเริ่มต้น ในการดูข้อมูล EXIF เราต้องเลือกคุณสมบัติการดูภายในแอปพลิเคชันการดูภาพ ข้อมูลเมตาของ Exif อาจรวมถึงภาพขนาดย่อพร้อมกับข้อมูลภาพทางเทคนิคและข้อมูลหลักในไฟล์ภาพเดียว
ประวัติและเวอร์ชัน
- ในเดือนตุลาคม 1995 JEIDA ได้สร้างเวอร์ชัน 1 ในเวอร์ชันนี้ JEIDA ได้กำหนดโครงสร้างซึ่งประกอบด้วยรูปแบบข้อมูลรูปภาพและข้อมูลแอตทริบิวต์ และแท็กพื้นฐาน
- พ.ย. 2540 เวอร์ชัน 1.1 ได้รับการแนะนำพร้อมกับแท็กส่วนใหญ่จากเวอร์ชัน 1 แต่ยังเพิ่มข้อกำหนดสำหรับข้อมูลแอตทริบิวต์ที่เป็นทางเลือกและการดำเนินการรูปแบบ
- มิถุนายน 1998 เวอร์ชัน 2 พร้อมพื้นที่สี sRGB ภาพขนาดย่อและไฟล์เสียงที่บีบอัด
- ธันวาคม 1998 เวอร์ชัน 2.1 พร้อมพื้นที่เก็บข้อมูลและแอตทริบิวต์ที่ได้รับการปรับปรุง
- กุมภาพันธ์ 2545 เวอร์ชัน 2.2 เวอร์ชันปรับปรุง 2.1 โดยเพิ่มการตกแต่งการพิมพ์
- กันยายน 2546 เวอร์ชัน 2.21 พร้อมพื้นที่สีเพิ่มเติมที่เรียกว่า adobe RGB
รูปแบบไฟล์ EXIF
EXIF ใช้รูปแบบไฟล์ต่อไปนี้พร้อมกับการเพิ่มข้อมูลเมตาเฉพาะ
- JPEG - การแปลงโคไซน์แบบไม่ต่อเนื่อง (DCT) สำหรับไฟล์ภาพที่ถูกบีบอัด
- TIFF Rev. 6.0 (RGB หรือ YCbCr) สำหรับไฟล์รูปภาพที่ไม่มีการบีบอัด
- RIFF WAV สำหรับไฟล์เสียง (เชิงเส้น PCM หรือ ITU-T G.711 μ-Law PCM สำหรับข้อมูลเสียงที่ไม่บีบอัด และ IMA-ADPCM สำหรับข้อมูลเสียงที่บีบอัด)
เครื่องหมายที่ใช้โดย EXIF
เครื่องหมาย 0xFFE0~~0xFFEF คือ “Application Marker” ซึ่งใช้โดยแอปพลิเคชันของผู้ใช้ ตัวอย่างเช่น กล้องดิจิตอลรุ่นเก่าใช้ JFIF (JPEG File Interchange Format) เพื่อจัดเก็บรูปภาพ JFIF ใช้ APP0 (0xFFE0) Marker เพื่อแทรกข้อมูลการกำหนดค่ากล้องดิจิตอลและภาพขนาดย่อ นอกจากนี้ EXIF ยังใช้ Application Marker ในการแทรกข้อมูล แต่ EXIF ใช้ APP1 (0xFFE1) Marker เพื่อหลีกเลี่ยงความขัดแย้งกับรูปแบบ JFIF ไฟล์ EXIF ทุกรูปแบบเริ่มต้นจากรูปแบบนี้
เครื่องหมายซอย | เครื่องหมาย APP1 | ข้อมูล APP1 | เครื่องหมายอื่น ๆ |
---|---|---|---|
FFD8 | FFE1 | SSSS 457869660000 TTTT…… | FFXX SSSS DDDD…… |
โดยจะเริ่มจาก SOI (0xFFD8) Marker จึงเป็นไฟล์ JPEG จากนั้น APP1 Marker จะตามมาทันที ข้อมูลทั้งหมดของ EXIF จะถูกเก็บไว้ในพื้นที่ข้อมูล APP1 นี้ ส่วนของ “SSSS” บนตารางด้านบนหมายถึงขนาดของพื้นที่ข้อมูล APP1 (พื้นที่ข้อมูล EXIF) โปรดทราบว่าขนาด “SSSS” รวมถึงขนาดของคำอธิบายด้วย หลังจาก “SSSS” ข้อมูล APP1 จะเริ่มทำงาน ส่วนแรกเป็นข้อมูลพิเศษสำหรับการระบุว่า EXIF หรือไม่ อักขระ ASCII “EXIF” และ 0x00 2 ไบต์ถูกนำมาใช้ หลังจากพื้นที่ตัวทำเครื่องหมาย APP1 ตัวทำเครื่องหมาย JPEG อื่นๆ จะตามมา
โครงสร้างข้อมูล Exif
โครงสร้างคร่าวๆ ของข้อมูล EXIF (APP1) แสดงไว้ด้านล่าง ตามที่กล่าวไว้ข้างต้น ข้อมูล EXIF เริ่มจากอักขระ ASCII “EXIF” และ 0x00 2 ไบต์ จากนั้นข้อมูล EXIF จะตามมา EXIF ใช้รูปแบบ TIFF เพื่อจัดเก็บข้อมูล
FFE1 | เครื่องหมาย APP1 |
---|---|
SSSS | ข้อมูล APP1 |
45786966 0000 | ส่วนหัวของ Exif |
49492A00 08000000 | ส่วนหัว TIFF |
XXXX. . . . | IFD0 (ภาพหลัก) |
LLLLLLLL | ลิงก์ไปยัง IFD1 |
XXXX. . . . | พื้นที่ข้อมูลของ IFD0 |
XXXX. . . . | Exif SubIFD |
00000000 | จบลิงค์ |
XXXX. . . . | พื้นที่ข้อมูลของ Exif SubIFD |
XXXX. . . . | IFD1(ภาพขนาดย่อ) |
00000000 | จบลิงค์ |
XXXX. . . . | พื้นที่ข้อมูลของ IFD1 |
FFD8XXXX. . . XXXXFFD9 | ภาพขนาดย่อ |
ส่วนหัว TIFF
ส่วนหัวของไฟล์ TIFF ขนาด 8 ไบต์ประกอบด้วยข้อมูลต่อไปนี้:
Bytes 0-1:
ลำดับไบต์ที่ใช้ภายในไฟล์ ค่าทางกฎหมายคือ: “II”(4949.H)“MM” (4D4D.H)
ในรูปแบบ “II” ลำดับไบต์จะเรียงจากไบต์ที่มีนัยสำคัญน้อยที่สุดไปยังไบต์ที่มีนัยสำคัญที่สุดเสมอ สำหรับจำนวนเต็มทั้งแบบ 16 บิตและ 32 บิต ซึ่งเรียกว่าลำดับไบต์แบบ little-endian ในรูปแบบ “MM” ลำดับไบต์จะเรียงจากนัยสำคัญมากที่สุดไปยังนัยสำคัญน้อยที่สุดเสมอ สำหรับจำนวนเต็มทั้งแบบ 16 บิตและ 32 บิต สิ่งนี้เรียกว่าลำดับไบต์ขนาดใหญ่
Bytes 2-3:
หมายเลขตามอำเภอใจแต่เลือกอย่างระมัดระวัง (42) ที่ระบุไฟล์เพิ่มเติมว่าเป็นไฟล์ TIFF ลำดับไบต์ขึ้นอยู่กับค่าของ Bytes 0-1
ไบต์ 4-7:
ออฟเซ็ต (เป็นไบต์) ของ IFD แรก ไดเร็กทอรีอาจอยู่ที่ตำแหน่งใดก็ได้ในไฟล์หลังส่วนหัว แต่ต้องเริ่มต้นที่ขอบเขตของคำ โดยเฉพาะอย่างยิ่ง Image File Directory อาจเป็นไปตามข้อมูลรูปภาพที่อธิบายไว้ ผู้อ่านต้องปฏิบัติตามตัวชี้ไม่ว่าจะนำไปที่ใด คำว่า ออฟเซ็ต ไบต์ ใช้ในเอกสารนี้เสมอเพื่ออ้างถึงตำแหน่งในส่วนที่เกี่ยวกับจุดเริ่มต้นของไฟล์ TIFF ไบต์แรกของไฟล์มีออฟเซ็ตเป็น 0
ไดเร็กทอรีไฟล์รูปภาพ
IFD มีข้อมูลเกี่ยวกับรูปภาพและตัวชี้ไปยังข้อมูลรูปภาพจริง ประกอบด้วยจำนวน 2 ไบต์ของจำนวนรายการไดเร็กทอรี (เช่น จำนวนฟิลด์) ตามด้วยลำดับของรายการฟิลด์ 12 ไบต์ ตามด้วยออฟเซ็ต 4 ไบต์ของ IFD ถัดไป (หรือ 0 ถ้าไม่มี) ต้องมีอย่างน้อย 1 IFD ในไฟล์ TIFF และแต่ละ IFD ต้องมีอย่างน้อยหนึ่งรายการ
รายการ IFD
รายการ IFD ขนาด 12 ไบต์แต่ละรายการอยู่ในรูปแบบต่อไปนี้
ไบต์ | คำอธิบาย |
---|---|
0-1 | แท็กที่ระบุฟิลด์ |
2-3 | ประเภทฟิลด์ |
4-7 | จำนวนประเภทที่ระบุ |
8-11 | การชดเชยค่า การชดเชยไฟล์ (เป็นไบต์) ของค่าสำหรับฟิลด์ ค่านี้คาดว่าจะเริ่มต้นที่ขอบเขตของคำ การชดเชยมูลค่าที่สอดคล้องกันจะเป็นเลขคู่ ไฟล์ออฟเซ็ตนี้อาจชี้ไปที่ใดก็ได้ในไฟล์ แม้ว่าจะอยู่หลังข้อมูลรูปภาพก็ตาม |
ฟิลด์ TIFF เป็นเอนทิตีเชิงตรรกะที่ประกอบด้วยแท็ก TIFF และค่าของแท็ก แนวคิดเชิงตรรกะนี้ถูกนำมาใช้เป็นรายการ IFD บวกกับค่าจริงหากไม่พอดีกับส่วนค่า/ออฟเซ็ต 4 ไบต์สุดท้ายของรายการ IFD ฟิลด์เงื่อนไข TIFF และรายการ IFD สามารถใช้แทนกันได้ในบริบทส่วนใหญ่
ภาพขนาดย่อ
รูปแบบ Exif มีภาพขนาดย่อของภาพ (ยกเว้น Ricoh RDC-300Z) โดยปกติจะอยู่ถัดจาก IFD1 ภาพขนาดย่อมี 3 รูปแบบ; รูปแบบ JPEG (JPEG ใช้ YCbCr), รูปแบบ RGB TIFF, รูปแบบ YCbCr TIFF
ภาพขนาดย่อของรูปแบบ JPEG
หากค่าของ Compression(0x0103) Tag ใน IFD1 คือ ‘6’ รูปแบบภาพขนาดย่อจะเป็น JPEG รูปภาพ Exif ส่วนใหญ่ใช้รูปแบบ JPEG สำหรับภาพขนาดย่อ ในกรณีนั้น คุณสามารถชดเชยภาพขนาดย่อด้วยแท็ก JpegIFOffset(0x0201) ใน IFD1 ขนาดของภาพขนาดย่อด้วยแท็ก JpegIFByteCount(0x0202) รูปแบบข้อมูลเป็นรูปแบบ JPEG ธรรมดา เริ่มต้นจาก 0xFFD8 และสิ้นสุดด้วย 0xFFD9 ดูเหมือนว่ารูปแบบภาพขนาดย่อที่แนะนำคือรูปแบบ JPEG และขนาด 160x120 พิกเซลสำหรับ Exif2.1 หรือใหม่กว่า
ภาพขนาดย่อของรูปแบบ TIFF
หากค่าของแท็ก Compression(0x0103) ใน IFD1 คือ ‘1’ รูปแบบภาพขนาดย่อจะไม่มีการบีบอัด (เรียกว่าภาพ TIFF) จุดเริ่มต้นของข้อมูลภาพขนาดย่อคือแท็ก StripOffset(0x0111) ขนาดของภาพขนาดย่อคือผลรวมของแท็กStripByteCounts(0x0117)