Перейти к содержимому
Поиск
Php Разработка

PHP: полный мануал с примерами, функциями и ООП

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

Александр НекрасовИзменено:
Практический мануал PHP: от переменных и функций к объектной модели интернет-магазина
PHP 8.5.11468 глав6256 карточек справочника
Дерево руководства

Глава 415 · После первых изображений, массивов и объектов Gmagick

Gmagick: команды рисования, заливка и простые фигуры

Отделить команды от пикселей, нарисовать плашку, линию, скругление, эллипс и дугу; проверить реальную непрозрачность.

Увидеть разницу между командами и нарисованными пикселями

Нужна янтарная плашка с синей границей. До drawImage холст остаётся белым, хотя у $draw уже есть цвет и прямоугольник. Два файла ниже фиксируют этот переход: $draw хранит последовательность команд, $image хранит пиксели. Только применение команд соединяет эти две части.

Команды уже записаны в GmagickDraw, но холст всё ещё белый
Команды уже записаны в GmagickDraw, но холст всё ещё белый — 320 × 200 px.
Только drawImage применил команды к пикселям холста
Только drawImage применил команды к пикселям холста — 320 × 200 px.
<?php
$image = new Gmagick();
$image->newImage(320, 200, '#ffffff', 'png');
$draw = new GmagickDraw();
$draw->setFillColor('#e5a74a');
$draw->rectangle(40, 40, 280, 160);
$image->drawImage($draw);
$image->writeImage(__DIR__ . '/panel.png');

newImage задаёт ширину, высоту, цвет холста и формат. new GmagickDraw создаёт отдельный набор команд. setFillColor выбирает заполнение последующих фигур и сам не закрашивает весь холст. rectangle получает две противоположные точки: (40,40) и (280,160), а не ширину 280 и высоту 160. В полной версии setStrokeColor добавляет синюю обводку, setStrokeWidth задаёт 4, getter-методы читают сохранённый стиль. drawImage применяет накопленные команды к текущему изображению.

Увидеть разницу между командами и нарисованными пикселямиСамостоятельный пример
<?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);
$queued = $draw->rectangle(40,40,180,140);
$style=['fill'=>$draw->getFillColor()->getColor(true),'stroke'=>$draw->getStrokeColor()->getColor(true),'width'=>$draw->getStrokeWidth()];
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-draw-before.png');
$beforeFile = new Gmagick(__DIR__.'/gm98-draw-before.png');
$beforeColors = $beforeFile->getImageColors();
$rendered = $image->drawImage($draw);
$errors=['empty'=>gmTry(fn()=>(new Gmagick())->drawImage(new GmagickDraw()))];
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-draw-after.png');
$afterFile = new Gmagick(__DIR__.'/gm98-draw-after.png');
$afterColors = $afterFile->getImageColors();

gmReport('gm98-draw-buffer',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.rectangle", "gmagickdraw.getfillcolor", "gmagickpixel.getcolor", "gmagickdraw.getstrokecolor", "gmagickdraw.getstrokewidth", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage", "gmagick.getimagecolors", "gmagick.drawimage"],["gm98-draw-before.png", "gm98-draw-after.png"],
    ['same_draw'=>$queued===$draw,'same_image'=>$rendered===$image,'before_white'=>$beforeColors===1,'after_three_colors'=>$afterColors===3,'empty_rejected'=>$errors['empty']['class']==='GmagickException','geometry_draw_before'=>gmInspect('gm98-draw-before.png')['width']===320&&gmInspect('gm98-draw-before.png')['height']===200,'geometry_draw_after'=>gmInspect('gm98-draw-after.png')['width']===320&&gmInspect('gm98-draw-after.png')['height']===200],
    $errors ?? [], ['style'=>$style,'saved_before_colors'=>$beforeColors,'saved_after_colors'=>$afterColors]);
echo "gm98-draw-before.png 320x200 gm98-draw-after.png 320x200\n";
Ожидаемый результат
gm98-draw-before.png 320x200 gm98-draw-after.png 320x200

Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.

Вывод успешного запуска
gm98-draw-before.png 320x200 gm98-draw-after.png 320x200

Оба изображения имеют 320×200, но до применения в сохранённом PNG один цвет, после — три. Для этой проверки программа заново открывает каждый записанный файл отдельным Gmagick и читает getImageColors: проверяем результат, который получит читатель. В данном runtime чтение статистики у изменяемого объекта в памяти дало расхождение; его внутреннюю причину здесь не объявляем установленной. Проверки белого фона, янтарной заливки и синей границы сохраняются. Возвращённый drawImage объект — тот же Gmagick; самостоятельная копия создаётся через clone. Попытка рисовать на пустом new Gmagick без newImage даёт GmagickException. Каждый независимый стиль удобнее начать с нового GmagickDraw, чтобы случайно не повторить ранее накопленные фигуры.

Модель для запоминания: $draw — список «выбрать кисть, начертить фигуру», $image — лист с конкретными пикселями. Ограничение сравнения: набор команд не является новым отдельным изображением и сам не имеет размеров выходного PNG. Размеры задаёт newImage. Технически drawImage преобразует команды в пиксели текущего изображения.

