ข้อมูล EXIF ถูกเก็บไว้ที่ไหนในภาพ? (JPEG, PNG, HEIC)
EXIF อาศัยอยู่ที่ไหนภายในไฟล์ภาพจริงๆ? APP1 header, IFD tree, byte offset และวิธีที่ JPEG, HEIC, PNG, TIFF และ WebP แต่ละตัวเก็บมัน
คำตอบเร็ว: EXIF ถูกเก็บไว้ภายในไฟล์ภาพเอง ไม่ใช่ในไฟล์ sidecar แยกต่างหาก ใน JPEG มันอาศัยอยู่ใน APP1 marker segment ซึ่งเป็นบล็อก header ที่เริ่มต้นด้วยไบต์ 0xFFE1 ใกล้จุดเริ่มต้นของไฟล์ โดยมี tag จัดเรียงอยู่ภายในเป็น TIFF/IFD tree (IFD0, Exif sub-IFD และ GPS IFD) ใน HEIC tag เดียวกันอยู่ใน metadata box ของ container ส่วนใน PNG มันสามารถอยู่ใน eXIf chunk ได้ TIFF เก็บมันแบบ native เพราะข้อมูลถูกฝังไว้ มันจึงเดินทางไปกับภาพทุกครั้งที่คุณคัดลอกหรือส่งมัน วางภาพใดก็ได้ลงใน EXIF Viewer ของเราเพื่อดูว่ามีอะไรอยู่ในนั้น ไม่มีการอัปโหลด
ผู้คนมักคิดว่าข้อมูลเมตาอาศัยอยู่ในฐานข้อมูลที่ซ่อนอยู่บนโทรศัพท์ของพวกเขา หรือในไฟล์เล็กๆ ข้างภาพ แต่มันไม่ใช่ "เมื่อไหร่, ที่ไหน และอย่างไร" ถูกเขียนลงในไบต์ของไฟล์ภาพโดยตรง ในพื้นที่ที่จองไว้ใกล้ส่วนหน้า คู่มือนี้อธิบายว่าพื้นที่นั้นอยู่ ที่ไหน และเกิดอะไรขึ้นเมื่อคุณแก้ไขหรือแชร์ภาพ
เวอร์ชันสั้น: มันอยู่ในไฟล์ ใกล้ด้านบน
เปิด JPEG ใดก็ได้ที่ออกมาจากกล้องโดยตรงและดูที่ไม่กี่ร้อยไบต์แรก หลังจาก start-of-image marker (0xFFD8) หนึ่งในสิ่งแรกที่คุณเจอคือ APP1 marker segment ซึ่งเก็บบล็อก EXIF ทั้งหมด พิกเซลที่ถูกบีบอัดมา หลังจาก มัน ดังนั้น JPEG จากกล้องทั่วไปจะเป็น: 0xFFD8 start marker, 0xFFE1 APP1 marker ที่เก็บ EXIF, header ที่เลือกได้ (APP2 ICC profile, APP13 IPTC, XMP), ข้อมูลพิกเซล แล้วจึง 0xFFD9 end marker เพราะ EXIF อยู่ใน header ใกล้ด้านบน แยกจากพิกเซล การแก้ไข EXIF ที่สะอาดจึงไม่บีบอัดภาพใหม่ เครื่องมือเพียงเขียนพื้นที่ header ใหม่เท่านั้น
IFD tree: IFD0, Exif sub-IFD, GPS IFD
APP1 segment เปิดด้วย 0xFFE1, ความยาวสองไบต์ และตัวระบุ Exif\0\0 ทันทีหลังจากนั้น payload เริ่มต้นด้วย TIFF header เล็กๆ: EXIF ภายในแล้วคือไฟล์ TIFF ขนาดเล็กที่ฝังอยู่ภายใน JPEG header นั้นประกาศ byte order (II little-endian หรือ MM big-endian) และ offset ไปยังไดเรกทอรีแรกของ tag
จากนั้น tag ถูกจัดระเบียบเป็น tree ของ IFD (Image File Directories) ไม่ใช่รายการแบนรายการเดียว แต่ละตัวมีหน้าที่:
- IFD0 (ไดเรกทอรี "ที่ 0" หรือ "TIFF"): ฟิลด์ระดับกล้องและภาพ เช่น Make, Model, Software, Orientation และ Copyright มันยังเก็บ pointer tag สองตัวที่นำไปยังไดเรกทอรีย่อยด้านล่าง
- Exif sub-IFD: ข้อมูลทางเทคนิคตอนถ่าย DateTimeOriginal, การตั้งค่าการรับแสง, เลนส์, ISO, color space
- GPS IFD: ละติจูด, ลองจิจูด, ระดับความสูง และ timestamp ที่ได้จาก GPS ปรากฏเฉพาะเมื่อมีการบันทึกตำแหน่ง
- IFD1 (ไดเรกทอรี "ที่ 1"): ภาพ thumbnail ที่ฝังอยู่ซึ่งกล้องสร้างขึ้น
ตัวอ่านเดินไปตาม tree: เริ่มที่ TIFF header, กระโดดไปที่ IFD0, ตาม Exif pointer สำหรับการตั้งค่าการถ่าย, ตาม GPS pointer สำหรับตำแหน่ง EXIF Viewer ของเราทำสิ่งนี้พอดีและวางแต่ละไดเรกทอรีไว้ในตารางของตัวเอง ส่วน การอ้างอิง tag EXIF คือพจนานุกรมฉบับเต็มของแต่ละฟิลด์ ค่าที่พอดีในสี่ไบต์อยู่ inline ใน tag entry ส่วนค่าที่ใหญ่กว่า เช่น พิกัด GPS ถูกเก็บไว้ที่อื่นใน segment โดย entry เก็บ byte offset ไปยังมัน
รูปแบบอื่นเก็บ tag เดียวกันอย่างไร
tag ของ EXIF ส่วนใหญ่เหมือนกันข้ามรูปแบบไฟล์ สิ่งที่แตกต่างคือ container ที่ tag ถูกใส่เข้าไป
- JPEG / JPG: APP1 marker segment ที่อธิบายไว้ข้างต้น
- TIFF: เก็บ EXIF แบบ native ไฟล์ TIFF คือ โครงสร้างของ IFD ดังนั้น EXIF จึงไม่ได้ถูกติดเพิ่มเข้าไป มันเป็นส่วนหนึ่งของรูปแบบฐาน EXIF ของ JPEG เป็นสำเนาที่ยืมมาจาก layout ของ TIFF นี้
- HEIC: ค่าเริ่มต้นของ iPhone ตั้งแต่ iOS 11 HEIF container ของมันถูกสร้างจาก "box" ที่ซ้อนกัน และ tag EXIF อาศัยอยู่ใน item-metadata box แทนที่จะเป็น marker แบบ JPEG tag เดียวกัน วางไว้คนละที่
- PNG: สามารถพก EXIF ใน
eXIfchunk เฉพาะได้ เครื่องมือที่ง่ายกว่าบางครั้งใช้tEXtหรือiTXttext chunk แทน PNG ที่ส่งออกสำหรับเว็บจำนวนมากไม่พกเลย - WebP: เก็บ EXIF ใน
EXIFchunk ภายใน RIFF container ของมัน
การอ้างอิง tag ครอบคลุม ข้อควรระวังในการแก้ไขเฉพาะรูปแบบ อย่างละเอียด
ทำไม "ฝังไว้" จึงสำคัญ: ข้อมูลเมตาเดินทางไปกับไฟล์
เพราะ EXIF อาศัยอยู่ภายในไฟล์ มันจึงตามภาพไปทุกที่ที่ไฟล์ไป คัดลอก JPEG ไปยัง USB stick, แนบไปกับอีเมล หรือวางในโฟลเดอร์ที่แชร์ และพิกัด GPS กับเวลาถ่ายจะตามมาด้วย นี่คือเหตุผลที่ข้อมูลเมตามีประโยชน์มากสำหรับหลักฐานและมีความเสี่ยงมากสำหรับความเป็นส่วนตัว: หลักฐานและการรั่วไหลถูกฝังไว้ในตัว
มันยังอธิบายว่าทำไมการลบ EXIF จึงไม่ใช่การลบบรรทัดเดียว tag ถูกถักทอเข้ากับโครงสร้าง header ของไฟล์ ดังนั้นการลบมันหมายถึง การเขียนไฟล์ใหม่ โดยไม่มีพื้นที่นั้น EXIF Remover ของเราทำสิ่งนี้ในเบราว์เซอร์ของคุณ
เกิดอะไรขึ้นเมื่อคุณแก้ไข, screenshot หรืออัปโหลด
เพราะ EXIF เป็นส่วนหนึ่งของไฟล์ สิ่งที่เหลือรอดขึ้นอยู่กับว่าไฟล์ถูก re-encode หรือไม่:
- คัดลอก, ย้าย, เปลี่ยนชื่อ: ไบต์ไม่เปลี่ยนแปลง ดังนั้น EXIF ถูกรักษาไว้
- ครอป, หมุน, แก้ไขเล็กน้อย: โปรแกรมแก้ไขส่วนใหญ่เก็บบล็อกไว้และเพียงอัปเดต tag ขนาดและ orientation บางตัวเขียนใหม่ ตรวจสอบหลังจากนั้นด้วย ตัวอ่าน
- screenshot: screenshot คือภาพใหม่เอี่ยมที่มี EXIF ขั้นต่ำของตัวเองและไม่มีข้อมูลกล้องหรือ GPS ของต้นฉบับเลย มันเทียบเท่ากับการล้างข้อมูลเมตา
- อัปโหลดไปยังแพลตฟอร์มโซเชียล: Instagram, Facebook, X และ WhatsApp ลบ EXIF เมื่ออัปโหลดโดยการ re-encode เครื่องมือแชร์ไฟล์อย่างอีเมล, Dropbox และ AirDrop เก็บมันไว้
สำหรับภาพรวมที่ใหญ่ขึ้นว่า EXIF บันทึกอะไรและทำไมผู้คนตรวจสอบมัน ดู EXIF data คืออะไร
คำถามที่พบบ่อย
EXIF ถูกเก็บในไฟล์แยกต่างหากข้างภาพหรือไม่? ไม่ มันถูกฝังอยู่ภายในไฟล์ภาพเอง (workflow RAW ระดับมืออาชีพบางอย่างใช้ .xmp sidecar แต่ EXIF มาตรฐานใน JPEG, HEIC, PNG หรือ TIFF อาศัยอยู่ภายในภาพ)
ความแตกต่างระหว่างบล็อก APP1 กับ IFD คืออะไร? APP1 คือช่องของ JPEG ที่เก็บ EXIF ส่วน IFD (IFD0, Exif sub-IFD, GPS IFD) คือ tree ไดเรกทอรี ภายใน ช่องนั้น
สรุป
EXIF ไม่ได้ถูกเก็บไว้ในฐานข้อมูลแอปที่ซ่อนอยู่หรือไฟล์ sidecar มันถูกฝังอยู่ในภาพ: ใน JPEG นั่นหมายถึง APP1 marker segment ใกล้ด้านบน จัดโครงสร้างเป็น TIFF/IFD tree (IFD0, Exif sub-IFD, GPS IFD) HEIC, PNG, WebP และ TIFF เก็บ tag เดียวกันใน container ของตัวเอง เพราะมันถูกฝังไว้ในตัว ข้อมูลเมตาจึงเดินทางไปกับทุกสำเนา
หากต้องการดูว่าข้อมูลเมตาของภาพคุณอาศัยอยู่ที่ไหน: EXIF Viewer หากต้องการลบมันก่อนแชร์: EXIF Remover สำหรับความหมายของทุก tag: การอ้างอิง tag EXIF ทั้งหมดในเบราว์เซอร์ของคุณ ไม่มีการอัปโหลด
ลองใช้เครื่องมือ
ประทับเวลาบนรูปได้ทันทีในเบราว์เซอร์ หรือติดตั้งแอป iOS เพื่อถ่ายภาพสดพร้อม GPS และเวลาจากนาฬิกาอะตอม