Question

J'essaie d'intégrer des données IPTC sur une image JPEG en utilisant iptcembed() mais j'ai un peu de mal.

J'ai vérifié qu'il est dans le produit final :

// Embed the IPTC data
$content = iptcembed($data, $path);

// Verify IPTC data is in the end image
$iptc = iptcparse($content);
var_dump($iptc);

Ce qui renvoie les balises saisies.

Cependant lorsque j'enregistre et recharge l'image, les balises sont inexistantes :

// 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);
}

Alors pourquoi les balises ne figurent-elles pas dans l’image enregistrée ?

La source PHP est disponible ici, et les sorties respectives sont :

  1. Sortie d'image
  2. Sortie de données
Était-ce utile?

La solution

getimagesize a un deuxième paramètre facultatif Imageinfo qui contient les informations dont vous avez besoin.

Extrait du manuel :

Ce paramètre facultatif vous permet d'extraire des informations étendues du fichier image.Actuellement, cela renverra les différents marqueurs JPG APP sous forme de tableau associatif.Certains programmes utilisent ces marqueurs APP pour intégrer des informations textuelles dans les images.Une méthode très courante consiste à intégrer des informations » IPTC dans le marqueur APP13.Vous pouvez utiliser le iptcparse() fonction pour analyser le marqueur binaire APP13 en quelque chose de lisible.

donc vous pouvez l'utiliser comme ceci :

<?php
$size = getimagesize('./phplogo-edited.jpg', $info);
if(isset($info['APP13']))
{
    $iptc = iptcparse($info['APP13']);
    var_dump($iptc);
}
?>

J'espère que cela t'aides...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top