ресурс для начинающих веб-разработчиков
комплексные веб-услуги по созданию сайтов

Справочный материал по основным языкам программирования и верстки сайтов.

Готовая методика создания простых и сложных динамичных сайтов, с использованием PHP и MySQL.

Использование веб-редактора Adobe Dreamweaver в разработке сайтов.

Использование графических редакторов Adobe Flash, Adobe Photoshop, Adobe Fireworks в подготовке веб-графики.

Разработка веб-сайтов под "ключ".

Разработка отдельных фрагментов сайтов, консультации по вопросам верстки веб-страниц и веб-программирования.

Создание изображений. Функции создания изображений

Создание изображений

При создании изображений надо выполнить четыре основных шага:

  • Создание холста.
  • Рисование линий, многоугольников и т.д. или вывод текста.
  • Вывод рисунка в браузер.
  • Освобождение ресурсов.

Холст для изображения можно сделать заново или воспользоваться уже имеющимся рисунком, чтобы поверх него дорисовать что-либо или просто вывести в браузер готовое изображение.

Функции создания изображений

Для работы с изображениями средствами библиотеки GDLib используются функции создания изображений, которые создают либо новое изображение, либо изображение на основе существующего. При этом само изображение сохраняется в оперативной памяти, а функция возвращает дескриптор, который используется другими функциями для доступа к изображению. После завершения работы с изображением оно либо сохраняется на жесткий диск, либо непосредственно выводится в окно браузера.

Примечание. Большинство функций создания изображений возвращают дескриптор открытого изображения в окно браузера. Если вывод предупреждения нежелателен, его можно подавить, добавив перед функцией символ @.

Таблица. Функции создания изображений
Функция Описание
imagecreate($width, $height) Создает пустое изображение, ограниченное 256 цветами, размерами $width на $height пикселей. Для создания полноцветных изображений следует воспользоваться функцией imagecreatetruecolor()
imagecreatetruecolor($width, $height) Создает пустое полноцветное изображение черного цвета размерами $width на $height пикселей
imagecreatefromjpeg($filename) Создает изображение на основе JPEG-файла $filename. В качестве имени файла может использовать сетевой путь, начинающейся с http://
imageinterlace($image [, $interlace]) Для открытого JPEG-изображения (дескриптор $image) включается ($interlace = 1) или выключается ($interlace = 0)черезстрочечное формирование изображения. Параметр $interlace указывает, сколько бит изображения должна вернуть функция
imagecreatefromgif($filename) Создает изображение на основе GIF-файла $filename. В качестве имени файла может использовать сетевой путь, начинающейся с http://
imagecreatefrompng($filename) Создает изображение на основе PNG-файла $filename. В качестве имени файла может использовать сетевой путь, начинающейся с http://
imagesavealpha($image, $saveflag) Если $saveflag = 1, для открытого PNG-изображения $image создается полноценный альфа-канал; в противном случае, если $saveflag = 2, в качестве прозрачного может быть установлен только один цвет изображения.
imagecreatefromgd($filename) Создает изображение на основе GD-файла $filename. В качестве имени файла может использовать сетевой путь, начинающейся с http://
imagecreatefromgd2($filename) Создает изображение на основе GD2-файла $filename. В качестве имени файла может использовать сетевой путь, начинающейся с http://
imagecreatefromgd2part ($filename, $x, $y, $width, $height) Создает изображение на основе файла $filename, приэтом за основу берется не все изображение, а лишь прямоугольник, координаты левого верхнего угла которого определяются параметрами $x, $y, а ширина и высота соответственно параметрами $width и $height
imagecreatefromstring($str) Создает изображение из потока, передаваемого в строке $str
imagecreatefromwbmp ($filename) Создает изображение на основе WBMP-файла $filename. В качестве имени файла может использовать сетевой путь, начинающейся с http://
imagecreatefromxbm ($filename) Создает изображение на основе XBM-файла $filename. В качестве имени файла может использовать сетевой путь, начинающейся с http://
imagecreatefromxpm ($filename) Создает изображение на основе XPM-файла $filename. В качестве имени файла может использовать сетевой путь, начинающейся с http://
imagedestroy($image) Принимает в качестве параметра $image дескриптор изображения и освобождает занятую им память

Создание и уничтожение изображения:

<?php
//создаем пустое изображение размером 100х100 пикселей
$image=imagecreatetruecolor(100, 100);
echo $image; //Возвращает дескриптор Resource id #2
if(!$image)
{
//Если изображение успешно создано уничтожаем его
imagedestroy ($image);
}
?>

Примечание. Функция imagedestroy() уничтожает не файлы на жестком диске, а их образы в оперативной памяти.

Создание изображения на основе существующего JPEG-файла:

<?php
//создаем изображение на основе JPEG-файла
$image=imagecreatefromjpeg("images/100-IMGA0390.JPG");
echo $image; //Возвращает дескриптор Resource id #3
if(!$image)
{
//Если изображение успешно создано уничтожаем его
imagedestroy ($image);
}
?>

Функции сохранения и вывода изображений

