getimagesize
Функция getimagesize() определит размер любого заданного, поддерживаемого изображения и вернет этот размер вместе с типом файла и текстовой строкой height/width , которую можно будет использовать внутри тега HTML IMG , а также вернет соответствующий тип содержимого HTTP .
Также getimagesize() может вернуть дополнительные сведения об изображении через аргумент image_info .
Функция ожидает, что filename является корректным файлом изображения. Если будет передан файл не содержащий изображения, он может быть некорректно интерпретирован как изображение и функция завершится успешно, но массив при этом будет содержать бессмысленные значения.
Не используйте getimagesize() для проверки того, что файл является изображением. Для этих целей используйте модуль Fileinfo.
Замечание: Обратите внимание на тот факт, что отдельные части JPC и JP2 изображений могут иметь различную глубину цвета. В этом случае в параметре «bits» будет стоять максимальное значение из всех обнаруженных. Также JP2 файлы могут содержать несколько кодовых потоков JPEG 2000 . В таком случае getimagesize() вернет значения для первого такого потока, который будет обнаружен функцией в корне файла.
Замечание: Сведения об иконках извлекаются из иконки с наибольшим битрейтом.
Замечание: Изображения GIF состоят из одного или нескольких кадров, где каждый кадр может занимать только часть изображения. Размер изображения, возвращаемый getimagesize() , будет являться общим размером (прочитанным из дескриптора логического экрана).
Список параметров
Этот аргумент задает файл, сведения о котором будут извлекаться. Это может быть локальный или удаленный (зависит от конфигурации) файл. Передача данных удаленного файла должна осуществляться одним из поддерживаемых потоков.
Этот необязательный аргумент позволяет извлечь некоторые расширенные сведения из файла изображения. На данный момент можно получать различные JPG APP маркеры в виде ассоциативного массива. Некоторые программы используют эти маркеры для встраивания текста в картинку. Наиболее часто встраивают » IPTC сведения в APP13 маркер. Для преобразования двоичных данных APP13 маркера во что-то удобочитаемое можно воспользоваться функцией iptcparse() .
Замечание:
image_info поддерживает только файлы JFIF .
Возвращаемые значения
Возвращает массив из 7 элементов. Не все типы изображений содержат элементы с каналами ( channels ) и битрейтом ( bits ).
Индексы 0 и 1 содержат ширину и высоту изображения.
Замечание:
Некоторые форматы файлов могут хранить несколько изображений или не содержать изображения вообще. В таких случаях getimagesize() не сможет определить размер изображения. getimagesize() вернет нули в качестве значений высоты и ширины.
Индекс 2 содержит одну из констант типа изображения IMAGETYPE_XXX.
Индекс 3 содержит строку со значениями ширины и высоты изображения height=»yyy» width=»xxx» , которая может быть использована внутри IMG тега.
mime — соответствующий MIME-тип изображения. Эти сведения используются для корректной обработки изображения на основании заголовка Content-type :
Пример #1 getimagesize() и MIME типы
channels принимает значение 3 для RGB картинок и 4 для CMYK.
bits — глубина цвета, число бит для каждого цвета.
Для некоторых типов изображений наличие значений channels и bits может сбить с толку. Например, GIF всегда использует 3 канала на пиксель, но глубину цвета невозможно вычислить для анимированных GIF изображений с общей таблицей цветов.
В случае возникновения ошибки функция вернет false .
Ошибки
Если доступ к файлу filename невозможен, getimagesize() вызовет ошибку уровня E_WARNING . В случае ошибки чтения файла getimagesize() вызовет ошибку уровня E_NOTICE .
Список изменений
Версия | Описание |
---|---|
7.1.0 | Добавлена поддержка WebP. |
Примеры
Пример #2 Пример использования getimagesize()
list( $width , $height , $type , $attr ) = getimagesize ( «img/flag.jpg» );
echo «» ;
?>?php
Пример #3 getimagesize (URL)
$size = getimagesize ( «http://www.example.com/gifs/logo.gif» );
?php
// если в имени файла есть пробелы, учтите это должным образом
$size = getimagesize ( «http://www.example.com/gifs/lo%20go.gif» );
Пример #4 getimagesize() возвращающая IPTC
$size = getimagesize ( «testimg.jpg» , $info );
if (isset( $info [ «APP13» ])) $iptc = iptcparse ( $info [ «APP13» ]);
var_dump ( $iptc );
>
?>?php
Примечания
Замечание:
Этой функции не требуется библиотека GD.
Смотрите также
- image_type_to_mime_type() — Получение Mime-типа для типа изображения, возвращаемого функциями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
- exif_imagetype() — Определение типа изображения
- exif_read_data() — Читает заголовки EXIF из файлов изображений
- exif_thumbnail() — Получает встроенное превью изображения
- imagesx() — Получение ширины изображения
- imagesy() — Получение высоты изображения
getimagesize
Функция getimagesize() определит размер любого заданного, поддерживаемого изображения и вернёт этот размер вместе с типом файла и текстовой строкой height/width , которую можно будет использовать внутри тега HTML IMG , а также вернёт соответствующий тип содержимого HTTP .
Также getimagesize() может вернуть дополнительные сведения об изображении через аргумент image_info .
Функция ожидает, что filename является корректным файлом изображения. Если будет передан файл не содержащий изображения, он может быть некорректно интерпретирован как изображение и функция завершится успешно, но массив при этом будет содержать бессмысленные значения.
Не используйте getimagesize() для проверки того, что файл является изображением. Для этих целей используйте модуль Fileinfo.
Замечание: Обратите внимание на тот факт, что отдельные части JPC и JP2 изображений могут иметь различную глубину цвета. В этом случае в параметре «bits» будет стоять максимальное значение из всех обнаруженных. Также JP2 файлы могут содержать несколько кодовых потоков JPEG 2000 . В таком случае getimagesize() вернёт значения для первого такого потока, который будет обнаружен функцией в корне файла.
Замечание: Сведения об иконках извлекаются из иконки с наибольшим битрейтом.
Замечание: Изображения GIF состоят из одного или нескольких кадров, где каждый кадр может занимать только часть изображения. Размер изображения, возвращаемый getimagesize() , будет являться общим размером (прочитанным из дескриптора логического экрана).
Список параметров
Этот аргумент задаёт файл, сведения о котором будут извлекаться. Это может быть локальный или удалённый (зависит от конфигурации) файл. Передача данных удалённого файла должна осуществляться одним из поддерживаемых потоков.
Этот необязательный аргумент позволяет извлечь некоторые расширенные сведения из файла изображения. На данный момент можно получать различные JPG APP маркеры в виде ассоциативного массива. Некоторые программы используют эти маркеры для встраивания текста в картинку. Наиболее часто встраивают » IPTC сведения в APP13 маркер. Для преобразования двоичных данных APP13 маркера во что-то удобочитаемое можно воспользоваться функцией iptcparse() .
Замечание:
image_info поддерживает только файлы JFIF .
Возвращаемые значения
Возвращает массив из 7 элементов. Не все типы изображений содержат элементы с каналами ( channels ) и битрейтом ( bits ).
Индексы 0 и 1 содержат ширину и высоту изображения.
Замечание:
Некоторые форматы файлов могут хранить несколько изображений или не содержать изображения вообще. В таких случаях getimagesize() не сможет определить размер изображения. getimagesize() вернёт нули в качестве значений высоты и ширины.
Индекс 2 содержит одну из констант типа изображения IMAGETYPE_XXX.
Индекс 3 содержит строку со значениями ширины и высоты изображения height=»yyy» width=»xxx» , которая может быть использована внутри IMG тега.
mime — соответствующий MIME-тип изображения. Эти сведения используются для корректной обработки изображения на основании заголовка Content-type :
Пример #1 getimagesize() и MIME типы
channels принимает значение 3 для RGB картинок и 4 для CMYK.
bits — глубина цвета, число бит для каждого цвета.
Для некоторых типов изображений наличие значений channels и bits может сбить с толку. Например, GIF всегда использует 3 канала на пиксель, но глубину цвета невозможно вычислить для анимированных GIF изображений с общей таблицей цветов.
В случае возникновения ошибки функция вернёт false .
Ошибки
Если доступ к файлу filename невозможен, getimagesize() вызовет ошибку уровня E_WARNING . В случае возникновения ошибки чтения файла getimagesize() вызовет ошибку уровня E_NOTICE .
Список изменений
Версия | Описание |
---|---|
8.2.0 | Теперь возвращает фактические размеры, биты и каналы изображений AVIF; ранее размеры сообщались как 0x0 , а биты и каналы не сообщались вообще. |
7.1.0 | Добавлена поддержка WebP. |
Примеры
Пример #2 Пример использования getimagesize()
list( $width , $height , $type , $attr ) = getimagesize ( «img/flag.jpg» );
echo «» ;
?>?php
Пример #3 getimagesize (URL)
$size = getimagesize ( «http://www.example.com/gifs/logo.gif» );
?php
// если в имени файла есть пробелы, учтите это должным образом
$size = getimagesize ( «http://www.example.com/gifs/lo%20go.gif» );
Пример #4 getimagesize() возвращающая IPTC
$size = getimagesize ( «testimg.jpg» , $info );
if (isset( $info [ «APP13» ])) $iptc = iptcparse ( $info [ «APP13» ]);
var_dump ( $iptc );
>
?>?php
Примечания
Замечание:
Этой функции не требуется библиотека GD.
Смотрите также
- image_type_to_mime_type() — Получение Mime-типа для типа изображения, возвращаемого функциями getimagesize, exif_read_data, exif_thumbnail, exif_imagetype
- exif_imagetype() — Determine the type of an image
- exif_read_data() — Читает заголовки EXIF из файлов изображений
- exif_thumbnail() — Получает встроенное превью изображения
- imagesx() — Получение ширины изображения
- imagesy() — Получение высоты изображения
User Contributed Notes 24 notes
As noted below, getimagesize will download the entire image before it checks for the requested information. This is extremely slow on large images that are accessed remotely. Since the width/height is in the first few bytes of the file, there is no need to download the entire file. I wrote a function to get the size of a JPEG by streaming bytes until the proper data is found to report the width and height:
// Retrieve JPEG width and height without downloading/reading entire image.
function getjpegsize ( $img_loc ) $handle = fopen ( $img_loc , «rb» ) or die( «Invalid file stream.» );
$new_block = NULL ;
if(! feof ( $handle )) $new_block = fread ( $handle , 32 );
$i = 0 ;
if( $new_block [ $i ]== «\xFF» && $new_block [ $i + 1 ]== «\xD8» && $new_block [ $i + 2 ]== «\xFF» && $new_block [ $i + 3 ]== «\xE0» ) $i += 4 ;
if( $new_block [ $i + 2 ]== «\x4A» && $new_block [ $i + 3 ]== «\x46» && $new_block [ $i + 4 ]== «\x49» && $new_block [ $i + 5 ]== «\x46» && $new_block [ $i + 6 ]== «\x00» ) // Read block size and skip ahead to begin cycling through blocks in search of SOF marker
$block_size = unpack ( «H*» , $new_block [ $i ] . $new_block [ $i + 1 ]);
$block_size = hexdec ( $block_size [ 1 ]);
while(! feof ( $handle )) $i += $block_size ;
$new_block .= fread ( $handle , $block_size );
if( $new_block [ $i ]== «\xFF» ) // New block detected, check for SOF marker
$sof_marker = array( «\xC0» , «\xC1» , «\xC2» , «\xC3» , «\xC5» , «\xC6» , «\xC7» , «\xC8» , «\xC9» , «\xCA» , «\xCB» , «\xCD» , «\xCE» , «\xCF» );
if( in_array ( $new_block [ $i + 1 ], $sof_marker )) // SOF marker detected. Width and height information is contained in bytes 4-7 after this byte.
$size_data = $new_block [ $i + 2 ] . $new_block [ $i + 3 ] . $new_block [ $i + 4 ] . $new_block [ $i + 5 ] . $new_block [ $i + 6 ] . $new_block [ $i + 7 ] . $new_block [ $i + 8 ];
$unpacked = unpack ( «H*» , $size_data );
$unpacked = $unpacked [ 1 ];
$height = hexdec ( $unpacked [ 6 ] . $unpacked [ 7 ] . $unpacked [ 8 ] . $unpacked [ 9 ]);
$width = hexdec ( $unpacked [ 10 ] . $unpacked [ 11 ] . $unpacked [ 12 ] . $unpacked [ 13 ]);
return array( $width , $height );
> else // Skip block marker and read block size
$i += 2 ;
$block_size = unpack ( «H*» , $new_block [ $i ] . $new_block [ $i + 1 ]);
$block_size = hexdec ( $block_size [ 1 ]);
>
> else return FALSE ;
>
>
>
>
>
return FALSE ;
>
?>
There’s a code snippet for getting JPEG image dimensions by getting only first few bytes of the file, but it doesn’t work for PNG files, so I wrote one. It will download only the first 24 bytes instead of the whole image, and thus being much faster than getimagesize() and it will save bandwidth at the same time:
// Retrieve PNG width and height without downloading/reading entire image.
function getpngsize ( $img_loc ) $handle = fopen ( $img_loc , «rb» ) or die( «Invalid file stream.» );