Einbetten von IPTC-Bilddaten mit PHP GD
Frage
Ich versuche, IPTC-Daten mit in ein JPEG-Bild einzubetten iptcembed()
aber ich habe ein bisschen Probleme.
Ich habe überprüft, dass es im Endprodukt enthalten ist:
// Embed the IPTC data
$content = iptcembed($data, $path);
// Verify IPTC data is in the end image
$iptc = iptcparse($content);
var_dump($iptc);
Gibt die eingegebenen Tags zurück.
Wenn ich das Bild jedoch speichere und neu lade, sind die Tags nicht vorhanden:
// Save the edited image
$im = imagecreatefromstring($content);
imagejpeg($im, 'phplogo-edited.jpg');
imagedestroy($im);
// Get data from the saved image
$image = getimagesize('./phplogo-edited.jpg');
// If APP13/IPTC data exists output it
if(isset($image['APP13']))
{
$iptc = iptcparse($image['APP13']);
print_r($iptc);
}
else
{
// Otherwise tell us what the image *does* contain
// SO: This is what's happening
print_r($image);
}
Warum sind die Tags nicht im gespeicherten Bild?
Die PHP-Quelle ist hier erhältlich, und die entsprechenden Ausgaben sind:
Lösung
getimagesize
verfügt über einen optionalen zweiten Parameter Imageinfo
welches die von Ihnen benötigten Informationen enthält.
Aus dem Handbuch:
Mit diesem optionalen Parameter können Sie einige erweiterte Informationen aus der Bilddatei extrahieren.Derzeit werden dadurch die verschiedenen JPG-APP-Markierungen als assoziatives Array zurückgegeben.Einige Programme nutzen diese APP-Marker, um Textinformationen in Bilder einzubetten.Eine sehr häufige Methode ist die Einbettung von IPTC-Informationen in den APP13-Marker.Du kannst den ... benutzen
iptcparse()
Funktion zum Parsen des binären APP13-Markers in etwas Lesbares.
Sie könnten es also so verwenden:
<?php
$size = getimagesize('./phplogo-edited.jpg', $info);
if(isset($info['APP13']))
{
$iptc = iptcparse($info['APP13']);
var_dump($iptc);
}
?>
Hoffe das hilft...