Pers.narod.ru. PHP. Статьи. Рисуем звёзды на PHP |
Рисовать красные (необязательно красные) звёзды - и алгоритмически полезное, и политически правильное упражнение для начинающего программиста на PHP.
Небольшой скрипт, опубликованный на этой странице,
возвращает картинку в формате GIF, содержащую нужную нам звёздочку, таким образом, скрипт может быть указан в качестве
атрибута src
тега img
:
<img src="http://scripts.kislenko.net/star.php?r=100&back=-1&fill=FF0000">
Этот код нарисует вот что:
Скрипт проверяет наличие библиотеки GDLib, если нужно, пытается загрузить её. Выставляет русскую локаль.
Параметры передаются только через URL, то есть, методом GET
. При вызове без параметров выдаются информация о скрипте и ссылки.
Список параметров скрипта следующий:
n
- количество лучей звезды, ограничения от 3 до 36, по умолчанию 5
r
- радиус окружности, в которую вписана звезда, ограничения от 10 до 1000, по умолчанию 100. Ширина и высота рисунка, содержащего звезду, будут 2*r+4
, 4 пискела по краям добавляются, чтоб компенсировать неизбежные ошибки счёта с вещественными числами
k
- коэффициент, влияющий на длину лучей звезды, вещественное число из диапазона ]0,1[
(не включая границы), по умолчанию k=0.5
. Чем ближе значение k
к 1, тем короче лучи по отношению к радиусу вписанной в звезду окружности. При близости k
к 1 звезда может превратиться в многоугольник или рисунок "солнышка"
back
- цвет фона рисунка, должен быть передан в виде RRGGBB
, где RR, GG, BB - 16-ричные Интенсивности красного, зелёного и синего от 00 до FF (от 0 до 255 десятичного) включительно, то есть, используется типовая система записи цвета. Если передано любое значение back
меньше 0, фон будет прозрачным. По умолчанию белый
lines
- цвет контура звезды, также в виде RRGGBB
, если передано число меньше 0, линии обрамления не рисуются, по умолчанию чёрный
fill
- цвет заливки звезды в виде RRGGBB
, если передано число меньше 0, заливки нет, также её нет по умолчанию. Получается, передав back=lines=fill=-1
, можно вообще ничего не рисовать :)
debug
- если параметр включён, видны вписанная и описанная окружности, нарисованные цветом lines
angle
- если передан целым числом, задаст угол поворота рисунка. Это будет работать только на хостинге, где PHP скомпилирован со встроенной библиотекой GD. У меня эта возможность отключена, так что вращение картинок не работаетБольшинство ограничений на параметры достаточно произвольны, при желании их можно поменять.
Всю основную работу по рисованию контура звезды выполняет функция draw_lines
, её параметр $img
обозначает ресурс рисунка, созданный стандартной функцией
imagecreatetruecolor
, параметры $w
и $h
- высота и ширина рисунка в пикселах, остальные параметры обозначены так же,
как в списке выше. Соответственно, код этой функции можно считать алгоритмом рисования звезды с произвольным количеством лучей.
function draw_lines ($img,$n,$w,$h,$r,$k,$lines) { //Процесс отрисовки $a0 = 90/$n; //Начальный угол $da = 2 * $a0; //Шаг по углу $a = $a0; //Переменная для измерения угла $x0 = $w/2; $y0 = $h/2; //Центр отрисовки = центр рисунка $x = $x0 + round($r*cos($a*pi()/180)); $y = $y0 - round($r*sin($a*pi()/180)); for ($i=1; $i<$n+1; $i++) { $a+=$da; $x2=$x0+round($r*$k*cos($a*pi()/180)); $y2=$y0-round($r*$k*sin($a*pi()/180)); imageline ($img, $x, $y, $x2, $y2, $lines); $a+=$da; if ($a>360) $a=$a0; $x=$x2; $y=$y2; $x2=$x0+round($r*cos($a*pi()/180)); $y2=$y0-round($r*sin($a*pi()/180)); imageline ($img, $x, $y, $x2, $y2, $lines); $x=$x2; $y=$y2; } }
Скачать скрипт Star ("Звездец") в архиве ZIP (2 Кб)
Ещё примеры вызова скрипта:
И самая большая (по ссылке создастся большая картинка!)
А при построении вот этой звездени использовано отношение золотого сечения
Но не между радиусами окружностей, между радиусами будет страшнее
гостевая; E-mail |