PHP: полный мануал с примерами, функциями и ООП
Практический мануал PHP: от переменных и читаемого кода до безопасных форм, интеграций, базы данных и ООП на примере магазина. Учебный маршрут, поиск функций, подробные примеры, разбор ошибок и исходники для скачивания.

Дерево руководства
Глава 416 · После первых изображений, массивов и объектов Gmagick
Gmagick: ломаная, многоугольник и плавный маршрут
Выбрать открытый или закрытый контур, управлять кривой Безье и преобразовать команды для схемы доставки.
Соединить точки маршрута, не замыкая последнюю сторону
Чтобы показать маршрут доставки схематически, сначала соединим четыре опорные точки прямыми отрезками. polyline оставляет путь открытым: нижний промежуток между первой и последней точками не замыкается. Это отличает линию маршрута от закрашенной области.

<?php
$points = [['x'=>30,'y'=>150], ['x'=>100,'y'=>30],
['x'=>210,'y'=>30], ['x'=>290,'y'=>150]];
$draw = new GmagickDraw();
$draw->setFillColor('none');
$draw->setStrokeColor('#244f65');
$draw->setStrokeWidth(4);
$draw->polyline($points);Каждый внутренний массив описывает одну точку ключами x и y. Квадратные скобки внешнего массива сохраняют их порядок. polyline проводит три отрезка:1→2,2→3,3→4. none явно отключает заливку, а цвет и толщина относятся к обводке. Полная программа рисует на белом320×200; пиксель(160,150) снизу остаётся белым, потому что замыкающего отрезка нет.
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick();
$image->newImage(320,200,'#ffffff','png');
$points=[['x'=>30,'y'=>150],['x'=>100,'y'=>30],['x'=>210,'y'=>30],['x'=>290,'y'=>150]];
$draw=new GmagickDraw();$draw->setFillColor('none');$draw->setStrokeColor('#244f65');$draw->setStrokeWidth(4.0);
$draw->polyline($points);$image->drawImage($draw);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-open-route.png');
gmReport('gm98-path-polyline',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.polyline", "gmagick.drawimage", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-open-route.png"],
['geometry_open_route'=>gmInspect('gm98-open-route.png')['width']===320&&gmInspect('gm98-open-route.png')['height']===200],
$errors ?? [], []);
echo "gm98-open-route.png 320x200\n";
Ожидаемый результат
gm98-open-route.png 320x200
Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.
Вывод успешного запуска
gm98-open-route.png 320x200
Массив точек — данные вашей задачи. Если они приходят из формы или файла, проверяйте наличие обоих ключей и числовой тип до рисования. Порядок существенно влияет на маршрут: перестановка двух точек может создать пересечение. Эти экранные координаты не являются географической широтой и долготой.
Замкнуть те же вершины и заполнить область
Те же четыре точки теперь описывают зону, которую надо выделить цветом. polygon соединяет последнюю точку с первой автоматически. На результате появляется нижняя синяя граница и янтарная внутренняя область. Два противоположных угла подходят rectangle, но не описывают полноценный многоугольник.