Сопоставить настройки заливки, контура и реальный результат

Плашке нужна полупрозрачная чёрная заливка и более слабая граница. Здесь особенно полезен настоящий результат: параметры fill0.5 и stroke0.25 в этой сборке взаимодействуют неожиданно. Центр на белом фоне равен RGB191,191,191, а не ожидаемым по простому правилу 128,128,128.

Чёрный цвет, fillOpacity 0.5, strokeOpacity 0.25: фактический результат этой сборки
Чёрный цвет, fillOpacity 0.5, strokeOpacity 0.25: фактический результат этой сборки — 320 × 200 px.
<?php
$draw = new GmagickDraw();
$draw->setFillColor('#000000');
$draw->setFillOpacity(0.5);
$draw->setStrokeColor('#000000');
$draw->setStrokeOpacity(0.25);
$draw->setStrokeWidth(12);
$draw->rectangle(60, 50, 260, 150);

Короткий фрагмент готовит команды; полный пример создаёт белый холст, вызывает drawImage и сохраняет файл. По официальному контракту оба setter задают непрозрачность соответствующей части, где 1 — полностью непрозрачно. Getter возвращает float: в Q16 дробь0.5 читается как примерно0.5000076, а0.25 —0.2500038. Поэтому сравниваем с малым допуском. getStrokeWidth читает12. Чтение настроек не заменяет измерение конечного пикселя.

Сопоставить настройки заливки, контура и реальный результатСамостоятельный пример
<?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('#000000');$draw->setFillOpacity(0.5);
$draw->setStrokeColor('#000000');$draw->setStrokeOpacity(0.25);$draw->setStrokeWidth(12.0);
$state=['fill'=>$draw->getFillOpacity(),'stroke'=>$draw->getStrokeOpacity(),'width'=>$draw->getStrokeWidth()];
$draw->rectangle(60,50,260,150);
$image->drawImage($draw);
$sample=clone $image;$sample->cropImage(1,1,160,100);$center=$sample->getImageHistogram()[0]->getColor(true);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-opacity-settings.png');

gmReport('gm98-draw-opacity',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setfillopacity", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokeopacity", "gmagickdraw.setstrokewidth", "gmagickdraw.getfillopacity", "gmagickdraw.getstrokeopacity", "gmagickdraw.getstrokewidth", "gmagickdraw.rectangle", "gmagick.drawimage", "gmagick.cropimage", "gmagick.getimagehistogram", "gmagickpixel.getcolor", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-opacity-settings.png"],
    ['fill_readback'=>abs($state["fill"]-0.5)<0.00002,'stroke_readback'=>abs($state["stroke"]-0.25)<0.00002,'native_center'=>$center===['r'=>191,'g'=>191,'b'=>191],'geometry_opacity_settings'=>gmInspect('gm98-opacity-settings.png')['width']===320&&gmInspect('gm98-opacity-settings.png')['height']===200],
    $errors ?? [], ['state'=>$state,'center'=>$center]);
echo "gm98-opacity-settings.png 320x200\n";
Ожидаемый результат
gm98-opacity-settings.png 320x200

Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.

Вывод успешного запуска
gm98-opacity-settings.png 320x200

Программа проверяет центр через копию и вырезку 1×1: получается 191. Это наблюдение нельзя приписать только stroke opacity: отдельная проверка прозрачного слоя с одним setFillOpacity(0.5) также дала около 25% фактической непрозрачности. До явного setter getter заливки может вернуть 0 при видимом непрозрачном цвете. Это граница конкретной реализации, а не новая универсальная формула смешения. Для точного дизайна проверяйте закодированные пиксели в своём runtime; примеры фиксируют использованный порядок и результат.

Различить пиксельную отметку и толстую линию

В техническом превью нужно отличать одну точку от линии заданной толщины. Начинаем с маленького растра32×20, где красная отметка находится в(8,8), а синяя линия идёт из(18,4) в(28,14). Затем тот же растр увеличен×10: исходная точка становится видимым блоком, новых данных в ней не появляется.

Исходный маленький растр: красный point занимает 1 пиксель, синяя линия имеет толщину 3
Исходный маленький растр: красный point занимает 1 пиксель, синяя линия имеет толщину 3 — 32 × 20 px.
Тот же растр увеличен ×10 через Gmagick FILTER_POINT: исходный 1 пиксель виден блоком
Тот же растр увеличен ×10 через Gmagick FILTER_POINT: исходный 1 пиксель виден блоком — 320 × 200 px.
<?php
$draw = new GmagickDraw();
$draw->setFillColor('#bf493f');
$draw->setStrokeColor('#244f65');
$draw->setStrokeWidth(3);
$draw->point(8, 8);
$draw->line(18, 4, 28, 14);

Координата(0,0) находится в левом верхнем углу; x растёт вправо, y вниз. line принимает начало и конец и использует обводку. PHP.net описывает point через stroke и толщину, но реальная команда GraphicsMagick здесь использует fill и один пиксель: сосед(9,8) остаётся белым. Поэтому толщина3 относится к линии. Для крупного круглого маркера подходит ellipse с заданными радиусами.

