Извлечение метаданных изображений в WordPress: wp_read_image_metadata() – WP 2.5.0

WP_READ_IMAGE_METADATA() │ WP 2.5.0

Функция wp_read_image_metadata() позволяет получать расширенные метаданные изображений, такие как EXIF или IPTC, если они доступны.

Описание

Эта функция извлекает следующие метаданные EXIF:

  • aperture (диафрагма)
  • credit (автор)
  • camera (камера)
  • caption (подпись)
  • copyright (авторские права)
  • iso (чувствительность)
  • created_timestamp (время создания)
  • focal_length (фокусное расстояние)
  • shutter_speed (скорость затвора)
  • title (название)

Что касается метаданных IPTC, извлекаются:

  • APP13
  • credit
  • byline (авторская строка)
  • created date and time (дата и время создания)
  • caption
  • copyright
  • title

Использование

$file = 'путь/к/вашему/изображению.jpg';
$meta = wp_read_image_metadata( $file );

Примечание

  • $file (строка) — путь к изображению. Этот параметр обязателен.

Примеры

Пример извлечения метаданных изображения

require_once ABSPATH . 'wp-admin/includes/image.php'; // для подключения функций работы с изображениями

$image_path = $_SERVER['DOCUMENT_ROOT'] . '/wp-content/uploads/2019/03/Screenshot_5.jpg';

$meta = wp_read_image_metadata( $image_path );

// Вывод массива метаданных
/*
$meta = array(
    'aperture' => 0,
    'credit' => '',
    'camera' => '',
    'caption' => 'Краткое описание изображения',
    'created_timestamp' => 0,
    'copyright' => '',
    'focal_length' => 0,
    'iso' => 0,
    'shutter_speed' => 0,
    'title' => 'Название изображения',
    'orientation' => 1,
    'keywords' => array()
);
*/

Если вы получите ошибку при вызове этой функции, например:

PHP Fatal error: Uncaught Error: Call to undefined function wp_read_image_metadata()

Убедитесь, что файл wp-admin/includes/image.php включен, как показано выше.

Возвращаемое значение

Функция возвращает массив с метаданными изображения при успешном выполнении или false в случае ошибки.

Изменения

  • Введена в версии 2.5.0.

Хуки

Функция содержит хуки, которые позволяют изменять поведение при извлечение метаданных:

  • wp_read_image_metadata_types
  • wp_read_image_metadata

Код функции

function wp_read_image_metadata( $file ) {
    if ( ! file_exists( $file ) ) {
        return false;
    }

    list( , , $image_type ) = wp_getimagesize( $file );

    $meta = array(
        'aperture' => 0,
        'credit' => '',
        'camera' => '',
        'caption' => '',
        'created_timestamp' => 0,
        'copyright' => '',
        'focal_length' => 0,
        'iso' => 0,
        'shutter_speed' => 0,
        'title' => '',
        'orientation' => 0,
        'keywords' => array(),
    );

    // Чтение IPTC метаданных
    if ( is_callable( 'iptcparse' ) ) {
        $info = array();
        wp_getimagesize( $file, $info );

        if ( ! empty( $info['APP13'] ) ) {
            $iptc = @iptcparse( $info['APP13'] );

            // Если IPTC данные не считываются, возвращаем пустой массив
            if ( ! is_array( $iptc ) ) {
                $iptc = array();
            }

            // Извлечение данных IPTC
            if ( ! empty( $iptc['2#105'][0] ) ) {
                $meta['title'] = trim( $iptc['2#105'][0] );
            } elseif ( ! empty( $iptc['2#005'][0] ) ) {
                $meta['title'] = trim( $iptc['2#005'][0] );
            }

            // Описание
            if ( ! empty( $iptc['2#120'][0] ) ) {
                $meta['caption'] = trim( $iptc['2#120'][0] );
            }

            // Автор
            if ( ! empty( $iptc['2#110'][0] ) ) {
                $meta['credit'] = trim( $iptc['2#110'][0] );
            }

            // Дата и время создания
            if ( ! empty( $iptc['2#055'][0] ) && ! empty( $iptc['2#060'][0] ) ) {
                $meta['created_timestamp'] = strtotime( $iptc['2#055'][0] . ' ' . $iptc['2#060'][0] );
            }

            // Авторские права
            if ( ! empty( $iptc['2#116'][0] ) ) {
                $meta['copyright'] = trim( $iptc['2#116'][0] );
            }

            // Ключевые слова
            if ( ! empty( $iptc['2#025'][0] ) ) {
                $meta['keywords'] = array_values( $iptc['2#025'] );
            }
        }
    }

    // Чтение EXIF метаданных
    $exif_image_types = apply_filters( 'wp_read_image_metadata_types', array( IMAGETYPE_JPEG, IMAGETYPE_TIFF_II, IMAGETYPE_TIFF_MM ) );

    if ( is_callable( 'exif_read_data' ) && in_array( $image_type, $exif_image_types, true ) ) {
        $exif = @exif_read_data( $file );

        if ( ! is_array( $exif ) ) {
            $exif = array();
        }

        // Извлечение данных EXIF
        if ( ! empty( $exif['ImageDescription'] ) ) {
            $meta['caption'] = trim( $exif['ImageDescription'] );
        }

        // Остальные поля можно добавлять аналогично
    }

    return apply_filters( 'wp_read_image_metadata', $meta, $file, $image_type, $iptc, $exif );
}

Заключение

Функция wp_read_image_metadata() является полезным инструментом для извлечения и обработки метаданных изображений в WordPress. Понимание ее работы поможет улучшить управление медиа-контентом на вашем сайте.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *