Оглавление

28.2. Получение информации об изображении

Несколько функций позволяют получить информацию об изображениях:
□ getimagesize() возвращает информацию об изображении в виде ассоциативного  массива.  В  качестве  примера  возьмем  стандартный  баннер 468×60:

$Mass = getimagesize("banner.gif");
foreach ($Mass as $key=>$val) {
  echo "$key: $val <br>\n";
}


Такой  пример  выведет  код HTML,  отображаемый Web-браузером  примерно так:

0: 468
1: 60
2: 1

 

3: width="468" height="60"
bits: 6
channels: 3
mime: image/gif


□ imagesx()  возвращает  ширину  изображения,  загруженного  с  помощью функций  imagecreatefrompng(),  imagecreatefromgif(),  imagecreatefromjpeg(), imagecreatefromwbmp() или др.;
□ imagesy()  возвращает  высоту  изображения,  загруженного  с  помощью функций  imagecreatefrompng(),  imagecreatefromgif(),  imagecreatefromjpeg(), imagecreatefromwbmp() или др.:

$img = imagecreatefromgif("banner.gif");
echo "Ширина " . imagesx($img) . "<br>";
echo "Высота " . imagesy($img) . "<br>";
// Выведет: Ширина 468<br>Высота 60<br>


Получить  детальную  информацию  о JPEG-  и TIFF-изображениях  позволяет библиотека php_exif.dll. Для использования функций из этой библиотеки необходимо в файле php.ini убрать комментарий (;) перед строкой
;extension=php_exif.dll

 

После этого необходимо перенести строку в самый конец перечисления всех расширений. (1)

 


Библиотека php_exif.dll предоставляет следующие функции:
□ exif_imagetype(<Путь  к  файлу>)  позволяет  определить  формат  файла. Функция  возвращает  false,  если  формат  файла  определить  не  удалось, или следующие значения и соответствующие им константы:
•  1 — IMAGETYPE_GIF;
•  2 — IMAGETYPE_JPEG;
•  3 — IMAGETYPE_PNG;
•  4 — IMAGETYPE_SWF;

•  5 — IMAGETYPE_PSD;
•  6 — IMAGETYPE_BMP;
•  7 — IMAGETYPE_TIFF_II;
•  8 — IMAGETYPE_TIFF_MM;
•  9 — IMAGETYPE_JPC;
•  10 — IMAGETYPE_JP2;
•  11 — IMAGETYPE_JPX;
•  12 — IMAGETYPE_JB2;
•  13 — IMAGETYPE_SWC;
•  14 — IMAGETYPE_IFF;
•  15 — IMAGETYPE_WBMP;
•  16 — IMAGETYPE_XBM.


Проверить формат можно так:

if (exif_imagetype('foto.jpg') == IMAGETYPE_JPEG) {
   echo 'Это фото в формате JPEG';
}


Или так:

if (exif_imagetype('foto.jpg') == 2) {
   echo 'Это фото в формате JPEG';
}


□ exif_read_data() позволяет вывести информацию из заголовков JPEG- и TIFF-файлов.  Возвращает  результат  в  виде  ассоциативного  массива. Функция имеет следующий формат:
exif_read_data(<Имя файла>, [<Список разделов>], 
[<Тип массива>], 
               [<Вывод миниатюры>]);
В параметре <Список  разделов> можно перечислить  через  запятую разделы,  которые  должны  присутствовать  в файле. Если  указанный  раздел отсутствует, то функция возвращает false. По умолчанию параметр имеет значение NULL.

 

Параметр <Тип массива> определяет, будет ли каждый раздел представлен в виде отдельного массива (значение true) или нет (значение false).

 

По  умолчанию  параметр  имеет  значение false. Следует  учитывать,  что разделы COMPUTED, THUMBNAIL и COMMENT всегда представлены как отдельные массивы.

 
Параметр <Вывод миниатюры> определяет, будет ли загружена миниатюра (значение true) или только информация о ней (значение false). По умолчанию параметр имеет значение false.


Пример использования функции:

<?php
$arr = exif_read_data('foto.jpg');
if (!$arr) die('Информации нет');
echo '<b>Информация об изображении:</b><br>';
echo 'Название: ' . $arr['FileName'] . '<br>';
echo 'Размер: ';
echo number_format($arr['FileSize'], 0, '.', ' ');
echo '<br>';
echo 'Mime-тип: ' . $arr['MimeType'] . '<br>';
echo 'Ширина: ' . $arr['COMPUTED']['Width'] . '<br>';
echo 'Высота: ' . $arr['COMPUTED']['Height'] . '<br>';
echo 'Дата создания: ' . $arr['DateTimeOriginal'] . '<br>';
echo 'Выдержка: ' . $arr['ExposureTime'] . '<br>';
echo 'Чувствительность: ' . $arr['ISOSpeedRatings'] . '<br>';
echo '<br>';
echo '<b>Информация о фотоаппарате:</b><br>';
echo 'Производитель: ' . $arr['Make'] . '<br>';
echo 'Модель: ' . $arr['Model'] . '<br>';
?>


Выведет примерно:

Информация об изображении:
Название: foto.jpg
Размер: 5 578 604
Mime-тип: image/jpeg
Ширина: 3648
Высота: 2736
Дата создания: 2008:07:05 10:26:41
Выдержка: 1/320
Чувствительность: 80

 

 Информация о фотоаппарате:
Производитель: Canon
Модель: Canon DIGITAL IXUS 85 IS


Вывести полную информацию по разделам можно следующим образом:

<?php
$arr = exif_read_data('foto.jpg', NULL, true, false);
if (!$arr) die('Информации нет');
echo '<pre>';
print_r($arr);
echo '</pre>';
?>


□ exif_thumbnail()  позволяет  вывести  миниатюру  из JPEG-  и TIFF-файлов. Функция имеет следующий формат:
exif_thumbnail(<Имя файла>, [<Ширина>], [<Высота>], [<Формат миниатюры>]);

 

В необязательных параметрах <Ширина>, <Высота> и <Формат миниатюры> можно  указать  переменные,  в  которых  будут  сохранены  соответствующие параметры миниатюры. Пример использования функции:

<?php
$image = exif_thumbnail('foto.jpg');
if (!$image) die('Миниатюры нет');
header('Content-type: image/jpeg');
echo $image;
exit();
?>
Примечания:
  • Если не перенести строку, то библиотека будет недоступна для использования. Кроме того, библиотека php_exif.dll требует подключения библиотеки php_mbstring.dll. А переносим мы строку именно из-за того, что библиотека php_exif.dll должна загружаться после библиотеки php_mbstring.dll.
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити