Iptcparse: примеры (PHP)

Анализ IPTC данных через функцию iptcparse
Раздел: Метаданные
iptcparse(string $iptc_block): array|false

Функция iptcparse в PHP

Функция iptcparse обрабатывает двоичные IPTC-блоки, извлекая метаданные из изображений. Используется для работы с фотографиями, содержащими информацию EXIF или IPTC.

Назначение функции

Анализирует данные, полученные через функцию iptcembed или извлеченные из файлов изображений. Позволяет получать подписи, ключевые слова, авторские права и другие метаданные.

Синтаксис и аргументы
iptcparse(string $iptc_block): array|false

Единственный аргумент $iptc_block принимает строку с двоичными IPTC-данными. Функция возвращает ассоциативный массив или false при ошибке.

Примеры использования iptcparse

Базовый пример извлечения данных
$iptc = iptcparse($iptc_block);
if ($iptc) {
    print_r($iptc);
}
Array
(
    [2#120] => Array
        (
            [0] => Подпись к изображению
        )
)
Обработка изображения
$image = 'photo.jpg';
getimagesize($image, $info);
if (isset($info['APP13'])) {
    $iptc = iptcparse($info['APP13']);
    echo $iptc['2#120'][0];
}
Закат в горах

Похожие функции в PHP

exif_read_data извлекает EXIF-данные из файлов изображений. Отличие от iptcparse в поддержке большего количества форматов и структур данных.

getimagesize возвращает размеры изображения и дополнительную информацию, включая IPTC-блок в элементе APP13.

iptcembed генерирует двоичный IPTC-блок для встраивания в изображение. Является обратной операцией к iptcparse.

Аналоги в других языках

Python с библиотекой Pillow
from PIL import Image
img = Image.open('photo.jpg')
iptc = img.info.get('iptc', {})
print(iptc)
JavaScript с библиотекой exif-js
EXIF.getData(img, function() {
    var iptc = EXIF.getTag(this, 'IPTC');
    console.log(iptc);
});
Особенности

Python использует объектный подход, JavaScript работает асинхронно. PHP функция iptcparse работает только с бинарными данными.

Типичные ошибки

Передача некорректных данных
$result = iptcparse('invalid_data');
var_dump($result);
bool(false)
Отсутствие проверки результата
$iptc = iptcparse($block);
echo $iptc['2#120'][0]; // Ошибка если false
Некорректная кодировка

Русский текст может отображаться некорректно из-за разницы кодировок. Требуется преобразование iconv.

Изменения в последних версиях PHP

В PHP 8.0 функция iptcparse не претерпела значительных изменений. Сохранена обратная совместимость с предыдущими версиями.

В PHP 8.1 улучшена обработка ошибок, но сигнатура функции осталась прежней. Рекомендуется проверять возвращаемое значение на false.

Расширенные примеры

Извлечение всех IPTC-полей
Пример php
function extractAllIPTC($imagePath) {
    getimagesize($imagePath, $info);
    if (!isset($info['APP13'])) return null;
    $iptc = iptcparse($info['APP13']);
    $result = [];
    foreach ($iptc as $tag => $values) {
        $result[$tag] = implode(', ', $values);
    }
    return $result;
}
Копирование метаданных между изображениями
Пример php
$source = 'source.jpg';
$dest = 'dest.jpg';
getimagesize($source, $info);
if (isset($info['APP13'])) {
    $iptc = iptcparse($info['APP13']);
    $iptc['2#120'][0] = 'Новая подпись';
    $iptc_binary = iptcembed($iptc, $dest);
    file_put_contents($dest, $iptc_binary);
}
Обработка нескольких значений
Пример php
$keywords = $iptc['2#025'] ?? [];
foreach ($keywords as $keyword) {
    echo "Ключевое слово: $keyword<br>";
}

PHP iptcparse function comments

En
Iptcparse Parse a binary IPTC block into single tags