Incrustar datos de imágenes IPTC con PHP GD
Pregunta
Estoy intentando incrustar datos IPTC en una imagen JPEG usando iptcembed()
pero estoy teniendo un poco de problema.
He verificado que está en el producto final:
// Embed the IPTC data
$content = iptcembed($data, $path);
// Verify IPTC data is in the end image
$iptc = iptcparse($content);
var_dump($iptc);
Que devuelve las etiquetas ingresadas.
Sin embargo, cuando guardo y vuelvo a cargar la imagen, las etiquetas no existen:
// 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);
}
Entonces, ¿por qué no aparecen las etiquetas en la imagen guardada?
La fuente PHP es disponible aquí, y las respectivas salidas son:
Solución
getimagesize
tiene un segundo parámetro opcional Imageinfo
que contiene la información que necesita.
Del manual:
Este parámetro opcional le permite extraer información ampliada del archivo de imagen.Actualmente, esto devolverá los diferentes marcadores de APP JPG como una matriz asociativa.Algunos programas utilizan estos marcadores de aplicaciones para incrustar información de texto en imágenes.Una muy común es incrustar » información IPTC en el marcador APP13.Puedes usar el
iptcparse()
función para analizar el marcador binario APP13 en algo legible.
entonces podrías usarlo así:
<?php
$size = getimagesize('./phplogo-edited.jpg', $info);
if(isset($info['APP13']))
{
$iptc = iptcparse($info['APP13']);
var_dump($iptc);
}
?>
Espero que esto ayude...