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:

  1. Uscita dell'immagine
  2. Uscita dati
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top