Функция wp_getimagesize() в WordPress: параметры, примеры использования, изменения

Функция wp_getimagesize() в WordPress

Функция wp_getimagesize() позволяет получить информацию о размере изображения, загруженного в WordPress. Если необходимо, она также позволяет отладить вызовы функции PHP getimagesize().

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

Функция возвращает массив с информацией об изображении или false, если возникла ошибка.

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

wp_getimagesize( $filename, ?array $image_info );

Параметры

  • $filename (string) (обязательный) - Путь к файлу.
  • ?array $image_info (по ссылке) - Массив для дополнительной информации об изображении. По умолчанию null.

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

Пример 1: Получение информации о прикрепленном изображении

$attach_id = 16837; // Идентификатор прикрепленного изображения
$path = get_attached_file( $attach_id ); // Получаем путь к файлу
$data = wp_getimagesize( $path ); // Получаем информацию о размере изображения

print_r( $data ); // Выводим информацию

Ожидаемый результат:

Array
(
    [0] => 757
    [1] => 234
    [2] => 3
    [3] => width="757" height="234"
    [bits] => 8
    [mime] => image/png
)

Пример 2: Получение данных по URL изображения

$src        = 'https://example.com/wp-content/uploads/2024/02/clipboard-image-516943.png';
$upload_dir = wp_upload_dir(); // Получаем директорию загрузок
$image_path = str_replace( wp_make_link_relative( $upload_dir['baseurl'] ), $upload_dir['basedir'], wp_make_link_relative( $src ) );

$image_data = wp_getimagesize( $image_path ); // Получаем информацию о размере изображения

print_r( $image_data );
/*
Array
(
    [0] => 754
    [1] => 243
    [2] => 3
    [3] => width="754" height="243"
    [bits] => 8
    [mime] => image/png
)
*/

Важно:
Вы также можете получать данные по URL, но в этом случае будет выполнен HTTP-запрос, что может замедлить выполнение кода. Пример использования URL:

$image_data = wp_getimagesize( 'https://example.com/uploads/image.png' );

print_r( $image_data );
/*
Может вернуть аналогичные данные, но это не рекомендуется для производительности.
*/

Изменения в функции

Функция wp_getimagesize() была добавлена в версии 5.7.0. С тех пор были внесены изменения:

  • В версии 5.8.0 добавлена поддержка изображений WebP.
  • В версии 6.5.0 добавлена поддержка изображений AVIF.

Код функции wp_getimagesize()

function wp_getimagesize( $filename, ?array &$image_info = null ) {
    if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! defined( 'WP_RUN_CORE_TESTS' ) ) {
        if ( 2 === func_num_args() ) {
            $info = getimagesize( $filename, $image_info );
        } else {
            $info = getimagesize( $filename );
        }
    } else {
        if ( 2 === func_num_args() ) {
            $info = @getimagesize( $filename, $image_info );
        } else {
            $info = @getimagesize( $filename );
        }
    }

    if ( ! empty( $info ) && ! ( empty( $info[0] ) && empty( $info[1] ) ) ) {
        return $info;
    }

    $image_mime_type = wp_get_image_mime( $filename );

    if ( false === $image_mime_type ) {
        return false;
    }

    if ( 'image/webp' === $image_mime_type ) {
        $webp_info = wp_get_webp_info( $filename );
        $width     = $webp_info['width'];
        $height    = $webp_info['height'];

        if ( $width && $height ) {
            return array(
                $width,
                $height,
                IMAGETYPE_WEBP,
                sprintf( 'width="%d" height="%d"', $width, $height ),
                'mime' => 'image/webp',
            );
        }
    }

    if ( 'image/avif' === $image_mime_type ) {
        $avif_info = wp_get_avif_info( $filename );
        $width  = $avif_info['width'];
        $height = $avif_info['height'];

        if ( $width && $height ) {
            return array(
                $width,
                $height,
                IMAGETYPE_AVIF,
                sprintf( 'width="%d" height="%d"', $width, $height ),
                'mime' => 'image/avif',
            );
        }
    }

    if ( wp_is_heic_image_mime_type( $image_mime_type ) ) {
        $editor = wp_get_image_editor( $filename );

        if ( is_wp_error( $editor ) ) {
            return false;
        }

        if ( $editor instanceof WP_Image_Editor_Imagick ) {
            $size = $editor->get_size();
            return array(
                $size['width'],
                $size['height'],
                IMAGETYPE_HEIC,
                sprintf( 'width="%d" height="%d"', $size['width'], $size['height'] ),
                'mime' => 'image/heic',
            );
        }
    }

    return false; // Не удалось определить размер изображения
}

Связанные функции

  1. file_is_displayable_image()
  2. next_image_link()
  3. previous_image_link()
  4. wp_get_additional_image_sizes()
  5. wp_get_attachment_url()
  6. wp_read_image_metadata()

Эти функции могут быть полезны при работе с изображениями в WordPress и помогут вам расширить возможности вашей работы с медиафайлами.

Leave a Reply

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