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

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


<?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.

<?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: исходная точка становится видимым блоком, новых данных в ней не появляется.


<?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 и выбор фильтра разобраны в масштабировании превью. Здесь увеличена копия маленького изображения, поэтому читатель видит настоящую пиксельную отметку, а не нарисованную иллюстратором замену.
Сравнить прямые и округлённые углы карточки
Две соседние карточки различаются только углами. У обычного прямоугольника два угла полностью определяют границу. У скруглённого добавляются горизонтальный и вертикальный радиусы. Наглядное сравнение помогает не принять последние два числа за размер всей фигуры.

<?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 — противоположными углами ограничивающего прямоугольника. Ниже овальный знак заполнен, а нижняя полуокружность справа состоит только из обводки.

<?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 с готовой фигурой, а вызывающий код применит его к выбранному холсту. Так настройка и выполнение остаются разными действиями, а проверка допустимой доли расположена рядом с её использованием.

<?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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
GmagickDraw | GmagickDraw; обязательный | Объект с накопленными командами, применяемыми к текущему изображению. |
Возвращаемое значение: 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
sx | float; обязательный | X начала линии либо первого угла ограничивающего прямоугольника. |
sy | float; обязательный | Y начала линии либо первого угла ограничивающего прямоугольника. |
ex | float; обязательный | X конца линии либо противоположного угла ограничивающего прямоугольника. |
ey | float; обязательный | Y конца линии либо противоположного угла ограничивающего прямоугольника. |
sd | float; обязательный | Начальный угол дуги в градусах. |
ed | float; обязательный | Конечный угол дуги в градусах. |
Возвращаемое значение: 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
ox | float; обязательный | X центра эллипса. |
oy | float; обязательный | Y центра эллипса. |
rx | float; обязательный | Горизонтальный радиус эллипса или скругления угла. |
ry | float; обязательный | Вертикальный радиус эллипса или скругления угла. |
start | float; обязательный | Начальный угол в градусах. |
end | float; обязательный | Конечный угол в градусах. |
Возвращаемое значение: 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
sx | float; обязательный | X начала линии либо первого угла ограничивающего прямоугольника. |
sy | float; обязательный | Y начала линии либо первого угла ограничивающего прямоугольника. |
ex | float; обязательный | X конца линии либо противоположного угла ограничивающего прямоугольника. |
ey | float; обязательный | 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
x | float; обязательный | Координата X точки. |
y | float; обязательный | Координата 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
x1 | float; обязательный | X первого угла прямоугольника. |
y1 | float; обязательный | Y первого угла прямоугольника. |
x2 | float; обязательный | X противоположного угла. |
y2 | float; обязательный | 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
x1 | float; обязательный | X первого угла прямоугольника. |
y1 | float; обязательный | Y первого угла прямоугольника. |
x2 | float; обязательный | X противоположного угла. |
y2 | float; обязательный | Y противоположного угла. |
rx | float; обязательный | Горизонтальный радиус эллипса или скругления угла. |
ry | float; обязательный | Вертикальный радиус эллипса или скругления угла. |
Возвращаемое значение: 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
color | mixed; обязательный | Цветовая строка, объект или константа канала согласно конкретной сигнатуре; различие пояснено выше. |
Возвращаемое значение: 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_opacity | float; обязательный | Непрозрачность заполнения; официальный ориентир 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
color | mixed; обязательный | Цветовая строка, объект или константа канала согласно конкретной сигнатуре; различие пояснено выше. |
Возвращаемое значение: 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_opacity | float; обязательный | Непрозрачность обводки; 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| Аргумент | Тип и обязательность | Значение |
|---|---|---|
width | float; обязательный | Толщина штриха. |
Возвращаемое значение: GmagickDraw: набор команд после изменения.
На этой странице PHP.net отдельный список исключений не приведён; это не гарантия отсутствия отказов. Неверный PHP-тип может дать TypeError, неверная строка цвета — GmagickPixelException, а проверенный неполный массив точек — Exception. Ошибки перехватываются в самостоятельных примерах там, где создаются соответствующие данные.
Требуется PECL Gmagick. PHP.net указывает нижнюю границу версии как Unknown; конкретная минимальная версия здесь не выдумывается. Результаты уроков привязаны к указанному Q16-окружению.
Два применения: Различить пиксельную отметку и толстую линию; Сравнить прямые и округлённые углы карточки.
Источники и обсуждения
- PHP.net Gmagick::drawimage
- PHP.net GmagickDraw::arc
- PHP.net GmagickDraw::ellipse
- PHP.net GmagickDraw::getfillcolor
- PHP.net GmagickDraw::getfillopacity
- PHP.net GmagickDraw::getstrokecolor
- PHP.net GmagickDraw::getstrokeopacity
- PHP.net GmagickDraw::getstrokewidth
- PHP.net GmagickDraw::line
- PHP.net GmagickDraw::point
- PHP.net GmagickDraw::rectangle
- PHP.net GmagickDraw::roundrectangle
- PHP.net GmagickDraw::setfillcolor
- PHP.net GmagickDraw::setfillopacity
- PHP.net GmagickDraw::setstrokecolor
- PHP.net GmagickDraw::setstrokeopacity
- PHP.net GmagickDraw::setstrokewidth
- GraphicsMagick drawing primitives
- Gmagick upstream drawing implementation
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