Данная группа функций позволяет сохранять открытые файлы на жесткий диск или выводить их в окно браузера.

Функции данной группы в качестве первого параметра принимают дескриптор открытого изображения $image. Если ни каких параметров не передается, изображение выводится непосредственно в окно браузера. Если же в качестве второго параметра $filename указывается путь к файлу, изображение сохраняется на жестком диске. В случае успеха функции возвращают true, в случае неудачи false.

Таблица. Функции сохранения и вывода изображений
Функция Описание
imagejpeg($image [, $filename [, $quality]]) Возвращает или сохраняет в файл $filename изображение в формате JPEG со степенью сжатия $quality. Параметр $quality может принимать значения от 0 до 100 (по умолчанию 75), что соответствует максимальному и минимальному сжатию. При максимальной степени сжатия качество изображения будет минимально
imagegif($image [, $filename]) Возвращает или сохраняет в файл $filename изображение в формате GIF
imagepng($image [, $filename]) Возвращает или сохраняет в файл $filename изображение в формате PNG
imagegd($image [, $filename]) Возвращает или сохраняет в файл $filename изображение в формате GD
imagegd2($image [, $filename]) Возвращает или сохраняет в файл $filename изображение в формате GD2
imagexdm($image [, $filename [, $foreground]) Возвращает или сохраняет в файл $filename изображение в формате XBM. Аргумент $foreground содержит идентификатор переднего плана (по умолчанию черный)
imagewbmp($image [, $filename [, $foreground]) Возвращает или сохраняет в файл $filename изображение в формате WBMP. Аргумент $foreground содержит идентификатор переднего плана (по умолчанию черный)
image2wbmp($image [, $filename]) Возвращает или сохраняет в файл $filename изображение в формате WBMP
jpeg2wbmp($jpegname, $wbmpname, $height, $width, $threshold) Конвертирует JPEG-файл $jpegname в файл WBMP-формата $wbmpname. Параметры $height, $width определяют высоту и ширину конечного WBMP-изображения
png2wbmp($pngname, $wbmpname, $height, $width, $threshold) Конвертирует PNG-файл $pngname в файл WBMP-формата $wbmpname. Параметры $height, $width определяют высоту и ширину конечного WBMP-изображения

При выводе изображения в окно браузера при помощи функций из таблицы, следует помнить, что перед отправкой бинарных данных необходимо сообщить браузеру MIME-тип изображения.

Примечание. Для создания файлов в формате JPEG следует включить черезстрочечное создание изображений функции imageinterlace().

Вывод JPEG-изображения:

<?php
//Создаем изображение на основе JPEG-файла
$image=imagecreatefromjpeg("images/100-IMGA0390.JPG");
if($image)
{
//Отправляем HTTP-заголовок Content-type
header("Content-type: image/jpeg");
//Выводим изображение в браузер
imagejpeg($image);
//уничтожаем изображение в память
imagedestroy ($image);
}
?>

Следует учитывать, что документ не может содержать сразу несколько изображений. Попытка отправить HTTP-заголовки уже после вывода тела документа приведет к сообщению Warning: Cannot modify header information - headers already sent by (Предупреждение: HTTP-заголовки не могут быть изменены, так как они уже отправлены).

Warning: Cannot modify header information - headers already sent by

Поэтому при использовании библиотеки GDLib скрипт не должен выводить ничего, кроме изображений. Если на странице необходимо вывести несколько динамических изображений, следует обратиться к тегу <IMG>.

Функции преобразования изображений

Данная группа функций осуществляет изменение размера изображений, поворот и т.д.

Примечание. Часть функций этой группы принимают два дескриптора открытых изображений: источника $src_im и конечного изображения $dst_im.

Таблица. Функции преобразования изображений
Функция Описание
imagecopy ($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h) Копирует область изображения $src_im на изображение $dst_im. Верхний левый угол копируемой области находится в точке с координатами $src_x, $src_y. Параметры $src_w, $src_h определяют ширину и высоту копируемой области соответственно. Скопированная область помещается на изображение $dst_im в точку с координатами $dst_x, $dst_y
imagecopymerge ($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct) Копирует область изображения $src_im и объединяет ее с изображением $dst_im. При этом можно задать степень прозрачности накладываемого изображения при помощи параметра $pct, который принимает значение от 0 до 100. При значении равном 0 накладываемое изображение становиться полностью прозрачным. При $pct раным 100 функция работает аналогично функции imagecopy(). Остальные параметры функции аналогичны параметрам функции imagecopy()
imagecopymergegray ($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct) Функция аналогична функции imagecopymerge(), однако при совмещении областей сохраняются оттенки изображения источника $src_im. Сохранение оттенков происходит вследствие удаления цветовой информации из совмещаемых пикселов изображения-назначения $dst_im до операции совмещения
imagecopyresampled ($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) Копирует прямоугольную область изображения-источника $src_im на целевое изображение $dst_im. При копировании пиксели интерполируются, чтобы сохранить максимальную четкостьи яркость. Если размеры исходной области назначения различны, топроисходит соответствующее сжатие или растяжение копируемой области. Параметры $src_x, $src_y определяют верхний правый угол прямоугольника на изображении-источнике. Параметры $src_w, $src_h соответственно ширину и высоту этого прямоугольника. Аналогичные параметры с префексом $dst_w, $dst_h определяют параметры прямоугольника на конечном изображении
imagecopyresized ($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) Функция аналогична функции imagecopyresampled(), но при копировании не происходит интерполяции копируемых пикселей для сохранения четкости и яркости
imagerotate($src_im, $angle, $bgd_color) Осуществляет поворот изображения $src_im на угол $angle, заданный в градусах. В аргументе $bgd_color передается идентификатор фонового цвета для заливки пустых областей, которые будут получены в процессе поворота изображения
imagefilter($src_im, $filtertype [, $args]) Применяет фильтр к изображению $src_im

Создание уменьшенной копии изображения

Уменьшение размера изображения оформим в виде отдельной функции resizeimg (). Функция будет принимать четыре параметра:

  • resizeimg ($filename, $smallimage, $w, $h);
  • $filename — задает путь к исходному файлу, который будет подвергаться сжатию;
  • $smallimage — путь к уменьшенной копии изображения;
  • $w, $h — ширина и высота уменьшенного изображения.

Функция изменения размера изображения:

<?php
function resizeimg ($filename, $smallimage, $w, $h)
{
//1. Коррекция параметров $w, $h
//Определяем коэффициэнт сжатия изображения
$ratio=$w/$h;
//Получим размеры исходного изображения
list($width, $height)=getimagesize($filename);
//Если размеры меньше, то маштабирование не нужно
if(($width<$w) && ($height<$h))
{
copy($filename, $smallimege);
return true;
}
//Получаем коэффициент сжатия исходного изображения
$src_ratio=$width/$height;
//Вычисляем размеры уменьшенной копии, чтобы
//при маштабировании сохранились пропорции
//исходного изображения
if($ratio<$src_ratio) $h=$w/$src_ratio;
else $w=$h*$src_ratio;
///////////////////////////////////////////////
//2.Создание уменьшенной копии изображения
//Создаем пустое изображение
//размером $wx$h пикселей
$dest_img=imagecreatetruecolor($w, $h);
//Открываем файл, который будет подвергаться сжатию
$src_img=imagecreatefromjpeg($filename);
//Маштабируем изображение
imagecopyresampled($dest_img, $src_img,
0, 0,
0, 0,
$w, $h,
$width, $height);
//Сохраняем уменьшенную копию в файл
imagejpeg($dest_img, $smallimege);
//Чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return true;
}
?>

Первая часть функции посвящена коррекции входных параметров $w, $h, задающих ширину ивысоту уменьшенного изображения. Это необходимо для того, чтобы изображение не было искажено преобразованием. Вторая часть функции предназначена для создания уменьшенной копии $smallimege из исходного изображения $filename. Уменьшенное изображение создается при помощи функции imagecreatetruecolor(), которая возвращает дескриптор $dest_img. Дескриптор исходного изображения $src_img открывается при помощи функции imagecreatefromjpeg(). После этого исходное изображение переносится на уменьшенную копию при помощи функции imagecopyresampled().

Рассмотрим пример подключения функции resizeimg().

Создание уменьшенной копии изображения с использование функции resizeimg():

<?php
//Подключаем файл с функцией resizeimg()
require_once("483.php");
//Вызываем функцию resizeimg()
//автоматического маштабирования изображения 100-IMGA0390.JPG,
//уменьшенную копию которого следует записать в файл img_small.jpg
//Максимальные размеры ограничены 320 пикселями
//по ширине и 180 пикселями по высоте
resizeimg("images/100-IMGA0390.JPG","images/img_small.jpg", 320,180)
?>

После вызова скрипта, в корневом каталоге сайта, новый появится файл img_small.jpg.

Вывод изображения img_small.jpg:

<?php
//Создаем изображение на основе JPEG-файла
$image=imagecreatefromjpeg("images/img_small.jpg");
if($image)
{
//Отправляем HTTP-заголовок Content-type
header("Content-type: image/jpeg");
//Выводим изображение в браузер
imagejpeg($image);
//уничтожаем изображение в память
imagedestroy ($image);
}
?>

Поворот изображения

Для поворота изображения удобно воспользоваться функцией imagerotate().

Примечание. Третий параметр функции imagerotate() требует задания цвета. Функция для формирования цвета будет рассматриваться далее.

Поворот изображения при помощи функции imagerotate():

<?php
//создадим изображение на основе JPEG-файла
$image=imagecreatefromjpeg ("images/100-IMGA0390.JPG");
if($image)
{
//Задаем белый цвет
$white=imagecolorallocate($image, 255, 255, 255);
//Поворачиваем изображение на 45 градусов
$rotate=imagerotate($image, 45, $white);
//Отправляем заголовок Content-type
header("Content-type: image/jpeg");
//Выводим изображение в браузер
imagejpeg($rotate);
//Уничтожаем изображение в памяти
imagedestroy ($image);
imagedestroy($rotate);
}
?>