Различить пиксельную отметку и толстую линиюСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick();
$image->newImage(32,20,'#ffffff','png');
$draw = new GmagickDraw();
$draw->setFillColor('#bf493f');$draw->setStrokeColor('#244f65');$draw->setStrokeWidth(3.0);
$draw->point(8,8);$draw->line(18,4,28,14);
$image->drawImage($draw);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-point-line-native.png');
$preview=clone $image;$preview->resizeImage(320,200,Gmagick::FILTER_POINT,1.0);
$preview->setImageFormat('PNG');
$preview->setImageDepth(8);
$preview->writeImage(__DIR__.'/gm98-point-line-zoom.png');

gmReport('gm98-draw-point-line',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.point", "gmagickdraw.line", "gmagick.drawimage", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage", "gmagick.resizeimage"],["gm98-point-line-native.png", "gm98-point-line-zoom.png"],
    ['two_styles'=>$draw->getStrokeWidth()===3.0,'colors_different'=>$draw->getFillColor()->getColor(true)!==$draw->getStrokeColor()->getColor(true),'geometry_point_line_native'=>gmInspect('gm98-point-line-native.png')['width']===32&&gmInspect('gm98-point-line-native.png')['height']===20,'geometry_point_line_zoom'=>gmInspect('gm98-point-line-zoom.png')['width']===320&&gmInspect('gm98-point-line-zoom.png')['height']===200],
    $errors ?? [], []);
echo "gm98-point-line-native.png 32x20 gm98-point-line-zoom.png 320x200\n";
Ожидаемый результат
gm98-point-line-native.png 32x20 gm98-point-line-zoom.png 320x200

Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.

Вывод успешного запуска
gm98-point-line-native.png 32x20 gm98-point-line-zoom.png 320x200

В полной программе resizeImage(320,200,Gmagick::FILTER_POINT,1.0) увеличивает копию с точечным фильтром без сглаживающего смешения цветов. Оригинальный32×20 сохраняется отдельно, иллюстрация не заменяет исходный результат. Размеры изображения и координаты внутри него — разные числа: увеличение растра не меняет уже выполненный вызов point в исходной системе координат.

Параметры resizeImage и выбор фильтра разобраны в масштабировании превью. Здесь увеличена копия маленького изображения, поэтому читатель видит настоящую пиксельную отметку, а не нарисованную иллюстратором замену.

Сравнить прямые и округлённые углы карточки

Две соседние карточки различаются только углами. У обычного прямоугольника два угла полностью определяют границу. У скруглённого добавляются горизонтальный и вертикальный радиусы. Наглядное сравнение помогает не принять последние два числа за размер всей фигуры.

Одинаковые края по двум углам; справа радиусы округления 24 и 16
Одинаковые края по двум углам; справа радиусы округления 24 и 16 — 320 × 200 px.
<?php
$draw = new GmagickDraw();
$draw->setFillColor('#e5a74a');
$draw->setStrokeColor('#244f65');
$draw->setStrokeWidth(4);
$draw->rectangle(20, 40, 140, 160);
$draw->roundRectangle(180, 40, 300, 160, 24, 16);

Первый rectangle занимает область между(20,40) и(140,160). Во втором первые четыре числа задают такую же по разности координат область справа;24 и16 управляют скруглением поX иY. Одна настройка fill/stroke действует на обе последующие команды. getFillColor и getStrokeColor возвращают GmagickPixel, а getStrokeWidth — число: это чтение стиля набора команд, не поиск цвета готовой фотографии.

Сравнить прямые и округлённые углы карточкиСамостоятельный пример
<?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->rectangle(20,40,140,160);$draw->roundRectangle(180,40,300,160,24,16);
$image->drawImage($draw);
$state=['fill'=>$draw->getFillColor()->getColor(true),'stroke'=>$draw->getStrokeColor()->getColor(true),'width'=>$draw->getStrokeWidth()];
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-two-rectangles.png');

gmReport('gm98-draw-rectangles',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.rectangle", "gmagickdraw.roundrectangle", "gmagick.drawimage", "gmagickdraw.getfillcolor", "gmagickpixel.getcolor", "gmagickdraw.getstrokecolor", "gmagickdraw.getstrokewidth", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-two-rectangles.png"],
    ['width_four'=>$state["width"]===4.0,'geometry_two_rectangles'=>gmInspect('gm98-two-rectangles.png')['width']===320&&gmInspect('gm98-two-rectangles.png')['height']===200],
    $errors ?? [], $state);
echo "gm98-two-rectangles.png 320x200\n";
Ожидаемый результат
gm98-two-rectangles.png 320x200

Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.

Вывод успешного запуска
gm98-two-rectangles.png 320x200

Нельзя бездумно вычитать координаты и объявлять точное число закрашенных пикселей: границы, толщина и сглаживание входят в растр. Для верстки выбирайте геометрические координаты с запасом от края холста. Если обводка имеет толщину4, часть её лежит по обе стороны математической линии; у края она может быть обрезана.

Построить целый овал и открытую половину дуги

