Функция getimagesize()

array getimagesize ( string $filename [, array &$imageinfo ] )

Функция getimagesize PHP определяет размер заданного изображения и возвращает этот размер вместе с типом файла и текстовой строкой, содержащей значения высоты / ширины, которая будет использоваться в HTML-теге IMG и соответствующем типе HTTP-содержимого.

getimagesize () также может возвращать дополнительную информацию в параметре imageinfo.

Примечание. Обратите внимание, что JPC и JP2 могут содержать компоненты с разной битовой глубиной. В этом случае значение «бит» является наивысшей битовой глубиной. Кроме этого файлы JP2 могут содержать несколько кодовых потоков JPEG 2000. В этом случае getimagesize() возвращает значения для первого кодового потока, который встречается в корне файла.

Параметры

filename

Указывает на файл, который нужно получить. Он может ссылаться на локальный файл или удаленный ресурс.

imageinfo

Необязательный параметр getimagesize PHP, позволяет извлечь расширенную информацию из файла изображения. В настоящее время он возвращает различные APP-маркеры JPG как ассоциативный массив. Некоторые программы используют эти APP-маркеры для вставки текстовой информации в изображения. Часто это используется для встраивания» IPTC информации в маркер APP13. Вы можете использовать функцию iptcparse() для преобразования двоичного маркера APP13 во что-то читаемое.

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

Функция getimagesize() возвращает массив с 7 элементами. Не все типы изображений будут включать в себя элементы channels и bits.

Индекс 0 и 1 содержат соответственно ширину и высоту изображения.

Примечание: Некоторые форматы могут не содержать изображения или содержать несколько изображений. В этих случаях функция getimagesize() будет не в состоянии правильно определить размер изображения и возвратил 0 для значений ширины и высоты.

Индекс 2 является одной из констант IMAGETYPE_XXX, указывающих тип изображения.

Индекс 3 представляет собой string с корректной строкой height=»yyy» width=»xxx», которая может использоваться непосредственно в теге IMG.

mime — соответствующий MIME-тип изображения. Эта информация может использоваться в getimagesize PHP для предоставления изображений с корректным HTTP-заголовком Content-type:

Пример №1 getimagesize () и MIME-типы

<?php
$size = getimagesize($filename);
$fp = fopen($filename, "rb");
if ($size && $fp) {
    header("Content-type: {$size['mime']}");
    fpassthru($fp);
    exit;
} else {
    // ошибка
}
?>

Значение channels будет 3 для RGB-изображений и 4 — для CMY-изображений.

bits — это количество битов для каждого цвета.

Для некоторых типов изображений наличие значений channels и bits запутанно. Например, формат GIF всегда использует 3 канала на пиксель. Но количество бит на пиксель не может быть рассчитано для анимированного GIF-изображения с глобальной таблицей цветов.

При ошибке возвращается значение FALSE.

Ошибки / Исключения

PHP getimagesize не работает, если доступ к изображению невозможен. Тогда функция генерирует предупреждение (E_WARNING). При ошибке чтения getimagesize() генерирует ошибку E_NOTICE.

История изменений

Версия   Описание
5.3.0 Добавлена поддержка иконок.
5.2.3 Ошибки чтения, сгенерированные этой функцией, понижены с E_WARNING до E_NOTICE.
4.3.2 Добавлена поддержка JPC, JP2, JPX, JB2, XBM и WBMP. 
4.3.2 Для параметра imageinfo была добавлена поддержка JPEG 2000. 
4.3.0 Добавлены значения channels и bitsи для других типов изображений.
4.3.0 Добавлена поддержка SWC и IFF. 
4.2.0 В getimagesize PHPдобавлена поддержка TIFF. 
4.0.6 Добавлена поддержка BMP и PSD. 

Примеры

Пример №2 getimagesize()

<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img src="img/flag.jpg" $attr alt="getimagesize() example" />";
?>

Пример №3 getimagesize(URL)

<?php
$size = getimagesize("http://www.example.com/gifs/logo.gif");

// если в имени файла есть пробел, закодировать его
$size = getimagesize("http://www.example.com/gifs/lo%20go.gif");

?>

Пример № 4 getimagesize(), возвращающая IPTC

<?php
$size = getimagesize("testimg.jpg", $info);
if (isset($info["APP13"])) {
    $iptc = iptcparse($info["APP13"]);
    var_dump($iptc);
}
?>

Примечания

Примечание: Для функции не требуется наличие библиотеки изображений GD.

Примечания: Данная функция ожидает, что filename — действительный файл изображения. Если предоставляется не файл изображения, он может быть неправильно идентифицирован и PHP getimagesize не работает.

Не используйте функция getimagesize() для проверки, является ли файл допустимым изображением. Вместо этого используйте специально разработанные решения, такие как функцию Fileinfo().

Перевод статьи «getimagesize» дружной командой проекта Сайтостроение от А до Я.