<?php
$points = [['x'=>30,'y'=>150], ['x'=>100,'y'=>30],
['x'=>210,'y'=>30], ['x'=>290,'y'=>150]];
$draw = new GmagickDraw();
$draw->setFillColor('#e5a74a');
$draw->setStrokeColor('#244f65');
$draw->setStrokeWidth(4);
$draw->polygon($points);Все четыре вершины передаются в порядке обхода границы. Первая точка не дублируется в конце: замыкание делает polygon. Внутри действует fill, по границе stroke. Программа проверяет центр(160,100) и нижнюю границу(160,150), поэтому различие с открытым polyline подтверждается пикселями, а не только названиями методов.
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick();
$image->newImage(320,200,'#ffffff','png');
$points=[['x'=>30,'y'=>150],['x'=>100,'y'=>30],['x'=>210,'y'=>30],['x'=>290,'y'=>150]];
$draw=new GmagickDraw();$draw->setFillColor('#e5a74a');$draw->setStrokeColor('#244f65');$draw->setStrokeWidth(4.0);
$draw->polygon($points);$image->drawImage($draw);
$errors=['coordinates'=>gmTry(fn()=>(new GmagickDraw())->polygon([['x'=>1],['x'=>10,'y'=>20],['x'=>30,'y'=>40]]))];
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-closed-area.png');
gmReport('gm98-path-polygon',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.polygon", "gmagick.drawimage", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-closed-area.png"],
['malformed_array'=>$errors['coordinates']['class']==='Exception','geometry_closed_area'=>gmInspect('gm98-closed-area.png')['width']===320&&gmInspect('gm98-closed-area.png')['height']===200],
$errors ?? [], []);
echo "gm98-closed-area.png 320x200\n";
Ожидаемый результат
gm98-closed-area.png 320x200
Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.
Вывод успешного запуска
gm98-closed-area.png 320x200
Отдельный ошибочный массив, где у точки отсутствует y, в нашем расширении даёт базовый Exception с сообщением о координатах. Поэтому обработчик Throwable в архиве намеренно шире GmagickException. Самопересекающиеся многоугольники требуют понимания правила заполнения; простой выпуклый четырёхугольник оставляет этот вопрос за пределами данного изображения.
Отделить опорные точки от управляющих у кривой
Для плавного маршрута нужны начало, конец и два управляющих ориентира. Кривая Безье идёт от первой точки к четвёртой, но обычно не проходит через вторую и третью. Светлая ломаная показывает управляющую конструкцию; синяя кривая — действительный путь.

<?php
$points = [['x'=>30,'y'=>150], ['x'=>100,'y'=>30],
['x'=>210,'y'=>30], ['x'=>290,'y'=>150]];
$draw = new GmagickDraw();
$draw->setFillColor('none');
$draw->setStrokeColor('#244f65');
$draw->setStrokeWidth(4);
$draw->bezier($points);Здесь четыре координатные пары задают кубическую кривую. Первая управляющая точка направляет выход из начала, вторая — подход к концу. Полная программа сначала добавляет тонкий серый polyline, затем меняет стиль для bezier; красные point обозначают точные координаты. Утолщение направляющих не меняет математическую форму кривой. На собственном входе синяя кривая проходит около(160,60), далеко от верхнего управляющего ребра y=30.
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick();
$image->newImage(320,200,'#ffffff','png');
$points=[['x'=>30,'y'=>150],['x'=>100,'y'=>30],['x'=>210,'y'=>30],['x'=>290,'y'=>150]];
$guides=new GmagickDraw();$guides->setFillColor('none');$guides->setStrokeColor('#aaaaaa');$guides->setStrokeWidth(1.0);$guides->polyline($points);
$image->drawImage($guides);
$draw=new GmagickDraw();$draw->setFillColor('none');$draw->setStrokeColor('#244f65');$draw->setStrokeWidth(4.0);$draw->bezier($points);
$draw->setFillColor('#bf493f');foreach($points as $point){$draw->point($point['x'],$point['y']);}
$image->drawImage($draw);
$errors=['type'=>gmTry(fn()=>(new GmagickDraw())->bezier('wrong'))];
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-bezier-guides.png');
gmReport('gm98-path-bezier',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.polyline", "gmagick.drawimage", "gmagickdraw.bezier", "gmagickdraw.point", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-bezier-guides.png"],
['wrong_type'=>$errors['type']['class']==='TypeError','geometry_bezier_guides'=>gmInspect('gm98-bezier-guides.png')['width']===320&&gmInspect('gm98-bezier-guides.png')['height']===200],
$errors ?? [], []);
echo "gm98-bezier-guides.png 320x200\n";
Ожидаемый результат
gm98-bezier-guides.png 320x200
Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.
Вывод успешного запуска
gm98-bezier-guides.png 320x200
PHP.net описывает метод кратко как кривую по набору точек; здесь подробно разобраны именно четыре точки кубической кривой. Неверная строка вместо массива даёт TypeError. Это не готовый расчёт геодезической дуги и не перевод координат карты: сначала внешняя система должна перевести свои данные в координаты рисунка.
Масштабировать команды, сохранив размеры холста
Один знак нужно сделать шире без увеличения высоты холста. По официальному контракту scale у GmagickDraw задаёт множители системы координат следующих команд. На результате ниже видна существенная особенность проверенной сборки: запрос 1.5 по X дал более сильное растяжение, чем следует из обычного умножения координат. Холст остался 320×200.

