(PHP 4, PHP 5, PHP 7, PHP 8)
getimagesize — Получает размер изображения
Функция getimagesize() определяет размер
поддерживаемого графического файла и возвращает размеры изображения, тип файла и текстовую
строку height/width
, которые указывают в атрибутах
HTML-тега IMG
и в HTTP-заголовках
типа содержимого.
Функция getimagesize() также умеет возвращать дополнительные сведения
об изображении в параметре image_info
.
Функция ожидает, что путь к файлу в аргументе filename
указывает на корректный файл
изображения. При передаче пути не на файл изображения функция иногда неправильно определяет файл
как изображение и успешно возвращает результат, но но массив содержит бессмысленные значения.
Функцией getimagesize() не проверяют, представляет ли собой файл допустимое изображение. Для проверки графических файлов пользуются решениями наподобие модуля Fileinfo, которые разработали для таких целей.
Замечание: Обратите внимание, отдельные части JPC- и JP2-изображений часто содержат компоненты с разной глубиной цвета, тогда элемент "bits" содержит максимальное значение, которое обнаружила функция. Файлы в формате JP2 также иногда содержат множественные кодовые потоки
multiple JPEG 2000 codestreams
, тогда функция getimagesize() вернёт значения первого потока кода, который обнаружит в корне файла.
Замечание: Сведения об иконках извлекаются из иконки с наибольшим битрейтом.
Замечание: Изображения в формате GIF состоят из одного или нескольких кадров, где каждый кадр иногда занимает только часть изображения. Размер изображения, который возвращается функцией getimagesize(), указывает общий размер, который функция считала из дескриптора логического экрана.
filename
Аргумент задаёт файл, сведения о котором требуется извлечь. В параметр передают путь на локальный или, если поддерживает конфигурация, удалённый файл. Передачу данных удалённого файла выполняют через поддерживаемые потоки.
image_info
Необязательный параметр заполняется дополнительной информацией, которую модуль извлекает из файла изображения. В текущей реализации доступно извлечение APP-маркеров JPG-изображений в виде ассоциативного массива. Отдельные программы через эти APP-маркеры встраивают текст в изображение. Чаще остальных встраивают » IPTC-сведения в APP13-маркер. Для преобразования двоичных данных APP13-маркера во что-то удобное для чтения вызывают функцию iptcparse().
Замечание:
Параметр
image_info
поддерживает только файлы в формате JFIF.
Функция возвращает массив из 7 элементов. Не каждый тип изображения содержит элементы с каналами
channels
и битрейтом bits
.
Индексы 0 и 1 содержат ширину и высоту изображения.
Замечание:
Отдельные форматы файлов хранят набор изображений или вообще не содержат изображений. Для таких форматов функцией getimagesize() невозможно определить размер изображения. Функция getimagesize() вернёт нули как значения высоты и ширины.
Замечание: Функция getimagesize() не учитывает метаданные изображения, поэтому когда, например, значения Exif-флага
Orientation
поворачивают изображение на 90 или 270 градусов, индексы 0 и 1 меняются местами: индекс 0 содержит высоту, а индекс 1 — ширину.
Индекс 2 содержит константу семейства IMAGETYPE_*
,
которая обозначает тип изображения.
Индекс 3 содержит строку со значениями ширины и высоты изображения
height="yyy" width="xxx"
, которые указывают
в атрибутах тега IMG.
mime
— MIME-тип, который соответствует изображению.
Эти сведения помогают корректно обрабатывать изображения на основании
заголовка 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 для цветовой модели 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()
<?php
list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");
echo "<img src=\"img/flag.jpg\" $attr alt=\"пример getimagesize()\" />";
?>
Пример #3 Пример получения размера изображения по URL-адресу функцией getimagesize
<?php
$size = getimagesize("http://www.example.com/gifs/logo.gif");
// Названия файлов с пробелами требуется правильно кодировать
$size = getimagesize("http://www.example.com/gifs/lo%20go.gif");
?>
Пример #4 Пример возврата IPTC-метаданных функцией getimagesize()
<?php
$size = getimagesize("testimg.jpg", $info);
if (isset($info["APP13"])) {
$iptc = iptcparse($info["APP13"]);
var_dump($iptc);
}
?>
Замечание:
Этой функции не требуется библиотека GD.