Внедрение данных изображения IPTC с помощью PHP GD

Я пытаюсь вставить данные IPTC в изображение JPEG с помощью iptcembed() но у iptcembed() проблемы.

Я подтвердил, что это в конечном продукте:

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

Который возвращает введенные теги.

Однако, когда я сохраняю и перезагружаю изображение, теги не существуют:

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

Итак, почему не теги в сохраненном изображении?

Здесь доступен источник PHP, и соответствующие результаты:

  1. Выход изображения
  2. Выход данных

getimagesize имеет необязательный второй параметр Imageinfo который содержит необходимую вам информацию.

Из руководства:

Этот необязательный параметр позволяет вам извлечь некоторую расширенную информацию из файла изображения. В настоящее время это вернет различные маркеры APP JPG как ассоциативный массив. Некоторые программы используют эти маркеры APP для вставки текстовой информации в изображения. Очень распространенная информация заключается в встраивании информации IPTC в маркер APP13. Вы можете использовать iptcparse() для анализа двоичного маркера APP13 во что-то читаемое.

поэтому вы можете использовать его так:

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

Надеюсь это поможет…