2012年9月3日 星期一

原來 IPTC、 IIF、 XMP、 EXIF 是... 認識 jpg 相片/圖檔的「中繼資料」 內嵌文字欄位機制

JPG 相片/圖片裡面的欄位分類: IPTC、 IIF、 XMP、 EXIF 之間的關係 相片/圖片檔 *.jpg 裡面, 其實內含了很多文字資訊, 例如相片的標題、 一段文字描述、 一組標籤、 ... 等等。 這些資訊稱為 「中繼資料」 (metadata)。 用 exiftool 命令 可以列出來。 或者用 geeqie 看圖軟體的 「檢視」 => 「exif window」 也可以查看。 這些文字資訊其實混合了 IIM (一般稱為 IPTC)、 XMP、 EXIF 等等多種標準; 裡面又有些某些欄位彼此重複。 到底這些簡寫之間有什關係? 重複的欄位有什麼作用?

IPTC 是新聞界的一個國際組織。 他們在 1990-1997 年之間製定了一個標準 IIM (Information Interchange Model), 裡面定義了相片(文件)的標題、 一段文字描述、 一組分類用的標籤、 攝影師(文件作者)、 著作權、 ... 等等許多 描述多媒體用的文字資訊 欄位。 原本是用來傳遞新聞相關資料用的; 後來因為被大家拿來描述相片而廣泛使用。 一般軟體手冊提到 「IPTC 某欄位」 時, 其實指的多半是這個舊版的 「IIM 某欄位」。 指令 exiftool -list -IPTC:All 可以列出 exiftool 所支援的 IIM 欄位清單。

隨著 XML 格式的興起, IPTC 與 Adobe 合作, 將 IIM 重新改用 XML 的格式呈現, 稱為 XMP (Extensible Metadata Platform)。 [ IIM/XMP 4.1 規格書] 指令 exiftool -list -XMP:All 可以列出 exiftool 所支援的 XMP 欄位清單。

另一方面, 日本電子工業發展協會在 1996-2002 年之間, 為了將文字資訊內嵌到數位相片裡面, 製定了一個標準 EXIF (Exchangeable image file format), 裡面包含相機廠牌/型號/儀器特性、 拍照當時相機的光圈 (ApertureValue)、 快門 (ShutterSpeedValue)、 閃光燈 (Flash)、 ... 等等技術資訊。 這些資訊多半是拍照當時相機自動產生的。 [ EXIF 2.1 與 2.2 規格書; 欄位清單] 指令 exiftool -list -EXIF:All 可以列出 exiftool 所支援的 EXIF 欄位清單。

因為 IPTC 設計 XMP 的目的, 就是要取代 舊的 IIM, 所以兩者的欄位之間有對應關係。 至於 EXIF 的欄位則偏向光學技術辭彙, 所以與前二者沒有太多交集。

一張 jpg 圖片裡面, 可能會同時出現以上三組資料。 超強工具箱 exiftool 可以幫你增/刪/查/改 jpg 圖檔裡面的 IIM、 XMP、 EXIF 以及其他許多組文字資料。 這意思就好像是說你在 SEVEN/家樂福的店裡面, 不只可以買到統一自家/家樂福自家的產品, 也可以買到其他供應商的商品一樣。 不過在 exiftool 的文件及輸入輸出當中, 都是用 「IPTC」 在稱呼 IIM。 事實上多數的軟體和文章都如此混用這兩個名字; 這也是為什麼我花了整個週末才弄懂這些簡稱之間的關係。 就好像: 星戰迷們談到 「星際大戰」 時, 可能指一系列的六部電影; 但也可能是指 (最早上演的) 第四集 「曙光乍現」; 但是非星戰迷們如果聽到 「曙光乍現」 (英文片名: a new hope) 可能完全不知道是什麼東東, 於是星戰迷們乾脆就用 「星際大戰」 這個名字來跟其他人溝通。

舊的 IIM 標準預設只支援 ascii 碼。 如果希望存進相片的中文資料被正確處理, 就必須 (1) 先確認相片內的中文資料是以 utf8 編碼儲存 (2) 把 Coded Character Set 欄位設定成 utf8: exiftool -codedcharacterset=utf8 elephant.jpg 從此以後任何軟體看到這張 elephant.jpg, 理論上都應該要以 utf8 編碼解釋其中的 IPTC 文字欄位。

新的 XMP 標準支援 utf8 萬國碼, 也就是說中文都沒問題。 其中某些欄位 (下表打 * 號者) 甚至支援 「同時儲存多國語言」 (不必是完全對等的翻譯)。 例如一張相片可以有中文版的 title-zh-TW、 英文版的 title-en、 西班牙文版的 title-es 三個標題。 常見檔案格式當中, 只有 tiff、 jpg、 png、 gif、 pdf 等等格式支援內嵌文字欄位。 所以 XMP 還定義了 sidecar (「邊車」) -- 一個外加的文字檔, 用來幫其他檔案格式 「運送」 圖片相關的文字資訊。

