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:

  1. Bildausgabe
  2. Datenausgabe
War es hilfreich?

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...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top