Установка средств графической поддержки
Функции поддержки работы с графикой
Небольшие графические объекты
17.2.2. Определение параметров изображения
17.2.2.1. Считывание размера изображения: GetlmageSize
array getimagesize (string filename [, array imageinfo])
Функция пытается определить размер переданного ей по имени файла изображения в форматах GIF, JPG, PNG или SWF и возвращает массив, содержащий тип
графического файла, а также его ширину и высоту в виде текстовой строки, пригодной для помещения внутрь тега IMG.
Массив результатов содержит четыре элемента, индексируемых числами:
0 Ширина изображения в пикселах
1 Высота картинки в пикселах
2 Флаг, определяющий тип графического файла (может принимать значения:
1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF)
3 Текстовая строка вида height=xxx width=xxx, которая и предназначена для
включения в тег IMG
Вот как эта функция используется на практике:
<?php $size = GetlmageSize ("img/flag.jpg"); ?>
<IMG SRC="img/flag.jpg" <?php echo $s1ze[3]; ?>
?php $size =
GetlmageSize ("http://www.php.net/gifs/logo.gif");
?>
Если, паче чаяния, вы применяете эту функцию к JPEG-файлам, результирующий
массив будет содержать два дополнительных элемента, определяющих количество каналов и разрядность в битах. Первый из них, с индексом 4, имеет значение 3 для изображений RGB и 4 — для картинок, представленных в CMYK. Разрядность, как и следовало ожидать, равна количеству битов, выделяемых для представления каждого цвета.
В случае если доступ к файлу, указанному аргументом filename, получить не удается, функция возвращает вместо массива NULL и генерирует предупреждение.
Использование необязательного аргумента imagei nf о позволяет извлечь из файла картинки некоторую дополнительную информацию. На сегодняшний день эта
информация ограничена маркерами JPG АРР, которые помещаются в ассоциативный массив. Чаще всего эта информация помещается в маркер АРР13 (см. http://
www.iptc.org/), и для ее последующего анализа необходимо воспользоваться функцией iptcparse():
<?php
$size = GetImageSize ("testimg. jpg" ,&$info) ;
if (isset ($info["APP13"] )) {
$iptc = iptcparse ($info ["APP13"] ) ;
var_dump ($iptc) ;
17.2.2.2. Ширина изображения: ImageSX
int imagesx (int im)
Функция возвращает ширину изображения im.
17.2.2.3. Высота изображения: ImageSY
int imagesy (int im)
Функция ImageSY () возвращает высоту изображения im.
17.2.2.4. Типы изображений: ImageTypes
int imagetypes ()
Функция возвращает целое число, представляющее собой битовую маску, в которой установлены биты типов изображений, поддерживаемых данной версией GD.
Вы можете использовать для проверки следующие предопределенные константы,
имеющие вполне очевидный смысл:
IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP
Так, для проверки на предмет наличия поддержки PNG-формата, вам потребуется выполнить следующие операции:
<?рhр
if (ImageTypes() & IMG_PNG) {
echo "Поддержка PNG включена";
}
?>
На мой взгляд, некоторый практический интерес представляет программка, которая позволяет вам сразу же определить, какие типы графических форматов поддерживаются на машине провайдера, где вы планируете хоститься. Вот как может
выглядеть ее исходный код:
<HTML>
<ТIТLЕ>Список поддерживаемых форматов картинок</ТIТLЕ>
<?php
$types = ImageTypes();
?>
<h2>B этой PHP-машине поддерживаются:</h2>
<ul type="square">
<? if ($types & IMG_GIF) { ?> <li>СIF-формат - редкая удача!<? }
if ($types & IMG_PNG) { ?> <li>РNG-формат <? }
if ($types & IMG_JPG) { ?> <li> JPEG-формат <? }
if ($types & IMG_WBMP) { ?> <li >ВМР-формат <? }
?>
</ul></html>
Результат ее выполнения представлен на рис. 17.1.
Рис. 17.1. В моей машине поддерживаются только два встроенных формата,
поэтому вы не найдете в книге никаких примеров по обработке JPEG
17.2.2.5. Считывание EXIF-заголовков: read_exif_data
array read_exif_data (string filename)
Функция read_exif_data() выполняет считывание заголовков EXIF, содержащихся в JPEG-файле, и возвращает ассоциативный массив, ключами которого являются
имена заголовков EXIF, а значениями, как и следовало ожидать, — значения этих
заголовков. Как правило, эти заголовки присутствуют в файлах, созданных цифровыми камерами, но каждый производитель камер имеет свое собственное представление о составе и формате информации, помещаемой в эти заголовки. В результате не очень-то рассчитывайте на совместимость и переносимость информации.
Для считывания EXIF-заголовков можно воспользоваться вот таким фрагментом
кода:
<?php
$exif = read_exif_data ('p00018Q7.jpg');
while(list($k,$v)=each($exif)) {
echo "$k: $v<br>\n";
}
?>
Поскольку сам я цифровых камер не люблю и предпочитаю обычную 35-миллиметровую пленку, то результаты контрольного примера я позаимствовал из документации к РНР. Вот как может выглядеть результат работы приведенного выше
фрагмента:
FileName: p0001807.jpg
FileDateTime: 929353056
FileSize: 378599
CameraMake: Eastman Kodak Company
CameraModel: KODAK DC265 ZOOM DIGITAL CAMERA (V01.00)
Dateline: 1999:06:14 01:37:36
Height: 1024
Width: 1536
IsColor: 1
FlashUsed: 0
FocalLength: 8.0mm
RawFocalLength: 8
ExposureTime: 0.004 s (1/250)
RawExposureTime: 0.0040000001899898
ApertureFNumber: f/ 9.5
RawApertureFNumber: 9.5100002288818
FocusDistance: 16.66m
RawFocusDistance: 16.659999847412
Orientation: 1
ExifVersion: 0200
совет
Для того чтобы эта функция работала, вы должны скомпилировать РНР с ключом --enable-
exif. Но зато для работы этой функции библиотека GD не нужна.
17.2.3. Операции с изображением
17.2.3.1. Яркостная коррекция: ImageGammaCorrect
int imagegammacorrect (int im, double inputgamma, double outputgamma)
Функция предназначена для тотальной коррекции яркости всего изображения
целиком. При этом должны быть заданы идентификатор изображения im, а также
входное и выходное значения параметра яркости. Как правило, входное значение
принимается за исходное, равное 1.0.
Чтобы понять, как эта функция работает, составим небольшой HTML-файл (листинг 17.1).
Листинг 17.1. Демонстрация яркостной коррекции: HTML-код
<html>
<ti11е>Демонстрация работы яркостной коррекции в PHP/GD</title>
<body bgcolor="#FFFFFF">
<font size=+l>
<h3>Демонстрация применения ImageGammaCorrect()</h3>
<table border=2>
<tr><th>Исходное изображение</th><th>Gamma=0. 5</th>
<th>gamma=2 .5
<tr>
<td><img src="fakir.png" width=250></td>
<td><img src="gamma.php?gamma=0.5" width=250></td>
<td><img src="gamma.php?gamma=2.5" width=250></td>
</tr>
</table>
Сайт управляется системой uCoz
|