<?php
$draw = new GmagickDraw();
$draw->setFillColor('#e5a74a');
$draw->setStrokeColor('#244f65');
$draw->setStrokeWidth(2);
$draw->scale(1.5, 1.0);
$draw->rectangle(40, 40, 140, 100);1.5 — заявленный множитель по X, 1.0 — по Y. По этому смыслу координаты X40 и140 должны перейти в60 и210. Но у сохранённого результата Gmagick2.0.6RC1/GraphicsMagick1.3.42 Q16 геометрические границы находятся приблизительно в X90 и315: это соответствует масштабу около2.25 для данного вызова. С учётом обводки небелая область занимает x88…317, y38…102. Мы показываем наблюдение, а не обещаем заявленные 1.5. Причина расхождения не установлена; нельзя превращать один результат в общее правило «множитель всегда возводится в квадрат».
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick();
$image->newImage(320,200,'#ffffff','png');
$draw=new GmagickDraw();$draw->setFillColor('#e5a74a');$draw->setStrokeColor('#244f65');$draw->setStrokeWidth(2.0);
$draw->scale(1.5,1.0);$draw->rectangle(40,40,140,100);$image->drawImage($draw);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-scaled-commands.png');
gmReport('gm98-path-scale',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.scale", "gmagickdraw.rectangle", "gmagick.drawimage", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-scaled-commands.png"],
['canvas_unchanged'=>$image->getImageWidth()===320&&$image->getImageHeight()===200,'geometry_scaled_commands'=>gmInspect('gm98-scaled-commands.png')['width']===320&&gmInspect('gm98-scaled-commands.png')['height']===200],
$errors ?? [], []);
echo "gm98-scaled-commands.png 320x200\n";
Ожидаемый результат
gm98-scaled-commands.png 320x200
Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.
Вывод успешного запуска
gm98-scaled-commands.png 320x200
Не путайте GmagickDraw::scale с масштабированием готового растра. Команда относится к последующим фигурам и не увеличивает холст; выходящая часть будет обрезана. Для результата с заданными сторонами используйте отдельно проверенный resizeImage с явными размерами и фильтром; отличие от scaleImage разобрано в геометрии готового изображения. Если нужны именно преобразованные команды, проверяйте их конечные координаты на своей версии до применения в точном макете.
Повернуть систему координат будущих фигур
Наклонённый значок можно получить поворотом системы рисования. Официальный параметр degrees задаёт угол, но показанный результат этой сборки не совпал с запросом 15°: фигура наклонена приблизительно на 30° и частично вышла за левую границу. Это не вращение готового файла вокруг его центра.