На карточке нужны овальный знак и открытая дуга. ellipse задаётся центром и двумя радиусами, arc — противоположными углами ограничивающего прямоугольника. Ниже овальный знак заполнен, а нижняя полуокружность справа состоит только из обводки.

Слева ellipse с центром и радиусами; справа arc по ограничивающему прямоугольнику
Слева ellipse с центром и радиусами; справа arc по ограничивающему прямоугольнику — 320 × 200 px.
<?php
$draw = new GmagickDraw();
$draw->setFillColor('#e5a74a');
$draw->setStrokeColor('#244f65');
$draw->setStrokeWidth(4);
$draw->ellipse(85, 100, 60, 45, 0, 360);
$draw->setFillColor('none');
$draw->arc(175, 55, 305, 145, 0, 180);

У ellipse(85,100,60,45,0,360) центр(85,100), радиусы60 и45, начальный и конечный углы0° и360°. У arc ограничивающие углы(175,55) и(305,145) задают центр(240,100). Угол0 находится справа; на показанном экране0→180 проходит через нижнюю половину, потому что y растёт вниз. none отключает заполнение для последующей дуги, не стирая уже добавленный эллипс.

Построить целый овал и открытую половину дугиСамостоятельный пример
<?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->ellipse(85,100,60,45,0,360);
$draw->setFillColor('none');$draw->arc(175,55,305,145,0,180);
$image->drawImage($draw);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-ellipse-and-arc.png');

gmReport('gm98-draw-ellipse-arc',["gmagick.construct", "gmagickdraw.construct", "gmagick.newimage", "gmagickdraw.setfillcolor", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokewidth", "gmagickdraw.ellipse", "gmagickdraw.arc", "gmagick.drawimage", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-ellipse-and-arc.png"],
    ['geometry_ellipse_and_arc'=>gmInspect('gm98-ellipse-and-arc.png')['width']===320&&gmInspect('gm98-ellipse-and-arc.png')['height']===200],
    $errors ?? [], []);
echo "gm98-ellipse-and-arc.png 320x200\n";
Ожидаемый результат
gm98-ellipse-and-arc.png 320x200

Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.

Вывод успешного запуска
gm98-ellipse-and-arc.png 320x200

Радиус — расстояние от центра до края, диаметр вдвое больше. Для круга задайте равные радиусы. Открытый контур с заливкой может заполняться по правилам закрытия области; если нужна только линия дуги, явно выберите none. Полный оборот можно использовать для видимой отметки вместо однопиксельного point.

Вернуть набор команд оформления из функции

Набор параметров плашки повторяется в нескольких карточках. Функция может вернуть GmagickDraw с готовой фигурой, а вызывающий код применит его к выбранному холсту. Так настройка и выполнение остаются разными действиями, а проверка допустимой доли расположена рядом с её использованием.

Повторяемое оформление скруглённой плашки отдельным набором команд
Повторяемое оформление скруглённой плашки отдельным набором команд — 320 × 200 px.
<?php
$draw = new GmagickDraw();
$draw->setFillColor('#000000');
$draw->setFillOpacity(0.5);
$draw->setStrokeColor('#000000');
$draw->setStrokeOpacity(0.25);
$draw->setStrokeWidth(12);
$draw->roundRectangle(60, 50, 260, 150, 20, 20);

В полной версии badgeCommands принимает непрозрачность, отвергает число вне0–1 и возвращает набор команд. Затем getter-методы подтверждают настройки, drawImage создаёт плашку на белом холсте, а writeImage сохраняет PNG. Попытка передать2 даёт нашу InvalidArgumentException до рисования. Проверка входа отделена от нативного поведения библиотеки.

Вернуть набор команд оформления из функцииСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
function badgeCommands(string $fill,string $stroke,float $opacity): GmagickDraw {
    if($opacity<0||$opacity>1){throw new InvalidArgumentException('Opacity must be in 0..1');}
    $draw=new GmagickDraw();$draw->setFillColor($fill);$draw->setFillOpacity($opacity);
    $draw->setStrokeColor($stroke);$draw->setStrokeOpacity(0.25);$draw->setStrokeWidth(12.0);
    $draw->roundRectangle(60,50,260,150,20,20);
    return $draw;
}
$draw=badgeCommands('#000000','#000000',0.5);
$state=['fill'=>$draw->getFillOpacity(),'stroke'=>$draw->getStrokeOpacity(),'width'=>$draw->getStrokeWidth()];
$errors=['opacity'=>gmTry(fn()=>badgeCommands('#000000','#000000',2.0))];
$image = new Gmagick();
$image->newImage(320,200,'#ffffff','png');
$image->drawImage($draw);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm98-badge-style.png');

