Сведения о вопросе

Математик

02:49, 3rd August, 2020

Теги

php   gd   iptc    

Внедрение данных изображения IPTC с PHP GD

Просмотров: 408   Ответов: 1

Я пытаюсь встроить данные 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 доступен здесь, и соответствующие выходы:

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



  Сведения об ответе

pumpa

03:25, 28th August, 2020

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

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

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

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

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

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться