Получает размеры изображения и другую сопутствующую информацию.
Является обёрткой php функции getimagesize(), поэтому о всех нюансах использования функции читайте там.
Обёртка делает следующее:
- Позволяет в режиме дебага "ловить" ошибки функции getimagesize(), кроме сценариев, когда код запускается в тестах, смотрите константу WP_RUN_CORE_TESTS.
- В обычном режиме подавляет ошибки функции getimagesize(), такие как "поврежденные данные JPEG: 7191 посторонний байт перед маркером", даже если она способна предоставить информацию о размере изображения, и другие. Узнайте об этом больше в тикете #42480.
Для версий PHP, которые не поддерживают WebP-изображения, извлекает информацию о размере изображения из заголовков файлов.
Версия PHP Описание 8.2.0 Теперь возвращает фактические размеры, биты и каналы изображений AVIF; ранее размеры сообщались как 0x0, а биты и каналы не сообщались вообще. 7.1.0 Добавлена поддержка WebP.
Хуков нет.
Возвращает
Массив|false
. Информация об изображении или false при сбое.
Пример возвращаемого значения:
Array ( [0] => 250 [1] => 250 [2] => 3 [3] => width="250" height="250" [bits] => 8 // Может не быть [channels] => 3 // Может не быть [mime] => image/png )
[0]
- Ширина в пикселях.[1]
- Высота в пикселях.[2]
- Содержит одну из констант типа изображения IMAGETYPE_XXX, например, IMAGETYPE_PNG, IMAGETYPE_JPC. Это значение обычно используется в функциях image_type_to_mime_type() и image_type_to_extension().[3]
- Cодержит строку со значениями ширины и высоты изображения height="yyy" width="xxx", которая может быть использована внутри IMG тега.[bits]
- Принимает значение 3 для RGB картинок и 4 для CMYK.[channels]
- Глубина цвета, число бит для каждого цвета.[mime]
- соответствующий MIME-тип изображения. Эти сведения используются для корректной обработки изображения на основании заголовка Content-type.
Для некоторых типов изображений наличие значений channels и bits может сбить с толку. Например, GIF всегда использует 3 канала на пиксель, но глубину цвета невозможно вычислить для анимированных GIF изображений с общей таблицей цветов.
Некоторые форматы файлов могут хранить несколько изображений или не содержать изображения вообще. В таких случаях wp_getimagesize() не сможет определить размер изображения. getimagesize() вернёт нули в качестве значений высоты и ширины.
Использование
wp_getimagesize( $filename, $image_info );
- $filename(строка) (обязательный)
- Этот аргумент задаёт файл, сведения о котором будут извлекаться. Это может быть локальный или удалённый (зависит от конфигурации) файл. Передача данных удалённого файла должна осуществляться одним из поддерживаемых потоков.
- $image_info(массив)
Этот необязательный аргумент позволяет извлечь некоторые расширенные сведения из файла изображения. На данный момент можно получать различные JPG APP маркеры в виде ассоциативного массива. Некоторые программы используют эти маркеры для встраивания текста в картинку. Наиболее часто встраивают » IPTC сведения в APP13 маркер. Для преобразования двоичных данных APP13 маркера во что-то удобочитаемое можно воспользоваться функцией iptcparse().
По умолчанию: nullimage_info поддерживает только файлы JFIF.
Примеры
0
#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 )
0
#2 Как получить данные по УРЛ картинки загруженной в WordPress медиатеку
$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 ) */
Также можно получить данные напрямую по УРЛ, но в этом случае будет делаться http запрос и такой код будет работать в разы дольше. Ниже просто показательный пример (так делать не рекомендуется!):
$image_data = wp_getimagesize( 'https://example.com/uploads/image.png' ); print_r( $image_data ); /* Array ( [0] => 754 [1] => 243 [2] => 3 [3] => width="754" height="243" [bits] => 8 [mime] => image/png ) */
Список изменений
С версии 5.7.0 | Введена. |
С версии 5.8.0 | Added support for WebP images. |
Код wp_getimagesize() WP 6.4.3
function wp_getimagesize( $filename, array &$image_info = null ) { // Don't silence errors when in debug mode, unless running unit tests. 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 { /* * Silencing notice and warning is intentional. * * getimagesize() has a tendency to generate errors, such as * "corrupt JPEG data: 7191 extraneous bytes before marker", * even when it's able to provide image size information. * * See https://core.trac.wordpress.org/ticket/42480 */ if ( 2 === func_num_args() ) { $info = @getimagesize( $filename, $image_info ); } else { $info = @getimagesize( $filename ); } } if ( false !== $info ) { return $info; } /* * For PHP versions that don't support WebP images, * extract the image size info from the file headers. */ if ( 'image/webp' === wp_get_image_mime( $filename ) ) { $webp_info = wp_get_webp_info( $filename ); $width = $webp_info['width']; $height = $webp_info['height']; // Mimic the native return format. if ( $width && $height ) { return array( $width, $height, IMAGETYPE_WEBP, sprintf( 'width="%d" height="%d"', $width, $height ), 'mime' => 'image/webp', ); } } // The image could not be parsed. return false; }