可惜並非所有軟體都支援新的 XMP 標準。 例如 相片網站架站軟體 zenphoto 與 piwigo 預設就只支援 IIM 的 "Keywords" (就是標籤/tag 啦) 而不支援 XMP 的 "Subject" 欄位。 (我找到 zenphoto 和 piwigo 的 XMP 教學文; 但沒試出來。 見下表連結。) 另一方面, 超強超好用、 跨作業平臺的單機版相片整理工具 digikam, 它對舊版 IIM 的 utf8 支援就不太行, 即使設定了 -codedcharacterset=utf8 還是會產生亂碼。 所以較好的相片處理流程可能是:

  1. 用 digikam 在本機處理, 速度快、 介面友善。
  2. 用 exiftool 把 "Subject" 欄位拷貝到 "Keywords" 欄位, 並且指定日後都以 utf8 編碼解讀這張/這些相片的資料: exiftool -Keywords'<'Subject -codedcharacterset=utf8 photos/
  3. 上傳至 zenphoto 或 piwigo 之後, 只做簡單的整理, 不再修改標籤。

下面兩個表格分別是幾套相片軟體對 IIM "Keywords" 與 XMP "Subject" 的支援, 以及 IIM 與 XMP 欄位對照簡單摘要。 後者摘錄自 IPTC Core XMP Schema。 其中黃色部分是相片整理者最有可能有興趣的三個欄位: 標題、 標籤、 一段文字描述。

IIM "Keywords" XMP "Subject"
geeqie 1.0 ok ok
digikam 2.8.0 中文變亂碼 ok
zenphoto 1.4.3 ok 啟動套件:
xmpMetadata
piwigo 2.4.3 ok 安裝並啟動套件:
Advanced Metadata
欄位用途 軟體顯示 IPTC 名稱 XMP 名稱 IIM 代號 IIM 名稱
城市 City City photoshop:
City
2:90 City
著作權 Copyright Notice CopyrightNotice dc:rights * 2:116 Copyright Notice
國家 Country Country photoshop:
Country
2:101 Country/Primary Location Name (64b)
國家代碼 ISO Country Code CountryCode Iptc4xmpCore:
CountryCode
2:100 Country/Primary Location Code
原作者 Creator Creator dc:creator * 2:80 By-line
原作者聯絡資訊 Creator's Contact info: CreatorContactInfo Iptc4xmpCore:
CreatorContactInfo
- -
原作者職稱 Creator's Jobtitle CreatorJobtitle photoshop:
AuthorsPosition
2:85 By-line Title
創作日期 Date Created DateCreated photoshop:
DateCreated
2:55 Date Created
詳細描述 Caption/ Description Description dc:description * 2:120 Caption/Abstract
詳細描述的撰寫人 Caption/ Description writer DescriptionWriter photoshop:
CaptionWriter
2:122 Writer/Editor
新聞頭條 Headline Headline photoshop:
Headline
2:105 Headline
操作指示 Instructions Instructions photoshop:
Instructions
2:40 Special Instruction
新聞類別 Intellectual genre IntellectualGenre Iptc4xmpCore:
IntellectualGenre
2:04 Object Attribute Reference
工作流程代號 Job Identifier JobID photoshop:
TransmissionReference
2:103 Original Transmission Reference (32b)
標籤 Keywords Keywords dc:subject 2:25 Keywords
地點 Location Location Iptc4xmpCore:
Location
2:92 Sublocation
提供者 Provider Provider photoshop:
Credit
2:110 Credit
州/省 Province/State Province-State photoshop:
State
2:95 Province/State
授權聲明 Rights Usage Terms RightsUsageTerms xmpRights:UsageTerms - -
場景 IPTC Scene Scene Iptc4xmpCore:
Scene
- -
來源 Source Source photoshop:
Source
2:115 Source
主題代碼 IPTC Subject Code SubjectCode Iptc4xmpCore:
SubjectCode
2:12 Subject Reference
標題 Title Title dc:title * 2:05 舊 Object Name (64b)

4 則留言:

  1. 請問我已經用exiftool -codedcharacterset=utf8轉換IPTC成 UTF8格式,但是我在piwigo上傳檔案後,相片描述是亂碼.請問有否解決方案.
    謝謝

    回覆刪除
    回覆
    1. 可否貼幾張失敗的相片讓大家實驗看看? (這裡無法貼圖; 請留網址)

      刪除
  2. 原始圖檔: http://tomwang.com/download/NOR_1005.jpg
    上傳進piwigo後描述變成亂碼,路徑在 http://tomwang.com/photos/piwigo/picture.php?/52/category/1
    我原來相片有寫註解在,IPTC Description欄位,用exiftool -codedcharacterset=utf8轉換後上傳.

    謝謝

    回覆刪除
  3. 哦, 原始圖檔的 Caption-Abstract 欄位裡面的中文是 big5 編碼耶。 至於上傳以後的圖片裡面, 那個欄位就不見了。 不太確定上傳時發生什麼事 (現在已沒在玩 piwigo, 沒力測試這部分, 抱歉 orz) 猜想是 piwigo 誤把 big5 的字串當成是 utf8 解釋, 然後把它貼到 html 裡面去。

    建議在 設定成 utf8 的終端機 底下執行 exiftool -codedcharacterset=utf8 -Caption-Abstract="登上螺旋槳小飛機..." NOR_1005.jpg 然後重新上傳一次看看。

    感謝啊! 我原來的講義沒寫清楚, 已更正。

    回覆刪除