Рисование в PHP
В прошлой статье мы с Вами познакомились с основными принципами создания изображений в PHP. А в этой статье мы с Вами будет рисовать различные графические примитивы в PHP: точку, линию, прямоугольник, дуги (в частном случае, эллипс и окружность) и многоугольники.
Я решил, что самый простой способ усвоения данного материала - это привести относительно большой код, а затем подробнейшим образом его объяснить. Вдобавок, Вы можете его сразу же скопировать и вставить к себе в скрипт, посмотрев на результат.
<?php
$i = imageCreate(200, 300);
$color = imageColorAllocate($i, 255, 255, 0);
imageSetPixel($i, 30, 50, $color);
$color = imageColorAllocate($i, 255, 0, 0);
imageSetThickness($i, 3);
imageLine($i, 10, 10, 100, 100, $color);
imageSetThickness($i, 10);
imageRectangle($i, 0, 0, imageSX($i), imageSY($i), $color);
$color = imageColorAllocate($i, 255, 0, 0);
imageFilledRectangle($i, 100, 200, 150, 240, $color);
imageSetThickness($i, 2);
imageArc($i, 50, 100, 40, 50, 90, 300, $color);
$color = imageColorAllocate($i, 0, 255, 0);
imagePolygon($i, array(10, 20, 120, 250, 190, 290, 100, 290, 10, 20), 4, $color);
Header("Content-type: image/jpeg");
imageJpeg($i);
imageDestroy($i);
?>
Код очень прозрачный. Пожалуй, рисование в PHP (да и в других языках тоже) - это самое простое занятие, однако, чтобы его понять и уметь использовать надо знать основной набор функций, которые, в частности, использовались в примере выше. И поэтому давайте я сейчас Вас с ними познакомлю:
- imageSetPixel(resource image, int x, int y, int color) - элементарная функция, знаний которой уже теоретически достаточно для рисования абсолютно любых изображений в PHP. Данная функция рисует пиксель с координатами x и y на изображении image с цветом color.
- imageSetThickness(resource image, int thickness) - функция, устаналивающая толщину линий при рисовании прямоугольников, эллипсов, самих линий и других фигур в PHP.
- imageLine(resource image, int x1, int y1, int x2, int y2, int color) - важнейшая функция, позволяющая рисовать линии на изображении image из начальной точки с координатами x1 и y1 в конечную точку с координатами x2 и y2. Линия будет нарисована цветом color.
- imageRectangle(resource image, int x1, int y1, int x2, int y2, int color) - функция для рисования контура прямоугольника на изображении image с координатами левого верхнего угла x1 и y1 и с координатами правого нижнего угла - x2 и y2. Цвет контура прямоугольника будет color.
- imageFilledRectangle(resource image, int x1, int y1, int x2, int y2, int color) - аналогична функции imageRectange(), однако, эта функция рисует не контур, а уже закрашенный прямоугольник.
- imageArc(resource image, int cx, int cy, int w, int h, int s, int e, int color) - эта функция в общем случае рисует дугу эллипса на изображении image с координатами центра cx и cy. Ширина и высота эллипса - w и h соответственно. Начальный угол - s, конечный угол - e. Обратите внимание, что ноль находится на 3-х часах (кто помнит из тригонометрии единичную окружность и вспомнит, где ноль - сразу поймут, а другим лучше посмотреть результат выполнения данной функции и проаналазировать результат). Рисование дуги в PHP идёт против часовой стрелки (как и на единичной окружности в тригонометрии). Цвет дуги задаётся аргументов color. Если Вы укажите параметр s = 0, а e = 360, то у Вас получится эллипс. А если ещё при этом w = h, то получится окружность.
- imagePolygon(resource image, array points, int num_points, int color) - рисует многоугольник на изображении image с координатми вершин, заданных в массиве points (x1, y1, x2, y2 и так далее) и общим количеством вершин, заданным num_points. Цвет линий задан аргументом color.
Все остальные функции, которые мы использовали в примере, были подробно описаны в статье: создание изображений в PHP.
Вот и всё! Дальше я рекомендую Вам внимательнейшим образом изучить пример выше, запустить его, поиграться с ним. И после этого Вы уже сможете легко рисовать в PHP, создавая свои графические шедевры!
-
- Михаил Русаков
Комментарии (14):
У меня почему-то вместо рисунка ошибка вышла: Warning: Cannot modify header information - headers already sent by (output started at Z:homeIAlim.ruwwwTest.php:231) in Z:homeIAlim.ruwwwTest.php on line 252 . А дальше сплошные иероглифы вот такие
Ответить
Вы просто скопировали код из примера? Или добавили что-то своё? Такая ошибка возникает, когда до header() вызывается echo или идёт HTML-код.
Ответить
Скопировал
Ответить
Тогда убедитесь, что нет никаких лишних пробелов, переходов на новые строки и прочего за пределами <?php ?>. Также если стоит кодировка UTF-8, то поставьте UTF-8 без BOM.
Ответить
Вот код: <?php $i = imageCreate(200, 300); $color = imageColorAllocate($i, 255, 255, 0); imageSetPixel($i, 30, 50, $color); $color = imageColorAllocate($i, 255, 0, 0); imageSetThickness($i, 3); imageLine($i, 10, 10, 100, 100, $color); imageSetThickness($i, 10); imageRectangle($i, 0, 0, imageSX($i), imageSY($i), $color); $color = imageColorAllocate($i, 255, 0, 0); imageFilledRectangle($i, 100, 200, 150, 240, $color); imageSetThickness($i, 2); imageArc($i, 50, 100, 40, 50, 90, 300, $color); $color = imageColorAllocate($i, 0, 255, 0); imagePolygon($i, array(10, 20, 120, 250, 190, 290, 100, 290, 10, 20), 4, $color); Header("Content-type: image/jpeg"); imageJpeg($i); imageDestroy($i); ?>
Ответить
Прекрасно всё рисуется. Читайте предыдущее сообщение.
Ответить
У меня всё та же ошибка стоит P.S. Проверял, обновилось
Ответить
И почему Вы обманываете, что просто скопировали код? Test.php:231 - это откуда? В данном коде нет 231-й строки.
Ответить
Я вставил этот код в файле в котором уже содержался контент
Ответить
Так я про это и спрашивал. Вы там используете небось целую кучу echo или вообще HTML-код. В следующий раз внимательнее читайте ответы.
Ответить
Там не было использованно ранее этого ни одного PHP, и JavaScript кода.
Ответить
Последний раз повторяю. Вы там использовали HTML - это ЗАПРЕЩЕНО (!!!) использовать до вызова функции header().
Ответить
Получается, что кроме изображения больше ничего не может быть в файле? Весь остальной контент игнорируется, выводится только изображение.
Ответить
Спасибо за статью! Объясняю для новичков - вы создаете КАРТИНКУ, т.е. отдельный файл с картинкой! Например урл картинки: http://мой-сайт/test.php Теперь хотите использовать эту картинку у себя в коде, для этого пользуетесь так: <img src="http://мой-сайт/test.php" alt="" />
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.