gmReport('gm98-draw-badge',["gmagickdraw.construct", "gmagick.construct", "gmagickdraw.setfillcolor", "gmagickdraw.setfillopacity", "gmagickdraw.setstrokecolor", "gmagickdraw.setstrokeopacity", "gmagickdraw.setstrokewidth", "gmagickdraw.roundrectangle", "gmagickdraw.getfillopacity", "gmagickdraw.getstrokeopacity", "gmagickdraw.getstrokewidth", "gmagick.newimage", "gmagick.drawimage", "gmagick.setimageformat", "gmagick.setimagedepth", "gmagick.writeimage"],["gm98-badge-style.png"],
    ['fill_readback'=>abs($state["fill"]-0.5)<0.00002,'stroke_readback'=>abs($state["stroke"]-0.25)<0.00002,'bad_opacity'=>$errors['opacity']['class']==='InvalidArgumentException','geometry_badge_style'=>gmInspect('gm98-badge-style.png')['width']===320&&gmInspect('gm98-badge-style.png')['height']===200],
    $errors ?? [], $state);
echo "gm98-badge-style.png 320x200\n";
Ожидаемый результат
gm98-badge-style.png 320x200

Все файлы архива кладутся рядом; php example.php восстанавливает собственные входы, сохраняет PNG и metrics.json. Нужен Gmagick: проверенный стенд PHP8.3.6 / Gmagick2.0.6RC1 / GraphicsMagick1.3.42 Q16. Команды рисования находятся непосредственно в программе; gm-fixture.php только готовит входы и проверяет результат.

Вывод успешного запуска
gm98-badge-style.png 320x200

Этот вариант сохраняет проверенный порядок непрозрачности: ожидайте то же ограничение взаимодействия заливки и обводки, которое показано выше. Функция не обещает универсальную альфа-формулу и не публикует файл сама. Возвращаемый объект позволяет вызывающему коду выбрать изображение и путь результата. Для повторного независимого применения создавайте новый набор команд через новый вызов функции.

Упражнение: какой метод нарисует прямоугольник по двум противоположным точкам? Ответ: rectangle. Как получить круг радиуса12? Ответ: ellipse($x,$y,12,12,0,360). Почему setFillColor не изменил белый холст? Ответ: настройка относится к будущим командам; нужна фигура и drawImage. Почему нельзя объявить каждый отказ GmagickException? Ответ: PHP-тип и разбор данных могут давать другие Throwable; см. исключения.

Практический вопрос, из которого вырос сценарий

php - imagemagick obscure image with black: Для затемнения изображения автор передаёт polygon только два противоположных угла и ожидает полупрозрачный чёрный прямоугольник. Показываем разницу rectangle с двумя углами и polygon с полным набором вершин, отдельно объясняем накопление команд и drawImage. Сочетание непрозрачности проверяем на настоящем Gmagick PNG: у указанной версии fill0.5 и stroke0.25 дают центр RGB191. Вопрос на Imagick служит постановкой задачи, а не доказательством поведения Gmagick.

Функции и методы этой темы

Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.

Gmagick::drawimageПрименить накопленные команды к растру

PECL gmagick >= Unknown · gmagick

Gmagick::drawimage(GmagickDraw $GmagickDraw): Gmagick

Применить накопленные команды к растру. Единственный аргумент GmagickDraw содержит настройки и команды рисования. Метод наносит их на текущее изображение и возвращает Gmagick; проверено, что это тот же объект изображения. До вызова drawImage запись rectangle в $draw не меняет белый холст $image. После вызова в растре есть заливка и контур. Нужен существующий холст или прочитанный файл: пустой Gmagick в probe дал GmagickException, как предусмотрено официальным контрактом.

Gmagick::drawimage(GmagickDraw $GmagickDraw): Gmagick
АргументТип и обязательностьЗначение
GmagickDrawGmagickDraw; обязательныйОбъект с накопленными командами, применяемыми к текущему изображению.

Возвращаемое значение: Gmagick: текущее изображение после применения команд.

Официальный отказ: GmagickException при ошибке операции.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Увидеть разницу между командами и нарисованными пикселями; Вернуть набор команд оформления из функции.

GmagickDraw::arcПровести дугу внутри ограничивающего прямоугольника

PECL gmagick >= Unknown · gmagick

GmagickDraw::arc(float $sx, float $sy, float $ex, float $ey, float $sd, float $ed): GmagickDraw

Провести дугу внутри ограничивающего прямоугольника. sx,sy и ex,ey описывают ограничивающий прямоугольник дуги. sd и ed задают начальный и конечный углы в градусах; возвращается GmagickDraw. В нашем проверенном варианте 0…180 линия проходит от правой стороны через нижнюю половину к левой. Для открытой дуги устанавливаем fill=none. Углы — не координаты пикселей, а прямоугольник задаёт форму эллипса, по которому идёт дуга.

GmagickDraw::arc(float $sx, float $sy, float $ex, float $ey, float $sd, float $ed): GmagickDraw
АргументТип и обязательностьЗначение
sxfloat; обязательныйX начала линии либо первого угла ограничивающего прямоугольника.
syfloat; обязательныйY начала линии либо первого угла ограничивающего прямоугольника.
exfloat; обязательныйX конца линии либо противоположного угла ограничивающего прямоугольника.
eyfloat; обязательныйY конца линии либо противоположного угла ограничивающего прямоугольника.
sdfloat; обязательныйНачальный угол дуги в градусах.
edfloat; обязательныйКонечный угол дуги в градусах.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Построить целый овал и открытую половину дуги; Собрать схему доставки из кривой, меток и стрелки.

