Dữ liệu EXIF được lưu ở đâu trong một bức ảnh? (JPEG, PNG, HEIC)
EXIF thực sự nằm ở đâu bên trong một tệp ảnh? Tiêu đề APP1, cây IFD, các byte offset, và cách JPEG, HEIC, PNG, TIFF và WebP lưu trữ nó.
Câu trả lời nhanh: EXIF được lưu bên trong chính tệp ảnh, không phải trong một tệp sidecar riêng. Trong một tệp JPEG, nó nằm trong đoạn marker APP1, một khối tiêu đề bắt đầu bằng các byte 0xFFE1 gần đầu tệp, với các thẻ được sắp xếp bên trong dưới dạng cây TIFF/IFD (IFD0, một Exif sub-IFD, và một GPS IFD). Trong HEIC, cùng các thẻ đó nằm trong các hộp siêu dữ liệu của container; trong PNG, chúng có thể nằm trong một chunk eXIf; TIFF lưu chúng một cách tự nhiên. Vì dữ liệu được nhúng, nó đi cùng bức ảnh mỗi khi bạn sao chép hay gửi nó. Thả bất kỳ ảnh nào vào Trình xem EXIF của chúng tôi để xem có gì bên trong; không có gì được tải lên.
Mọi người thường cho rằng siêu dữ liệu nằm trong một cơ sở dữ liệu ẩn trên điện thoại của họ, hoặc trong một tệp nhỏ nằm cạnh ảnh. Không phải vậy. Phần "khi nào, ở đâu, và như thế nào" được ghi thẳng vào các byte của tệp ảnh, trong một vùng dành riêng gần phía trước. Hướng dẫn này giải thích vùng đó nằm ở đâu và điều gì xảy ra khi bạn chỉnh sửa hay chia sẻ bức ảnh.
Phiên bản ngắn gọn: nó nằm trong tệp, gần phần đầu
Mở bất kỳ tệp JPEG nào chụp thẳng từ máy ảnh và nhìn vào vài trăm byte đầu tiên. Sau marker bắt đầu ảnh (0xFFD8), một trong những thứ đầu tiên bạn gặp là đoạn marker APP1, nơi giữ toàn bộ khối EXIF. Các pixel đã nén đến sau nó. Vậy một tệp JPEG máy ảnh điển hình diễn ra như sau: marker bắt đầu 0xFFD8, marker APP1 0xFFE1 giữ EXIF, các tiêu đề tùy chọn (hồ sơ ICC APP2, IPTC APP13, XMP), dữ liệu pixel, rồi marker kết thúc 0xFFD9. Vì EXIF nằm trong một tiêu đề gần phía trên, tách biệt khỏi các pixel, một lần chỉnh sửa EXIF sạch sẽ không nén lại hình ảnh; công cụ chỉ ghi lại vùng tiêu đề.
Cây IFD: IFD0, Exif sub-IFD, GPS IFD
Đoạn APP1 mở đầu bằng 0xFFE1, một độ dài hai byte, và định danh Exif\0\0. Ngay sau đó, phần dữ liệu bắt đầu bằng một tiêu đề TIFF nhỏ: EXIF, về bản chất bên trong, là một tệp TIFF nhỏ được nhúng bên trong tệp JPEG. Tiêu đề đó khai báo thứ tự byte (II little-endian hoặc MM big-endian) và một offset đến thư mục thẻ đầu tiên.
Từ đó, các thẻ được tổ chức thành một cây các IFD (Image File Directory), không phải một danh sách phẳng duy nhất. Mỗi cái có một nhiệm vụ:
- IFD0 (thư mục "thứ 0" hay "TIFF"): các trường ở cấp máy ảnh và hình ảnh như Make, Model, Software, Orientation và Copyright. Nó cũng giữ hai thẻ con trỏ dẫn đến các thư mục con bên dưới.
- Exif sub-IFD: dữ liệu kỹ thuật tại thời điểm chụp. DateTimeOriginal, các cài đặt phơi sáng, ống kính, ISO, không gian màu.
- GPS IFD: vĩ độ, kinh độ, độ cao, và các dấu thời gian lấy từ GPS, chỉ hiện diện khi một vị trí được ghi lại.
- IFD1 (thư mục "thứ 1"): một ảnh thu nhỏ được nhúng mà máy ảnh đã tạo ra.
Một trình đọc duyệt qua cây này: bắt đầu từ tiêu đề TIFF, nhảy đến IFD0, theo con trỏ Exif để lấy các cài đặt chụp, theo con trỏ GPS để lấy vị trí. Trình xem EXIF của chúng tôi làm đúng điều này và trình bày mỗi thư mục trong bảng riêng của nó; tham khảo thẻ EXIF là từ điển đầy đủ của từng trường. Các giá trị vừa với bốn byte nằm ngay trong mục thẻ; các giá trị lớn hơn, như một tọa độ GPS, được lưu ở nơi khác trong đoạn, với mục thẻ giữ một byte offset trỏ đến chúng.
Cách các định dạng khác lưu cùng các thẻ đó
Các thẻ EXIF phần lớn giống nhau giữa các định dạng. Điều khác biệt là container mà các thẻ được nhét vào.
- JPEG / JPG: đoạn marker APP1 đã mô tả ở trên.
- TIFF: lưu EXIF một cách tự nhiên. Một tệp TIFF chính là một cấu trúc các IFD, nên EXIF không bị gắn thêm vào, nó là một phần của định dạng nền. EXIF của JPEG là một bản sao mượn từ bố cục TIFF này.
- HEIC: mặc định của iPhone từ iOS 11. Container HEIF của nó được xây từ các "hộp" lồng nhau, và các thẻ EXIF nằm trong một hộp siêu dữ liệu của item thay vì một marker kiểu JPEG. Cùng các thẻ, sắp xếp khác.
- PNG: có thể mang EXIF trong một chunk
eXIfchuyên dụng; các công cụ đơn giản hơn đôi khi dùng các chunk văn bảntEXthoặciTXtthay vào đó. Nhiều tệp PNG xuất ra cho web hoàn toàn không mang gì. - WebP: lưu EXIF trong một chunk
EXIFbên trong container RIFF của nó.
Tham khảo thẻ bao quát chi tiết các lưu ý chỉnh sửa theo từng định dạng.
Vì sao "được nhúng" lại quan trọng: siêu dữ liệu đi theo tệp
Vì EXIF nằm bên trong tệp, nó đi theo bức ảnh đến mọi nơi tệp đi. Sao chép tệp JPEG vào một USB, đính kèm vào email, hay thả vào một thư mục được chia sẻ, và tọa độ GPS cùng thời điểm chụp sẽ đi cùng. Đây chính là lý do siêu dữ liệu vừa rất hữu ích làm bằng chứng vừa rất rủi ro cho quyền riêng tư: bằng chứng, và sự rò rỉ, đều được nướng sẵn vào trong.
Nó cũng giải thích vì sao xóa EXIF không phải là một lệnh xóa một dòng. Các thẻ được dệt vào cấu trúc tiêu đề của tệp, nên xóa chúng nghĩa là ghi lại tệp mà không có vùng đó. Trình xóa EXIF của chúng tôi làm điều này trong trình duyệt của bạn.
Điều gì xảy ra khi bạn chỉnh sửa, chụp màn hình, hay tải lên
Vì EXIF là một phần của tệp, những gì sống sót phụ thuộc vào việc tệp có được mã hóa lại hay không:
- Sao chép, di chuyển, đổi tên: các byte không đổi, nên EXIF được giữ lại.
- Cắt, xoay, chỉnh sửa nhẹ: hầu hết trình chỉnh sửa giữ khối và chỉ cập nhật các thẻ kích thước và hướng. Một số ghi lại nó; hãy kiểm tra sau bằng trình xem.
- Chụp màn hình: một ảnh chụp màn hình là một hình ảnh hoàn toàn mới với EXIF tối thiểu của riêng nó và không có dữ liệu máy ảnh hay GPS nào của bản gốc. Về cơ bản nó là một lần xóa siêu dữ liệu.
- Tải lên các nền tảng mạng xã hội: Instagram, Facebook, X và WhatsApp xóa EXIF khi tải lên bằng cách mã hóa lại. Các công cụ chia sẻ tệp như email, Dropbox và AirDrop giữ lại nó.
Để có bức tranh lớn hơn về những gì EXIF ghi lại và vì sao mọi người kiểm tra nó, xem dữ liệu EXIF là gì.
Câu hỏi thường gặp
EXIF có được lưu trong một tệp riêng cạnh ảnh không? Không, nó được nhúng bên trong chính tệp ảnh. (Một số quy trình RAW chuyên nghiệp dùng tệp sidecar .xmp, nhưng EXIF tiêu chuẩn trong một tệp JPEG, HEIC, PNG hoặc TIFF nằm bên trong hình ảnh.)
Sự khác biệt giữa khối APP1 và các IFD là gì? APP1 là khe của JPEG giữ EXIF. Các IFD (IFD0, Exif sub-IFD, GPS IFD) là cây thư mục bên trong khe đó.
Tóm lại
EXIF không được giữ trong một cơ sở dữ liệu ứng dụng ẩn hay một tệp sidecar. Nó được nhúng trong hình ảnh: trong một tệp JPEG, điều đó nghĩa là đoạn marker APP1 gần phía trên, được cấu trúc thành một cây TIFF/IFD (IFD0, Exif sub-IFD, GPS IFD). HEIC, PNG, WebP và TIFF lưu cùng các thẻ đó trong các container của riêng chúng. Vì nó được nướng sẵn vào trong, siêu dữ liệu đi theo mọi bản sao.
Để xem siêu dữ liệu của bức ảnh nằm ở đâu: Trình xem EXIF. Để xóa nó trước khi chia sẻ: Trình xóa EXIF. Để biết ý nghĩa của từng thẻ: tham khảo thẻ EXIF. Tất cả đều trong trình duyệt của bạn, không có gì được tải lên.
Thử các công cụ
Đóng dấu một tấm ảnh ngay trong trình duyệt, hoặc cài app iOS để chụp trực tiếp với GPS và thời gian nguyên tử.