Exif & IPTC


1. Exif

Spezifikation

Version 2.2: http://www.exif.org/Exif2-2.PDF
Version 2.3: http://www.cipa.jp/english/hyoujunka/kikaku/pdf/DC-008-2010_E.pdf und als Tabelle

2. IPTC

Spezifikation

IPTC - NAA INFORMATION INTERCHANGE MODEL, Version No. 4, Rev 1 July 1999

Unterstützung anderer Zeichensätze

IPTC-Daten können unter Verwendung einer abweichenden Zeichensatztabelle (Codepage) erstellt worden sein. In der Praxis wird häufig der jeweiligen System-Zeichensatz verwendet, d. h. auf Macintosh-Systemen MacRoman und - insbesondere in West-Europa - unter Windows ISO-8859-1 oder CP1252 (beide sind sich sehr ähnlich). Im Bestreben nach Vereinheitlichung wurde um 2005 beschlossen, nach Möglichkeit nur einen eindeutigen Zeichensatz zu verwenden: UTF-8, die am weitesten verbreitete Kodierung für Unicode-Zeichen.

Zeichensatztabellen werden üblicherweise durch sog. Escape-Sequenzen kodiert, wobei z.T. unterschiedliche Escapesequenzen für ein und die selbe Zeichensatztabelle gebräuchlich sind (z.B. für ISO-8859-15 sowohl 20h, 2Ch, 62h als auch 20h, 2Dh, 62).
Die Escapesequenz, die UTF-8 identifiziert, ist ESC%G, d. h.: 20h, 25h, 47h oder dezimal 27, 37, 71 oder als Klartext Chr(27) & "%G".

Ab Version V 3.50 beta 16 führt FF ein automatisches Codepage-Mapping durch, d.h. der Zeichensatz eines Bildes wird so gewandelt, dass (im Idealfall) auf dem Zielsystem eine fehlerfreie Darstellung erfolgt.

Bis Version V 3.50 beta 15 musst man sich programmtechnsich um das Thema kümmern:
Um eine fehlerfreie Darstellung insbesondere von Sonderzeichen (Umlaute etc.) zu gewährleisten, kann mit dem Befehl FF_MapCodePage ein Mapping auf die Darstellung gemäß der auf dem Zielsystem verfügbaren Zeichensatztabelle erfolgen. Dabei verwendet der Befehl für die Bezeichnung der Codepage die Code Page Identifiers von Microsoft (z.B. für UTF-8 ist das 65001). Dies setzt indes grundsätzlich voraus, dass in den IPTC-Daten selbst hinterlegt ist, welche Zeichensatztabelle verwendet wurde. Diese Information kann mit FF_GetIPTC("Characterset") ausgelesen werden.

VBScript
' Der Inhalt des IPTC-Feldes "Caption/Abstract" (Beschreibung) wird entsprechend der Codepage
' des Zielsystems gemappt. Dabei werden die gebräuchlichsten Codepages berücksichtigt.

FF_LoadIPTC "testbild. jpg"
 
Beschreibung = FF_GetIPTC("Caption/Abstract")
 
Codepage = ""
Escape = FF_GetIPTC("Characterset")             ' Codepage auslesen
if Len(Escape) <> 0 then                        ' es stehen Codepage-Informationen zur Verfügung
    Escape = Right(Escape, 2)                   ' Escape-Zeichen abschneiden
    Select Case Escape
        Case HxAnsi(25) & HxAnsi(73)            ' MacRoman
            Codepage = 10000
        Case HxAnsi(25) & HxAnsi(47)            ' UTF-8
            Codepage = 65001
        Case HxAnsi(28) & HxAnsi(42)            ' US-ASCII
            Codepage = 20127
        Case HxAnsi("2C") & HxAnsi(41)          ' ISO-8859-1
            Codepage = 28591
        Case HxAnsi("2D") & HxAnsi(41)
            Codepage = 28591
        Case HxAnsi("2E") & HxAnsi(41)
            Codepage = 28591
        Case HxAnsi("2F") & HxAnsi(41)
            Codepage = 28591
        Case HxAnsi("2C") & HxAnsi(62)          ' ISO-8859-15
            Codepage = 28605
        Case HxAnsi("2D") & HxAnsi(62)
            Codepage = 28605
        Case HxAnsi("2E") & HxAnsi(62)
            Codepage = 28605
        Case HxAnsi("2F") & HxAnsi(62)
            Codepage = 28605
    End Select
end if
 
if Codepage <> "" then                          ' Mapping
    Beschreibung = FF_MapCodePage(Beschreibung, Codepage, 0)
end if
 
' ** wandelt Hez-Zahl in das korrespondiernede ANSI-Zeichen
Function HxAnsi (strHex)
    HxAnsi = Chr(CLng("&H" & strHex))
End Function

Für das Schreiben und Lesen von IPTC-Tags mit Codepage-Mapping gilt allgemein:
' Schreiben
FF_SetIPTC(Tag, FF_MapCodePage(Text, 0, Codepage))
' Lesen
Text = FF_MapCodePage(FF_GetIPTC(Tag), Codepage, 0)

3. Weiterführende Informationen

Dokument der Meta Data Working Group über die verschiedenen Standards (PDF)