GmagickDraw::ellipseНарисовать эллипс по центру и радиусам

PECL gmagick >= Unknown · gmagick

GmagickDraw::ellipse(float $ox, float $oy, float $rx, float $ry, float $start, float $end): GmagickDraw

Нарисовать эллипс по центру и радиусам. ox,oy — центр; rx,ry — радиусы по X и Y; start,end — углы начала и конца в градусах. Возвращается GmagickDraw. Для полного овала используем 0 и360, для кругового маркера одинаковые радиусы. Это другая форма задания геометрии, чем у arc: ellipse(85,100,60,45,0,360) имеет центр (85,100), ширину120 и высоту90 до учёта штриха.

GmagickDraw::ellipse(float $ox, float $oy, float $rx, float $ry, float $start, float $end): GmagickDraw
АргументТип и обязательностьЗначение
oxfloat; обязательныйX центра эллипса.
oyfloat; обязательныйY центра эллипса.
rxfloat; обязательныйГоризонтальный радиус эллипса или скругления угла.
ryfloat; обязательныйВертикальный радиус эллипса или скругления угла.
startfloat; обязательныйНачальный угол в градусах.
endfloat; обязательныйКонечный угол в градусах.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Построить целый овал и открытую половину дуги; Собрать схему доставки из кривой, меток и стрелки.

GmagickDraw::getfillcolorПрочитать текущий цвет заливки команд

PECL gmagick >= Unknown · gmagick

GmagickDraw::getfillcolor(): GmagickPixel

Прочитать текущий цвет заливки команд. Аргументов нет. Возвращается GmagickPixel, представляющий выбранный цвет заполнения фигур. Это чтение состояния GmagickDraw, а не анализ уже нарисованного растра. Полученный объект можно передать другому набору команд или прочитать его RGB. В уроках состояние записывается рядом с настоящим изображением, чтобы не спутать настройку с применённым результатом.

GmagickDraw::getfillcolor(): GmagickPixel

Аргументов нет: пустые скобки вызывают чтение текущего состояния.

Возвращаемое значение: GmagickPixel: объект цвета.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Увидеть разницу между командами и нарисованными пикселями; Сравнить прямые и округлённые углы карточки.

GmagickDraw::getfillopacityПрочитать настройку непрозрачности заливки

PECL gmagick >= Unknown · gmagick

GmagickDraw::getfillopacity(): float

Прочитать настройку непрозрачности заливки. Аргументов нет; результат float. Официальный контракт относится к заполнению цветом или текстурой и называет 1.0 полностью непрозрачным. Фактическая сборка требует осторожности: после обычного непрозрачного setFillColor probe вернул 0, а после setFillOpacity(0.5) — около 0.50000763. Это не повод объявлять рисунок невидимым по одному getter. В уроке дополнительно проверен пиксель результата: сочетание fill=0.5 и stroke=0.25 дало в центре чёрной фигуры на белом RGB191.

GmagickDraw::getfillopacity(): float

Аргументов нет: пустые скобки вызывают чтение текущего состояния.

Возвращаемое значение: Дробное число, а не строка.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Сопоставить настройки заливки, контура и реальный результат; Вернуть набор команд оформления из функции.

GmagickDraw::getstrokecolorПрочитать цвет контура

PECL gmagick >= Unknown · gmagick

GmagickDraw::getstrokecolor(): GmagickPixel

Прочитать цвет контура. Аргументов нет; результат GmagickPixel описывает цвет обводки. Этот цвет используется командами вроде line и rectangle вместе с толщиной и непрозрачностью контура. Getter не считывает цвет границы файла. В наших примерах он возвращает выбранный #244f65 и позволяет проверить настройки перед применением команд.

GmagickDraw::getstrokecolor(): GmagickPixel

Аргументов нет: пустые скобки вызывают чтение текущего состояния.

Возвращаемое значение: GmagickPixel: объект цвета.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Увидеть разницу между командами и нарисованными пикселями; Сравнить прямые и округлённые углы карточки.

GmagickDraw::getstrokeopacityПрочитать непрозрачность контура

PECL gmagick >= Unknown · gmagick

GmagickDraw::getstrokeopacity(): float

Прочитать непрозрачность контура. Аргументов нет; возвращается float, описывающий непрозрачность обводки. После setStrokeOpacity(0.25) проверенная Q16-сборка дала около 0.25000381, поэтому сравниваем с допуском, а не через точное равенство дробей. Это свойство команд: фактический RGB на краю зависит также от фона, заливки, сглаживания и наложения.

GmagickDraw::getstrokeopacity(): float

Аргументов нет: пустые скобки вызывают чтение текущего состояния.

Возвращаемое значение: Дробное число, а не строка.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Сопоставить настройки заливки, контура и реальный результат; Вернуть набор команд оформления из функции.

GmagickDraw::getstrokewidthПрочитать выбранную толщину контура

PECL gmagick >= Unknown · gmagick

GmagickDraw::getstrokewidth(): float

