Incorporamento di dati di immagine IPTC con PHP GD
Domanda
Sto cercando di incorporare dati IPTC in un'immagine JPEG utilizzando iptcembed()
ma ho un po' di problemi.
Ho verificato che sia nel prodotto finale:
// Embed the IPTC data
$content = iptcembed($data, $path);
// Verify IPTC data is in the end image
$iptc = iptcparse($content);
var_dump($iptc);
Che restituisce i tag inseriti.
Tuttavia quando salvo e ricarico l'immagine i tag sono inesistenti:
// 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);
}
Allora perché non ci sono i tag nell'immagine salvata?
La fonte PHP è disponibile qui, e i rispettivi output sono:
Soluzione
getimagesize
ha un secondo parametro facoltativo Imageinfo
che contiene le informazioni di cui hai bisogno.
Dal manuale:
Questo parametro facoltativo consente di estrarre alcune informazioni estese dal file immagine.Attualmente, ciò restituirà i diversi marcatori JPG APP come array associativo.Alcuni programmi utilizzano questi marcatori APP per incorporare informazioni di testo nelle immagini.Uno molto comune è incorporare » informazioni IPTC nel marcatore APP13.Puoi usare il
iptcparse()
funzione per analizzare il marcatore binario APP13 in qualcosa di leggibile.
quindi potresti usarlo in questo modo:
<?php
$size = getimagesize('./phplogo-edited.jpg', $info);
if(isset($info['APP13']))
{
$iptc = iptcparse($info['APP13']);
var_dump($iptc);
}
?>
Spero che questo ti aiuti...