Я пытаюсь вставить данные 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, и соответствующие результаты:
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); } ?>
Надеюсь это поможет…