Signatur
Beschreibung
iptcparse() analysiert einen binären IPTC/NAA-Datenblock (International Press Telecommunications Council) und gibt die darin enthaltenen Felder als assoziatives Array zurück. Die Funktion wird typischerweise zusammen mit getimagesize() eingesetzt, die im Rückgabe-Array unter dem Index 'APP13' den rohen IPTC-Block einer JPEG-Datei liefert.
Das zurückgegebene Array ist nach Record-Nummern und Datensatz-Nummern aufgeschlüsselt. Die Schlüssel haben das Format '2#XXX', wobei XXX die dreistellige Datensatznummer darstellt. Bekannte Felder sind z. B. 2#005 (Objektname/Titel), 2#025 (Stichwörter/Keywords) oder 2#120 (Bildunterschrift/Caption). Jeder Schlüssel verweist auf ein Array von Werten, da IPTC-Felder mehrfach vorkommen dürfen.
IPTC-Metadaten werden häufig von Nachrichtenagenturen, Fotografen und Bildredaktionen genutzt, um Bilder mit strukturierten Informationen (Autor, Quelle, Beschreibung, Copyright, Schlagwörter) zu versehen. Die Funktion ist nützlich, wenn diese Metadaten ausgelesen und z. B. in einer Datenbank gespeichert oder auf einer Website angezeigt werden sollen.
Zu beachten ist, dass die Funktion nur den IPTC-Block verarbeitet und nicht direkt eine Bilddatei liest. Den Block erhält man über getimagesize() mit aktiviertem imageinfo-Parameter.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $iptcblock Pflicht | string | Der binäre IPTC-Datenblock, wie er z. B. von getimagesize() im Array-Index 'APP13' zurückgegeben wird. |
Rückgabewert
'2#XXX' sind und dessen Werte jeweils Arrays mit den zugehörigen Daten enthalten. Im Fehlerfall oder bei einem leeren bzw. ungültigen Block wird false zurückgegeben.Beispiele
IPTC-Metadaten aus einer JPEG-Datei auslesen
<?php
$bildpfad = 'beispiel.jpg';
// getimagesize liefert im zweiten Parameter einen imageinfo-Array
$imageinfo = [];
getimagesize($bildpfad, $imageinfo);
if (isset($imageinfo['APP13'])) {
$iptc = iptcparse($imageinfo['APP13']);
if ($iptc !== false) {
// Titel / Objektname
$titel = $iptc['2#005'][0] ?? 'Kein Titel';
echo 'Titel: ' . htmlspecialchars($titel) . PHP_EOL;
// Keywords / Stichwörter (können mehrfach vorkommen)
if (!empty($iptc['2#025'])) {
echo 'Keywords: ' . htmlspecialchars(implode(', ', $iptc['2#025'])) . PHP_EOL;
}
// Bildunterschrift
$caption = $iptc['2#120'][0] ?? 'Keine Bildunterschrift';
echo 'Bildunterschrift: ' . htmlspecialchars($caption) . PHP_EOL;
// Copyright
$copyright = $iptc['2#116'][0] ?? 'Kein Copyright';
echo 'Copyright: ' . htmlspecialchars($copyright) . PHP_EOL;
} else {
echo 'Kein gültiger IPTC-Block gefunden.';
}
} else {
echo 'Keine APP13-Daten (IPTC) im Bild vorhanden.';
}
?>
Alle vorhandenen IPTC-Felder ausgeben
<?php
$bildpfad = 'foto.jpg';
$imageinfo = [];
getimagesize($bildpfad, $imageinfo);
if (isset($imageinfo['APP13'])) {
$iptc = iptcparse($imageinfo['APP13']);
if (is_array($iptc)) {
// Bekannte Feldnamen als Referenz
$feldnamen = [
'2#005' => 'Objektname',
'2#010' => 'Dringlichkeit',
'2#015' => 'Kategorie',
'2#025' => 'Keywords',
'2#040' => 'Spezielle Anweisungen',
'2#055' => 'Datum erstellt',
'2#080' => 'Autor',
'2#085' => 'Autortitel',
'2#090' => 'Stadt',
'2#095' => 'Bundesland',
'2#101' => 'Land',
'2#103' => 'Referenz',
'2#105' => 'Überschrift',
'2#110' => 'Quelle',
'2#116' => 'Copyright',
'2#120' => 'Bildunterschrift',
];
foreach ($iptc as $tag => $werte) {
$name = $feldnamen[$tag] ?? $tag;
echo $name . ': ' . htmlspecialchars(implode(' | ', $werte)) . PHP_EOL;
}
}
} else {
echo 'Keine IPTC-Daten vorhanden.';
}
?>
// Wichtig · Fallstricke
Zeichenkodierung: IPTC-Daten sind häufig in ISO-8859-1 kodiert, obwohl neuere Implementierungen UTF-8 verwenden. Bei der Ausgabe sollte die Kodierung geprüft und ggf. mit mb_convert_encoding() oder iconv() konvertiert werden, um Darstellungsprobleme zu vermeiden.
Sicherheit: Die aus IPTC-Metadaten ausgelesenen Werte sind externe Daten und sollten bei der Ausgabe im HTML-Kontext stets mit htmlspecialchars() maskiert werden, um XSS-Angriffe zu verhindern.
Verfügbarkeit: Die Funktion erfordert, dass PHP mit GD-Unterstützung oder zumindest mit der IPTC-Parsing-Fähigkeit kompiliert wurde. In den meisten Standard-PHP-Installationen ist sie ohne zusätzliche Erweiterung verfügbar.
IPTC vs. EXIF vs. XMP: iptcparse() liest nur IPTC-IIM-Daten (APP13). Für EXIF-Daten (Kamera-Parameter) steht exif_read_data() zur Verfügung. Moderne Software verwendet zunehmend XMP-Metadaten, die von dieser Funktion nicht verarbeitet werden.