Прочитать выбранную толщину контура. Аргументов нет; результат float — ширина обводки. На наших командах получены 4.0 либо 12.0. Толщина относится к линиям и границам фигур, а не к размеру всего изображения. Масштабирование системы координат может изменить видимый размер штриха; сохранённая настройка сама по себе не заменяет проверку растра.

GmagickDraw::getstrokewidth(): float

Аргументов нет: пустые скобки вызывают чтение текущего состояния.

Возвращаемое значение: Дробное число, а не строка.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Увидеть разницу между командами и нарисованными пикселями; Сравнить прямые и округлённые углы карточки.

GmagickDraw::lineПровести отрезок между двумя точками

PECL gmagick >= Unknown · gmagick

GmagickDraw::line(float $sx, float $sy, float $ex, float $ey): GmagickDraw

Провести отрезок между двумя точками. sx,sy — начало, ex,ey — конец. Возвращается GmagickDraw. Линия использует текущие цвет, непрозрачность и толщину stroke. Начало координат (0,0) находится слева сверху, x растёт вправо, y вниз. Числа конца — абсолютные координаты, а не длина отрезка. В маршруте горизонтальная линия служит отдельной опорой сравнения с кривой, а не ещё одной кривой Безье.

GmagickDraw::line(float $sx, float $sy, float $ex, float $ey): GmagickDraw
АргументТип и обязательностьЗначение
sxfloat; обязательныйX начала линии либо первого угла ограничивающего прямоугольника.
syfloat; обязательныйY начала линии либо первого угла ограничивающего прямоугольника.
exfloat; обязательныйX конца линии либо противоположного угла ограничивающего прямоугольника.
eyfloat; обязательныйY конца линии либо противоположного угла ограничивающего прямоугольника.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Различить пиксельную отметку и толстую линию; Собрать схему доставки из кривой, меток и стрелки.

GmagickDraw::pointПоставить пиксельную отметку

PECL gmagick >= Unknown · gmagick

GmagickDraw::point(float $x, float $y): GmagickDraw

Поставить пиксельную отметку. x и y — координаты, возвращается GmagickDraw. PHP.net описывает использование stroke color и толщины. В проверенной Gmagick2.0.6RC1/GraphicsMagick1.3.42 поведение другое: point использовал fill color и изменил один пиксель даже при stroke width9. Этот результат согласуется с документацией низкоуровневой команды GraphicsMagick point. Поэтому метка специально показана в собственном увеличении ×10; для видимого круглого маркера заданного радиуса используйте ellipse.

GmagickDraw::point(float $x, float $y): GmagickDraw
АргументТип и обязательностьЗначение
xfloat; обязательныйКоордината X точки.
yfloat; обязательныйКоордината Y точки.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Различить пиксельную отметку и толстую линию; Отделить опорные точки от управляющих у кривой.

GmagickDraw::rectangleНарисовать прямоугольник по двум углам

PECL gmagick >= Unknown · gmagick

GmagickDraw::rectangle(float $x1, float $y1, float $x2, float $y2): GmagickDraw

Нарисовать прямоугольник по двум углам. x1,y1 задают один угол, x2,y2 — второй; метод использует текущие fill и stroke и возвращает GmagickDraw. Например (20,40,140,160) — координаты противоположных углов, а не положение плюс ширина/высота. Для прямоугольника 120×120 по геометрическим координатам второй угол получается прибавлением сторон к первому. Пиксели границы и сглаживание могут включать координату второго угла; не рассчитывайте площадь заполнения только вычитанием, если нужен точный подсчёт растровых пикселей.

GmagickDraw::rectangle(float $x1, float $y1, float $x2, float $y2): GmagickDraw
АргументТип и обязательностьЗначение
x1float; обязательныйX первого угла прямоугольника.
y1float; обязательныйY первого угла прямоугольника.
x2float; обязательныйX противоположного угла.
y2float; обязательныйY противоположного угла.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Увидеть разницу между командами и нарисованными пикселями; Сравнить прямые и округлённые углы карточки.

GmagickDraw::roundrectangleСкруглить углы прямоугольника

PECL gmagick >= Unknown · gmagick

GmagickDraw::roundrectangle(float $x1, float $y1, float $x2, float $y2, float $rx, float $ry): GmagickDraw

Скруглить углы прямоугольника. Первые четыре аргумента — два угла, как у rectangle. rx и ry — горизонтальный и вертикальный радиусы скругления углов. Это радиусы, не диаметры и не координаты центра всей карточки. Используются текущие настройки заполнения и обводки; возвращается GmagickDraw. В сравнении одинаковых прямоугольников радиусы24 и16 оставляют белыми угловые участки, которые у обычного rectangle были заполнены.

GmagickDraw::roundrectangle(float $x1, float $y1, float $x2, float $y2, float $rx, float $ry): GmagickDraw
АргументТип и обязательностьЗначение
x1float; обязательныйX первого угла прямоугольника.
y1float; обязательныйY первого угла прямоугольника.
x2float; обязательныйX противоположного угла.
y2float; обязательныйY противоположного угла.
rxfloat; обязательныйГоризонтальный радиус эллипса или скругления угла.
ryfloat; обязательныйВертикальный радиус эллипса или скругления угла.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Сравнить прямые и округлённые углы карточки; Вернуть набор команд оформления из функции.

