wp_getimagesize()WP 5.7.0

Получает размеры изображения и другую сопутствующую информацию.

Является обёрткой 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().
По умолчанию: null

image_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;
}