<?php
$draw = new GmagickDraw();
$draw->setFillColor('#e5a74a');
$draw->setStrokeColor('#244f65');
$draw->setStrokeWidth(4);
$draw->rotate(15.0);
$draw->rectangle(40, 40, 140, 100);15.0 передаёт угол в градусах, без символа°. rotate относится к последующим командам. Однако у сохранённого PNG наклон геометрии согласуется приблизительно с 30°, а небелая область занимает x0…103, y53…159; край слева обрезан. Холст по-прежнему 320×200. Это наблюдение Gmagick2.0.6RC1/GraphicsMagick1.3.42 Q16, не доказательство того, что любая версия всегда удваивает угол. Указанный аргумент нельзя использовать как гарантию фактических 15° в этой сборке.
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick();
$image->newImage(320,200,'#ffffff','png');
$draw=new GmagickDraw();$draw->setFillColor('#e5a74a');$draw->setStrokeColor('#244f65');$draw->setStrokeWidth(4.0);
$draw->rotate(15.0);$draw->rectangle(40,40,140,100);$image->drawImage($draw);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-rotated-commands.png');
gmReport('gm98-path-rotate',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.rotate", "gmagickdraw.rectangle", "gmagick.drawimage", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-rotated-commands.png"],
['canvas_unchanged'=>$image->getImageWidth()===320&&$image->getImageHeight()===200,'geometry_rotated_commands'=>gmInspect('gm98-rotated-commands.png')['width']===320&&gmInspect('gm98-rotated-commands.png')['height']===200],
$errors ?? [], []);
echo "gm98-rotated-commands.png 320x200\n";
Ожидаемый результат
gm98-rotated-commands.png 320x200
Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.
Вывод успешного запуска
gm98-rotated-commands.png 320x200
Для предсказуемого поворота уже нарисованного значка сначала сохраните его отдельным растром и используйте проверенный rotateImage с цветом новых углов: его результаты 15° и90° измерены отдельно. Перестановка масштаба и поворота может менять составное преобразование, поэтому порядок важен. В следующем примере отдельный объект команд для стрелки изолирует её преобразования от основного маршрута; точный угол стрелки по одним аргументам здесь не обещается.
Собрать схему доставки из кривой, меток и стрелки
Соберём полезную карточку маршрута: плавная линия, отметка начала, круг назначения и отдельный направляющий знак. Это собственная схема, которую можно сохранить и показать офлайн. У неё нет чужой карты и обещания вычислять реальную длину пути.