GmagickDraw::setfillcolorВыбрать заливку последующих фигур

PECL gmagick >= Unknown · gmagick

GmagickDraw::setfillcolor(mixed $color): GmagickDraw

Выбрать заливку последующих фигур. color по сигнатуре mixed; описание уточняет GmagickPixel либо строку цвета. Возвращается GmagickDraw. Настройка применяется к последующим заполненным фигурам в наборе команд, но не заливает весь холст автоматически. Для контура без внутренней заливки в проверенных примерах используем строку none. После смены цвета новая фигура получает новое заполнение; предыдущие команды уже описывают свой рисунок.

GmagickDraw::setfillcolor(mixed $color): GmagickDraw
АргументТип и обязательностьЗначение
colormixed; обязательныйЦветовая строка, объект или константа канала согласно конкретной сигнатуре; различие пояснено выше.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Увидеть разницу между командами и нарисованными пикселями; Сравнить прямые и округлённые углы карточки.

GmagickDraw::setfillopacityЗадать непрозрачность заполнения

PECL gmagick >= Unknown · gmagick

GmagickDraw::setfillopacity(float $fill_opacity): GmagickDraw

Задать непрозрачность заполнения. fill_opacity — float; официально 1.0 соответствует полностью непрозрачной заливке цветом или текстурой. Возвращается GmagickDraw. Функция приложения ограничивает ввод диапазоном 0…1. На конкретной сборке сочетание этого setter со stroke opacity нельзя описывать только школьным смешением RGB: показан и проверен реальный PNG. Это ограничение проверенного поведения, а не изменение официального контракта.

GmagickDraw::setfillopacity(float $fill_opacity): GmagickDraw
АргументТип и обязательностьЗначение
fill_opacityfloat; обязательныйНепрозрачность заполнения; официальный ориентир 1.0 — полностью непрозрачно.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Сопоставить настройки заливки, контура и реальный результат; Вернуть набор команд оформления из функции.

GmagickDraw::setstrokecolorВыбрать цвет обводки и линий

PECL gmagick >= Unknown · gmagick

GmagickDraw::setstrokecolor(mixed $color): GmagickDraw

Выбрать цвет обводки и линий. color — GmagickPixel либо строка цвета согласно описанию; краткая сигнатура использует mixed. Возвращается GmagickDraw. В частности, линия использует stroke color, stroke opacity и stroke width. Для различения заливки и контура учебные фигуры имеют янтарную внутреннюю часть и синий край. Ошибочная цветовая строка может не пройти разбор цвета; она не является допустимой настройкой по умолчанию.

GmagickDraw::setstrokecolor(mixed $color): GmagickDraw
АргументТип и обязательностьЗначение
colormixed; обязательныйЦветовая строка, объект или константа канала согласно конкретной сигнатуре; различие пояснено выше.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Увидеть разницу между командами и нарисованными пикселями; Сравнить прямые и округлённые углы карточки.

GmagickDraw::setstrokeopacityЗадать непрозрачность обводки

PECL gmagick >= Unknown · gmagick

GmagickDraw::setstrokeopacity(float $stroke_opacity): GmagickDraw

Задать непрозрачность обводки. stroke_opacity — float; официально 1.0 означает непрозрачную линию. Возвращается GmagickDraw. Сохранённое значение читается getStrokeOpacity с небольшой Q16-погрешностью. На границе заполненной фигуры участвуют и заливка, и контур; сравнение одного пикселя там не равно сравнению чистого штриха на пустом фоне. В примере измеряется отдельно центр фигуры, а настоящий PNG показывает также обводку.

GmagickDraw::setstrokeopacity(float $stroke_opacity): GmagickDraw
АргументТип и обязательностьЗначение
stroke_opacityfloat; обязательныйНепрозрачность обводки; 1.0 — полностью непрозрачно.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Сопоставить настройки заливки, контура и реальный результат; Вернуть набор команд оформления из функции.

GmagickDraw::setstrokewidthЗадать толщину линий

PECL gmagick >= Unknown · gmagick

GmagickDraw::setstrokewidth(float $width): GmagickDraw

Задать толщину линий. width — float, задающий ширину обводки; возвращается GmagickDraw. В базовых координатах примеров единицы соответствуют пикселям. Линия в маленьком растре имеет ширину 3, обычная карточка — 4. При рисовании у границы часть толщины может выйти за холст. Нельзя полагаться, что point станет таким же широким: фактический point в нашей сборке занимает один пиксель, что показано отдельно.

GmagickDraw::setstrokewidth(float $width): GmagickDraw
АргументТип и обязательностьЗначение
widthfloat; обязательныйТолщина штриха.

Возвращаемое значение: GmagickDraw: набор команд после изменения.

На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.

Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.

Два применения: Различить пиксельную отметку и толстую линию; Сравнить прямые и округлённые углы карточки.

Источники и обсуждения

Код и руководство с собой

Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.

Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.

Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.