Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

PHP, SQL, SSI-Дневник ламера, превращающегося в ГУРУ :-) Рисование в PHP


Информационный Канал Subscribe.Ru

Выпуск 12
 
Дневник ламера, превращающегося в гуру
 
     
 

Разговаривают два менеджера. Один другому говорит:
-Слушай, вчера сел за компьютер поработать, а тот не включается. Я и так, и эдак,
все равно не включается. Позвал админа. Он пришел, посмотрел, воздел руки к небу, что-то пробормотал, три раза обошел вокруг стула, пнул какой-то ящик, снова воздел руки к небу, что-то пробормотал - и компьютер заработал!!!
Разговаривают два админа. Один другому:
-Слушай, вот есть чайники! вчера меня вызывают, машина не включается. Пришел,
смотю: этот олух до такой степени извертелся на стуле, что провод вокруг стула
накрутил;я провод размотал, воткнул вилку в розетку, системный блок подвинул - все
заработало !


Сегодняшний выпуск на тему рисования в PHP. Это просто. Сначала создаётся изображение одной из нижеприведённых команд:

$image = imagecreate(width X, height Y) -- Создаёт новую картинку c идентификатором $image и параметрами width X - ширина, height Y - высота. С которым в последующем и будем работать. Или можно по другому:

$image = imagecreatefromgif("имя файла или URL"); -- Создаёт картинку из Гифа
$image = imagecreatefromjpeg("имя файла или URL"); -- Создаёт картинку из Jpeg файла
$image = imagecreatefrompng("имя файла или URL"); -- Создаёт картинку из Png файла
$image = imagecreatefromwbmp("имя файла или URL"); -- Создаёт картинку из Bmp файла


Регистрируем цвета(добавляем в палитру), которые будем использовать:
$colorBackgr   =    imageColorAllocate($image, 255, 255, 255); // Белый Цвет
$colorForegr     =  imageColorAllocate($image, 255, 0, 0); // Красный Цвет
$textcolor         = imageColorAllocate ($image, 0, 0 , 0 ); // Чёрный цвет (отсутствие какого либо цвета)

imageColorDeAllocate($colorForegr);
Удаляем цвет из палитры, если не нужен


Формат команды простой:
imageColorAllocate(идентификатор рисунка , RED, GREEN, BLUE);

RGB - это я выучил ещё со времён ZX Spectrum-а 8-)))

Затем рисуем фон, он у нас будет простым квадратом размером во всё поле рисунка:
imageFilledRectangle($image, X1, Y1, X2, Y2, $colorBackgr);
Эта команда рисует прямоугольник, залитый указанным цветом в идентификаторе рисунка $image по начальным координатам: X1, Y1 и конечными X2, Y2 Цвет: $colorBackgr

Можно просто нарисовать прямоугольник без заливки командой:
ImageRectangle($image, X1, Y1, X2, Y2, $color);

Или линию:
ImageLine($image, X1, Y1, X2, Y2, $color);

Есть интересная команда, рисования многоугольников( c замкнутым !!! контуром ), которая берёт координаты вершин из массива:
$arr = array(X1, Y1, X2, Y2, X3, Y3, X4, Y4, X5, Y5);
ImagePolygon($image, $arr, 5, $color);
$arr - массив, содержащий данные вершин многоугольника
5 - количество вершин, выгребающихся из массива
$color - цвет рамки многоугольника

Есть аналогичная команда для рисования многоугольника с заливкой:
ImageFilledPolygon($image, $arr, 5, $color);

// Отправляем заголовок Content-type
//header("Content-type:  image/gif"); Который говорит браузеру, что дальнейший поток данных будет КАРТИНКОЙ !
header("Content-type:  image/jpeg");

// задаем чересстрочный режим
imageInterlace($image, 1);

// делаем цвет фона прозрачным
imageColorTransparent($image, $colorBackgr);

// и выводим изображение
//imageJPEG($image);
imageJPEG($image);

Вообще у меня при выводе изображения в формате PNG наблюдались всякие глюки, поэтому рекомендую делать всё в формате JPG

Можно выводить изображения в других форматах:
imagepng($image);
imagegif($image);
imagewbmp($image);
Тут вы думаю сами догадались, как это работает. НО !!! Tckb вы выводите изображение в другом формате, то его(этот формат) надо также указывать и при отправке заголовка, который отправляется ДО начала вывода потока данных:
header("Content-type:  image/png");
header("Content-type:  image/gif");
header("Content-type:  image/wbmp");

Далее... Учитывая, что PHP-шное рисование используется в основном для счётчиков и вывода текста, поверх картинки, то приведу команды работы с текстом:

imagestring($image, 3, X, Y, "Текст надписи", $textcolor);

Здесь:
$image - идентификатор рисунка.
3 - Размер шрифта.
X, Y - Верхняя левая точка начала надписи
"Текст надписи" - Сами догадайтесь, что это такое %)
$textcolor - Цвет текста, заданный выше командой ImageColorAllocate (он у нас чёрный)

imagestringup($image, 3, X, Y, "Текст надписи", $textcolor);
Эта команда рисует вертикальный текст, тоесть сверху вниз. параметры теже.


imagettftext
($image, размер, угол наклона текста, X, Y, $color, "шрифт xxx.ttf", "сам текст собсно");
Эта команда рисует текст, используя подключаемый стандартный файл шрифтов xxxx.ttf Параметры думаю объяснять не надо.

Также можно рисовать:

imageellipse($image, X, Y, ширина, высота, $color); // Эллипс


imagearc($image, CX, CY, W, H, S, e, $color); // Дуга, которая представляет из себя кусок окружности эллипса
Рисуется дуга, которая представляет из себя кусок эллипса
CX, CY - центр эллипса
W, H - высота, ширина
S - Стартовый угол дуги (если 0 то начало на три часа)
e - Конечный угол дуги

Счётчики на сайтах устроены совсем просто:

$image = imagecreatefromjpeg("имя файла или URL");
// Берём шаблон картинки, загружая её из файла

$textcolor = imagecolorresolve($image, R, G, B); // Это команда, которая возвращает номер цвета, который ближе всего в палитре шаблонной картинки к параметрам R, G, B Что совсем не значит, что он будет именно такой, какой вы хотите, ибо в палитре нужный цвет может просто отсутствовать. Поэтому лучше заранее выбрать этой командой подходящий номер цвета, а потом уже задать его номером

imagestring($image, 3, X, Y, "Текст надписи", $textcolor);
// Пишем по картинке чё нить нужное и важное

header
("Content-type:  image/jpeg");

imageInterlace
($image, 1);

// и выводим изображение
imageJPEG
($image);

Затем данный скриптик пихаем в counter.php и на страничке её помещаем в таком вот виде:
<img src="counter.php" width="X" height="Y">

Если вам надо в скрипте потереть картинку на идентификаторе, а потом снова её создать, то можно воспользоваться командой:
imagedestroy($image);

Вот в принципе и всё. Основные команды работы с графикой я вам показал, далее, если что-то ещё нужно, то курите мануалы %))) Там много всего есть.

 
          Евгений Евсеев    legat /БарбоС/ nm.ru      

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.php1sql1ssi
Отписаться
Вспомнить пароль

В избранное