Я пытаюсь встроить данные IPTC в изображение JPEG, 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
который содержит необходимую информацию.
Из руководства:
Этот необязательный параметр позволяет извлечь некоторую расширенную информацию из файла изображения. В настоящее время это вернет различные маркеры JPG APP в виде ассоциативного массива. Некоторые программы используют эти маркеры APP для встраивания текстовой информации в изображения. Очень распространенным является встраивание информации IPTC в маркер APP13. Вы можете использовать
iptcparse()
функцию для разбора двоичного маркера APP13 на что-то читаемое.
так что вы можете использовать это так:
<?php
$size = getimagesize('./phplogo-edited.jpg', $info);
if(isset($info['APP13']))
{
$iptc = iptcparse($info['APP13']);
var_dump($iptc);
}
?>
Надеюсь это поможет...