на стороне сервера. Большинство серверов с поддержкой PHP имеют эту библиотеку, а посему рисовать картинки стало по-настоящему просто, как с кухонным комбайном от тефаль. Использовать будем формат PNG, хотя ты можешь использовать GIF, JPEG и др, но если сравнишь их всех хотябы по весу, то увидешь приемущества первого перед остальными. Итак, поехали! Сначала надо дать твоему любимому браузеру понять, что мы ему не аштээмэльку какую-нибудь пихаем, а самую что ни на есть картинку. Для этого надо отправить соответствующий заголовок: header('Content-type: image/png'); После того, как файл "озаглавили", надо создать переменную типа "картинка" и обозначить width'ы и height'ы. Это делается с помощью функции imagecreate(width, height) или imagecreatetruecolor(width, height): $image=imagecreate(100, 100); Вот такая вот картинка. Если используешь imagecreatetruecolor, то картинка сразу становится черного цвета, а если imagecreate, то ее обязательно надо закрасить. Закрашивание можно осуществить двумя способами: 1. Обозначить цвет функцией imagecolorallocate (в случае создания картинки функцией imagecreate, первый же вызов функции imagecolorallocate закрасит картинку) и вызвать функцию imagefill для заполнения картинки цветом: $red=0; $green=255; $blue=0; $top=0; $left=0; $color=imagecolorallocate($image, $red, $green, $blue); imagefill($image, $top, $left, $color); 2. Вызвать функцию imagefill и передать ей в качестве цвета шестнадцатеричное значение (первая закраска у меня работает только при создании функцией imagecreatetruecolor): imagefill($image, 0, 0, 0x00FF00); Ну, вот, наша картинка приобрела ядовито-зеленый цвет, но запускать пока рано. Надо сначала наше творение генерировать и освободить память. Делаем это так: imagepng($image); //можно imagegif, imagegejpg и тд imagedestroy($image); //освобождаем память Изображение создали, закрасили, теперь нарисуем монитор. Нам понадобятся следующие функции: imagearc($image, X, Y, Width, Height, Start, End, color) - рисует дугу с центром в X и Y, ширина и высота элипса Width и Height, соответственно, Start и End - начало и конец в градусах 0 находится в 3-х часах, color - цвет; imageline($image, X1, Y1, X2, Y2, color) - рисует линию с началом в X1 и Y1, концом в X2 и Y2; imagefill($image, X, Y, color) - заполнение цветом X и Y - точка закрытой области для заливки; imagefilledellipse($image, X, Y, Width, Height, color) - параметры имеют то же значение, что и в функции imagearc; imagettfbbox(size, angle, name, text) - определяет размеры текста, где size - размер шрифта, angle - угол поворота текста, name - имя файла шрифта (или путь к шрифту), text - текст; imagettftext($image, size, angle, x, y, color, name, text) - выводит надпись, параметры те же, что и в imagettfbbox и добавляются: картинка, координаты левого нижнего угла и цвет. Начало координат рисунка находятся в верхнем левом углу. header('Content-type: image/png'); $image=imagecreatetruecolor(100, 100); imagefill($image, 0, 0, 0x00FF00); //Внешняя часть imagearc($image, 10, 10, 10, 10, 180, 270, 0x000000); //верхний левый imagearc($image, 90, 10, 10, 10, 270, 360, 0x000000); //верхний правый imagearc($image, 90, 90, 10, 10, 0, 90, 0x000000); //нижний правый imagearc($image, 10, 90, 10, 10, 90, 180, 0x000000); //нижний левый imageline($image, 10, 5, 90, 5, 0x000000); //верх imageline($image, 5, 10, 5, 90, 0x000000); //лево imageline($image, 10, 95, 90, 95, 0x000000); //низ imageline($image, 95, 10, 95, 90, 0x000000); //право //Внутренняя часть imagearc($image, 15, 15, 10, 10, 180, 270, 0x000000); //верхний левый imagearc($image, 85, 15, 10, 10, 270, 360, 0x000000); //верхний правый imagearc($image, 85, 85, 10, 10, 0, 90, 0x000000); //нижний правый imagearc($image, 15, 85, 10, 10, 90, 180, 0x000000); //нижний левый imageline($image, 15, 10, 85, 10, 0x000000); //верх imageline($image, 10, 15, 10, 85, 0x000000); //лево imageline($image, 15, 90, 85, 90, 0x000000); //низ imageline($image, 90, 15, 90, 85, 0x000000); //право //Закраска монитора imagefill($image, 10, 10, 0xFFFFFF); //внешний квадрат imagefill($image, 20, 20, 0x0000FF); //внутренний квадрат //Дружелюбный интерфейс :)) imagefilledellipse($image, 35, 30, 6, 6, 0xFFFF00); //правый глаз imagefilledellipse($image, 65, 30, 6, 6, 0xFFFF00); //левый глаз imagearc($image, 50, 60, 60, 40, 0, 180, 0xFFFF00); //печенькопоедательное //устройство imagepng($image); imagedestroy($image); ?> В этом коде куча недостатков: - я не дизайнер, так что на красоту не жалуйся :) - код неоптимизирован - код неудобен в использовании Если хочешь, можешь оптимизировать, на то ты и программист. Теперь подпишем наше творение в стиле shareware, четко по центру. Для этого надо вставить следующие строчки: $rect=imagettfbbox(10, 0, "arial.ttf", "TroneeX"); //размеры текста $w=$rect[2]-$rect[0]; //ширина $h=$rect[1]-$rect[7]; //высота $x=(100-$w)/2; //отступ слева $y=(100+$h)/2; //отступ справа imagettftext($image, 10, 0, $x, $y, 0xFFFFFF, "arial.ttf", "TroneeX");//текст Все! Шароварный монитор, поедающий печеньки, у нас готов. Переходим к диаграммам. Будем рисовать диаграмму посещений сайта. Счетчик я писать не буду, не мечтай. Количество посетителей будем получать функцией rand([$min, $max]). Эта функция возвращает свободное значение между $min и $max. Поехали: header('Content-type: image/png'); //заголовок $image=imagecreatetruecolor(400, 200); //картинка 400х200 imagefill($image, 0, 0, 0x5588BB); //типа, бордюр... //можно было и нормально, но //прочти заголовок статьи и ты //все поймешь :) function DrawCount($count, $index) //функция рисует колонку { global $image; imagefilledrectangle($image, (21+$index*10), 178, (21+$index*10+10), (178-$count*10), 0x336633); imagefilledrectangle($image, (21+$index*10+1), 178, (21+$index*10+10-1), (178-$count*10+1), 0x338833); } function DrawHLine($no) //деления по горизонтали { global $image; imageline($image, 15, (179-$no*10), 20, (179-$no*10), 0x5588BB); } function DrawVLine($no) //деления по вертикали { global $image; imageline($image, (381-$no*10), 179, (381-$no*10), 184, 0x5588BB); } //интерфейс imagefilledrectangle($image, 2, 2, 397, 197, 0x99CCFF); imageline($image, 20, 20, 20, 179, 0x5588BB); imageline($image, 20, 179, 380, 179, 0x5588BB); for ($i=0; $i<17; $i++) { DrawHLine($i); } for ($i=0; $i<37; $i++) { DrawVLine($i); } for ($i=0; $i<36; $i++) { $count=rand(0, 16); DrawCount($count, $i); } imagepng($image); imagedestroy($image); ?> Функция imagefilledrectangle($image, x1, y1, x2, y2, color) - рисует закрашенный прямоугольник. А все остальное просто, как два пальца об асфальт.
|