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:

  1. Salida de imagen
  2. Salida de datos
¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top