Datenfluss von Darktable 4.2.1 nach WordPress 6.2 reparieren
Das Problem
Ich habe begonnen, die Webseite FOTODRACHEN.de von statischem HTML auf ein modernes Content-Management-System (CMS) umzustellen. Ich arbeite mich gerade in die Bedienung von WordPress ein.
Ich möchte viele Bilder zeigen, daher wäre es eine Erleichterung, wenn die im Bildverarbeitungsprogramm Darktable bereits vorhandenen Metadaten nach WordPress übernommen würden, damit ich sie nicht für jedes Bild neu eintippen muss. Meine Tests zeigen, dass dies nur eingeschränkt der Fall ist.
Die Analyse
In den Metadaten von Darktable kann man zu einem Bild u.a. folgende Texte erfassen:
- Titel
- Beschreibung
- Notizen
Im Export-Modul unter „Einstellungen“ kann über die Optionen ..
- EXIF Daten
- Metadaten
.. ausgewählt werden, dass die erfassten Texte mit in die exportierte Datei (meist JPEG) geschrieben werden.
Die Option „Metadaten“ schreibt in die Metadaten-Gruppe „Xmp“ und die Option „EXIF Daten“ schreibt natürlich in die Metadaten-Gruppe „EXIF„.
Die Metadaten-Gruppe „IPTC“ wird von Darktable nicht gefüllt.
WordPress wertet beim „neu hinzufügen“ von Medien, hier Bildern, nur die Gruppen „EXIF“ und „IPTC“ aus, aber nicht „Xmp“.
Gemeinsam zwischen Darktable und WordPress ist also nur die Gruppe „EXIF“.
Die Felder „Titel“ und „Notizen“ werden von Darktable nicht in die EXIF-Gruppe exportiert, nur das Feld „Beschreibung“ (description).
Dies ist also das einzige gemeinsame Feld, welches für den Transport von Bildunterschriften (Caption) verwendet werden kann.
Wenn das Feld „Beschreibung“ ausschließlich ASCII-Zeichen enthält, dann wird es in das Feld „EXIF ImageDescription“ exportiert.
Wenn aber besondere Zeichen enthalten sind, wie z.B. deutsche Umlaute (äüöÄÜÖß), dann wird statt dessen das Feld „EXIF UserComment“ verwendet, welches alle Unicode-Zeichen (UTF-8) enthalten darf. Bei anderen nationalen Zeichen dürfte das ähnlich sein, z.B. bei französischen Zeichen mit Akzent. Der Text landet also entweder in „ImageDescription“ ODER in „UserComment„, das jeweils andere Feld bleibt immer leer.
In dieser Konstellation wird „UserComment“, also Texte mit Umlauten, nicht nach WordPress 6.2 übernommen, obwohl es in der Dokumentation teilweise anders beschrieben ist.
Die Lösung
Im WordPress 6.2 im PHP-Programm „/wp-admin/includes/image.php“ befindet sich die Function „wp_read_image_metadata()„, die den Import der Metadaten regelt. Der Import von „UserComment“ befindet sich in einem if-Zweig der nur dann durchlaufen wird, wenn auch „ImageDescription“ nicht leer ist. Das ist bei Darktable-Exporten aber nie der Fall.
Folgende Korrektur ab Zeile 877 hat das Problem bei mir gelöst:
// }
} elseif ( empty( $meta['caption'] ) && ! empty( $exif['COMPUTED']['UserComment'] ) ) {
$meta['caption'] = trim( $exif['COMPUTED']['UserComment'] );
$description_length = strlen( $exif['COMPUTED']['UserComment'] );
if ( empty( $meta['title'] ) && $description_length < 80 ) {
$meta['title'] = trim( $exif['COMPUTED']['UserComment'] );
}
}
Wirkung: Der Inhalt von „EXIF UserComment“ aus dem importierten JPEG wird bei WordPress in die „Caption“ (Bildunterschrift) übernommen.
Fehler an WordPress-Entwickler gemeldet unter: https://core.trac.wordpress.org/ticket/58082#ticket
Auf den Tag genau nach einem Jahr ist die von mir vorgeschlagene Änderung nun in eine produktive WordPress-Version eingeflossen.
Bisher musste ich nach jedem Versions-Update den PHP-Quellcode manuell reparieren, damit die Beschreibung aus den Metadaten von DarkTable in die Bildunterschrift von WordPress übernommen wird.
Mit der heute freigegebenen WordPress Version 6.5 ist das erstmals nicht mehr notwendig.