<?php
$arrow = new GmagickDraw();
$arrow->setFillColor('#bf493f');
$arrow->setStrokeColor('#244f65');
$arrow->setStrokeWidth(2);
$arrow->scale(1.1, 1.0);
$arrow->rotate(10.0);
$arrow->polygon([['x'=>130,'y'=>20], ['x'=>150,'y'=>30], ['x'=>130,'y'=>40]]);Короткий фрагмент создаёт только стрелку. В полной программе первый GmagickDraw рисует bezier, дугу у начала, эллипс у конца и горизонтальную опорную линию. Второй GmagickDraw масштабирует и поворачивает три вершины стрелки. Два явных drawImage последовательно применяют эти команды к одному холсту. Поэтому преобразование стрелки не наклоняет уже нарисованный маршрут.
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick();
$image->newImage(320,200,'#ffffff','png');
$route=new GmagickDraw();$route->setFillColor('none');$route->setStrokeColor('#244f65');$route->setStrokeWidth(4.0);
$route->bezier([['x'=>40,'y'=>140],['x'=>90,'y'=>30],['x'=>220,'y'=>30],['x'=>280,'y'=>140]]);
$route->arc(25,125,55,155,0,180);$route->ellipse(280,140,12,12,0,360);
$route->line(40,175,280,175);
$image->drawImage($route);
$arrow=new GmagickDraw();$arrow->setFillColor('#bf493f');$arrow->setStrokeColor('#244f65');$arrow->setStrokeWidth(2.0);
$arrow->scale(1.1,1.0);$arrow->rotate(10.0);
$arrow->polygon([['x'=>130,'y'=>20],['x'=>150,'y'=>30],['x'=>130,'y'=>40]]);
$image->drawImage($arrow);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-delivery-route.png');
gmReport('gm98-path-route',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.bezier", "gmagickdraw.arc", "gmagickdraw.ellipse", "gmagickdraw.line", "gmagick.drawimage", "gmagickdraw.scale", "gmagickdraw.rotate", "gmagickdraw.polygon", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-delivery-route.png"],
['geometry_delivery_route'=>gmInspect('gm98-delivery-route.png')['width']===320&&gmInspect('gm98-delivery-route.png')['height']===200],
$errors ?? [], []);
echo "gm98-delivery-route.png 320x200\n";
Ожидаемый результат
gm98-delivery-route.png 320x200
Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.
Вывод успешного запуска
gm98-delivery-route.png 320x200
У маршрута четыре точки; у стрелки три вершины. Объекты данных похожи по форме, но играют разные роли. Сначала определите смысл координат, потом выбирайте bezier, polyline или polygon. Для названий пунктов нужны шрифт и метрики текста; для размещения поверх готовой фотографии — композиция изображений, которые разобраны в соседних главах этого блока.
Упражнение: нужно ли повторить первую вершину в конце polygon? Ответ: нет, контур замыкается сам. Пройдёт ли cubic bezier через обе управляющие точки? Ответ: обычно нет. Увеличит ли GmagickDraw::scale ширину PNG? Ответ: нет, ширина холста прежняя. Сравните с преобразованием готового растра. Следующие шаги: шрифт и метрики, подписи, наложение на изображение и проверенное сохранение.
Практический вопрос, из которого вырос сценарий
Generate static map image with two markers and an arc inbetween, serverside: Нужна серверная статическая картинка с двумя отметками и плавной дугой, пригодная для показа без сети. Создаём собственную схему доставки на пустом холсте: объясняем управляющие точки Безье, открытый и замкнутый контуры, добавляем конечную отметку и отдельно преобразуем стрелку. Географические координаты и картографическая проекция не подменяются экранными x/y, чужая карта и ответы не копируются.
Функции и методы этой темы
Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.
GmagickDraw::bezierПостроить кривую по опорным и управляющим точкам
PECL gmagick >= Unknown · gmagick
GmagickDraw::bezier(array $coordinate_array): GmagickDrawПостроить кривую по опорным и управляющим точкам. coordinate_array — массив координат, возвращается GmagickDraw. PHP.net кратко говорит о кривой по набору точек. В нашем кубическом варианте четыре точки означают начало, две управляющие точки и конец: кривая не обязана проходить через две средние. Серая ломаная делает это различие видимым. Каждая точка имеет x и y; строка вместо массива вызвала TypeError. Не превращайте набор точек измерений в управляющие точки без выбора математической модели.
GmagickDraw::bezier(array $coordinate_array): GmagickDraw| Аргумент | Тип и обязательность | Значение |
|---|---|---|
coordinate_array | array; обязательный | Массив точек с ключами x и y. |
Возвращаемое значение: GmagickDraw: набор команд после изменения.
На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.
Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.
Два применения: Отделить опорные точки от управляющих у кривой; Собрать схему доставки из кривой, меток и стрелки.
GmagickDraw::polygonЗамкнуть вершины многоугольника
PECL gmagick >= Unknown · gmagick
GmagickDraw::polygon(array $coordinates): GmagickDrawЗамкнуть вершины многоугольника. coordinates — массив точек с x и y; используются текущие stroke, width и fill color либо texture, результат GmagickDraw. В отличие от открытой ломаной, последняя вершина соединяется с первой. Для области нужны вершины её границы: две диагонально расположенные точки не описывают квадрат. В указанной сборке отсутствующий y в одной точке вызвал обычный Exception с сообщением о координатах, поэтому пример не обещает узкий GmagickDrawException для этого отказа.
GmagickDraw::polygon(array $coordinates): GmagickDraw| Аргумент | Тип и обязательность | Значение |
|---|---|---|
coordinates | array; обязательный | Массив координат; каждая точка содержит x и y. |
Возвращаемое значение: GmagickDraw: набор команд после изменения.
На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.
Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.
Два применения: Замкнуть те же вершины и заполнить область; Собрать схему доставки из кривой, меток и стрелки.
GmagickDraw::polylineСоединить упорядоченные точки ломаной
PECL gmagick >= Unknown · gmagick
GmagickDraw::polyline(array $coordinate_array): GmagickDrawСоединить упорядоченные точки ломаной. coordinate_array — массив координат. В проверенной форме каждая точка является массивом с ключами x и y: [["x"=>30,"y"=>150],...]. Возвращается GmagickDraw. Официальный контракт учитывает текущие stroke, width и fill color либо texture. Для учебной открытой линии явно используем none, чтобы заливка не отвлекала от формы. Ломаная проходит через промежуточные вершины; между последней и первой точками мы отрезок не добавляем.
GmagickDraw::polyline(array $coordinate_array): GmagickDraw| Аргумент | Тип и обязательность | Значение |
|---|---|---|
coordinate_array | array; обязательный | Массив точек с ключами x и y. |
Возвращаемое значение: GmagickDraw: набор команд после изменения.
На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.
Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.
Два применения: Соединить точки маршрута, не замыкая последнюю сторону; Отделить опорные точки от управляющих у кривой.
GmagickDraw::rotateПовернуть систему координат следующих команд
PECL gmagick >= Unknown · gmagick
GmagickDraw::rotate(float $degrees): GmagickDrawПовернуть систему координат следующих команд. Официально degrees — угол поворота текущего пространства координат в градусах; возвращается GmagickDraw. Метод относится к последующим командам, а не к уже сохранённому PNG. У фиксированной Gmagick2.0.6RC1/GraphicsMagick1.3.42 Q16 есть наблюдаемое расхождение: вызов rotate(15) в этом примере дал фигуру с наклоном приблизительно 30° и обрезкой слева. Небелая область имеет границы [0,53,104,160], холст остаётся 320×200. По одному результату нельзя выводить универсальное удвоение угла или установленную причину. Для точного поворота готового растра используйте отдельно проверенный rotateImage. В маршруте новый GmagickDraw изолирует преобразования стрелки от остальных команд.
GmagickDraw::rotate(float $degrees): GmagickDraw| Аргумент | Тип и обязательность | Значение |
|---|---|---|
degrees | float; обязательный | Угол поворота системы координат в градусах. |
Возвращаемое значение: GmagickDraw: набор команд после изменения.
На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.
Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.
Два применения: Повернуть систему координат будущих фигур; Собрать схему доставки из кривой, меток и стрелки.
GmagickDraw::scaleИзменить масштаб координат по двум осям
PECL gmagick >= Unknown · gmagick
GmagickDraw::scale(float $x, float $y): GmagickDrawИзменить масштаб координат по двум осям. Официально x и y — горизонтальный и вертикальный множители текущего пространства координат, не требуемые стороны файла; результат GmagickDraw. Однако на фиксированной Gmagick2.0.6RC1/GraphicsMagick1.3.42 Q16 вызов scale(1.5,1.0) в этом примере даёт геометрические X приблизительно 90…315 вместо ожидаемых по контракту 60…210. Небелая область имеет границы [88,38,318,103] с учётом обводки; холст остаётся 320×200. Это наблюдение одного вызова, не правило возведения множителя в квадрат и не доказательство внутренней причины. Для заданных размеров готового растра используйте проверенный resizeImage. Порядок преобразований важен; отдельный GmagickDraw в маршруте не меняет уже нарисованную кривую.
GmagickDraw::scale(float $x, float $y): GmagickDraw| Аргумент | Тип и обязательность | Значение |
|---|---|---|
x | float; обязательный | Множитель масштаба по X. |
y | float; обязательный | Множитель масштаба по Y. |
Возвращаемое значение: GmagickDraw: набор команд после изменения.
На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.
Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.
Два применения: Масштабировать команды, сохранив размеры холста; Собрать схему доставки из кривой, меток и стрелки.
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


