Параметры изображения
Применение и установка
Здесь мы рассмотрим идею создания рисунков сценарием "на лету". Это очень может пригодиться при создании сценариев-счетчиков, графиков, картинок-заголовков, да и многого другого.
Для деятельности такого рода существует специальная библиотека под названием GD. Она содержит в себе множество функций (такие как рисование линий, растяжение/сжатие изображения, заливка до границы, вывод текста и т.д.), которые могут использовать программы, поддерживающие работу с данной библиотекой.
Поддержка GD включается при компиляции и установке PHP. Возможно, некоторые хостинг-провайдеры ее не имеют.
Для подключения модуля на вашем локальном диске нужно открыть в Блокноте файл php.ini из каталога с файлами Windows (обычно C:Windows)
Затем:1. Настройте следующий параметр:extension_dir=C:Program FilesPHP4extensions
Здесь мы уведомляем PHP, что модули он должен искать в каталоге C:Program FilesPHP4extensions.
2. Найдите закомментированную строку ;extension=php_gd.dll
и разкомментируйте ее, т.е. уберите ; в начале.
3. Сохраните изменения в файле php.ini
imageTypes
Определение графических форматов, поддерживаемых PHP.
Синтаксис:
int imageTypes(void)
Функция возвращает битовую маску графических форматов, которые поддерживает данная версия библиотеки GD: IMG_GIF | IMG_JPG | IMG_PNG | IMG_WBMP
<?php
if(imageTypes() && IMG_PNG) echo "формат PNG поддерживается";
?>
GetImageSize
Определение размеров рисунка.
Синтаксис:
array GetImageSize(string filename [,array imageinfo])
Эта функция предназначена для быстрого определения в сценарии размеров (в пикселях) и формата рисунка, имя файла которого передано ей в первом параметре. Она возвращает список из четырех элементов. Первый элемент (с ключем 0) хранит ширину картинки в пикселях, второй (с ключем 1) - его высоту. Ячейка массива с ключем 2 определяется форматом изображения: 1, если это GIF, 2 в случае JPG, 3 для PNG и 4 - SWF. Следующий элемент, имеющий ключ 3, будет содержать после вызова функции строку примерно следующего вида: height=sx width=sy, где sx и sy - соответственно ширина и высота изображения. Это применение задумывалось для того, чтобы облегчить вставку данных о размере изображения в тег <img>, который может быть сгенерирован сценарием:
<?php
$size_img=GetImageSize("img/image.jpg");
echo "<IMG src='img/image.jpg' $size_img>";
?>
Если при обращении к функции был указан второй необязательный массив imageinfo, в него можно записать дополнительную информацию о файле. Это могут быть, например, различные маркеры JPG APP (внедренная информация).Функция iptcparse() позволяет конвертировать эти данные в читаемый вид:
<?php
$size_img=GetImageSize("img/image.jpg", &$info_arr);
if(isset($info_Arr["APP13"])) {
$iptc = iptcparse($info_arr["APP13"]);
var_dump($iptc);
};
?>
Данная функция не требует наличия библиотеки GD.
imageSX
Определение ширины рисунка.
Синтаксис:
int imageSX(int im)
Функция возвращает горизонтальный размер изображения, заданного своим идентификатором im, в пикселях.
imageSY
Определение высоты рисунка.
Синтаксис:
int imageSY(int im)
Функция возвращает вертикальный размер изображения, заданного своим идентификатором im, в пикселях.
read_exif_data
Чтение заголовков EXIF из файла JPEG.
Синтаксис:
array read_exif_data(string filename)
Параметр filename не может быть URL.
Функция возвращает ассоциативный массив, в котором индексами являются имена заголовков EXIF.
Заголовки EXIF обычно хранят информацию цифровых камер (в различном виде).
<?php
$exif = read_exif_data("img/file.jpg");
print_r($exif);
?>
Данный пример выведет что-то наподобие:
Array( [FileName] => file.jpg [FileDateTime] => 1064566998 [FileSize] => 31646 [CameraMake] => Eastman Kodak Company [CameraModel] => KODAK DC265 ZOOM DIGITAL CAMERA (V01.00) [DateTime] => 2002:08:31 02:12:45 [Height] => 454 [Width] => 620 [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)
Данная функция доступна, если подключена библиотека EXIF.
Для этого необходимо либо снять комментарий со строки ;extension=php_exif.dll в файле php.ini (должно быть extension=php_exif.dll), либо откомпилировать PHP с параметром --enable-exif.
Для работы этой функции библиотека GD не требуется.
imageInterlace
Установка черезстрочности.
Синтаксис:
int imageInterlace(int im [, int interlace])
Если в функции задан второй необязательный параметр interlace, и он равен 1, то рисунок im отображается черезстрочно, если равен 0, то последовательно.
Функция возвращает текущую установку черезстрочности.
gd_info
Возвращает информацию о библиотеке GD.
Синтаксис:
array gd_info(void)
Функция возвращает массив, содержащий версию и параметры установленной библиотеки GD.
<?php
$gd=gd_info();
echo "<pre>";
print_r($gd);
echo "</pre>";
?>
Приведенный пример выведет примерно следующее:
Array( [GD Version] => bundled (2.0.22 compatible) [FreeType Support] => 1 [FreeType Linkage] => with freetype [T1Lib Support] => [GIF Read Support] => 1 [GIF Create Support] => [JPG Support] => 1 [PNG Support] => 1 [WBMP Support] => 1 [XBM Support] => 1 [JIS-mapped Japanese Font Support] => )
image_type_to_mime_type
Возвращает Mime-Type типа изображения.
Синтаксис:
string image_type_to_mime_type( int imagetype)
Функция возвращает MIME-тип картинки, заданный константой в параметре imagetype.
<?php
header("Content-type: " . image_type_to_mime_type(IMAGETYPE_PNG));
?>
Список констант и возвращаемых значений функции image_type_to_mime_type():
Данная функция не требует наличия библиотеки GD.
Манипулирование изображениями
imageCreate
Создание пустой картинки.
Синтаксис:
int imageCreate(int x, int y)
Создает пустую картинку размером x на y точек и возвращает ее идентификатор. После того, как картинка создана, вся работа с ней осуществляется именно через этот идентификатор, по аналогии с тем, как мы работаем с файлом через его дескриптор.
Пример:
Создание новой картинки при помощи GD и вывод ее в экран браузера:
<?php
header ("Content-type: image/png");
$im = @imagecreate (50, 100)
or die ("Не удается открыть новую картинку!");
$background_color = imagecolorallocate ($im, 255, 255, 255);
$text_color = imagecolorallocate ($im, 233, 14, 91);
imagestring ($im, 1, 5, 5, "A Simple Text String", $text_color);
imagepng ($im);
?>
imageCreateFromPng
Создание рисунка из файла PNG.
Синтаксис:
int imageCreateFromPng(string filename)
Эта функция загружают изображения из файла PNG в память и возвращает его идентификатор. Как и после вызова imageCreate(), дальнейшая работа с картинкой возможна только через этот идентификатор. При загрузке с диска изображение распаковывается и храниться в память уже в неупакованном формате, для того чтобы можно было максимально быстро производить с ним различные операции, такие как масштабирование, рисование линий и т.д.
Пример:
Пример нахождения ошибки при открытии графического файла.
function LoadPNG ($imgname) {
$im = @imagecreatefrompng ($imgname); /* Attempt to open */
if (!$im) { /* See if it failed */
$im = imagecreate (150, 30); /* Create a blank image */
$bgc = imagecolorallocate ($im, 255, 255, 255);
$tc = imagecolorallocate ($im, 0, 0, 0);
imagefilledrectangle ($im, 0, 0, 150, 30, $bgc);
/* Output an errmsg */
imagestring ($im, 1, 5, 5, "Error loading $imgname", $tc);
}
return $im;
}
imageCreateFromJpeg
Создание рисунка из файла JPEG.
Синтаксис:
int imageCreateFromJpeg(string filename)
Эта функция загружают изображения из файла в память и возвращают его идентификатор. Как и после вызова imageCreate(), дальнейшая работа с картинкой возможна только через этот идентификатор. При загрузке с диска изображение распаковывается и храниться в память уже в неупакованном формате, для того чтобы можно было максимально быстро производить с ним различные операции, такие как масштабирование, рисование линий и т.д.
imageCreateFromGif
Создание рисунка из файла GIF.
Синтаксис:
int imageCreateFromGif(string filename)
Эта функция загружают изображения из файла в память и возвращают его идентификатор. Как и после вызова imageCreate(), дальнейшая работа с картинкой возможна только через этот идентификатор. При загрузке с диска изображение распаковывается и храниться в память уже в неупакованном формате, для того чтобы можно было максимально быстро производить с ним различные операции, такие как масштабирование, рисование линий и т.д.