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

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

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

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

Глава 329 · После первой линии

ImagickDraw: цвет, толщина, прозрачность и сглаживание обводки

Восемь get/set методов: ImagickPixel и RGB, дробная толщина, opacity 0..1, нормальное false у AA; PNG-сравнения и составной отчёт с восстановлением темы.

Оформить график: цвет, толщина, прозрачность и край

Автоматический отчёт может содержать основной график, слабую фоновую сетку и полупрозрачное выделение. Для этого не нужны разные координаты одной линии: меняются четыре настройки stroke. Здесь научимся задавать их и читать готовую настройку темы — от короткой бирюзовой линии до составного отчёта.

Первый результат: бирюзовая обводка #146c74 толщиной 12 на белом холсте 240×180
Первый результат: бирюзовая обводка #146c74 толщиной 12 на белом холсте 240×180 Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.

Stroke — обводка контура; Fill — внутреннее заполнение фигуры. Draw хранит команды и настройки; drawImage применяет их к пикселям, writeImage сохраняет PNG. Первую линию объясняет базовая геометрия, а окончания и стыки — Cap/Join/пунктир.

Первая линия: настройка до геометрической команды

Сохранить линию нужного цвета и толщиныПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 180, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setFillColor('none');
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(12);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->line(40, 90, 200, 90);
$image->drawImage($draw);
$image->writeImage(__DIR__ . '/first-stroke.png');
echo "first-stroke.png\n";

Сохраните в first.php и выполните php first.php. При успешной записи появится first-stroke.png 240×180 с бирюзовой линией от(40,90) до(200,90), толщина 12; консоль — first-stroke.png и перевод строки. Это короткое введение без обработки записи; в карточках ниже writeImage проверяется.

ЗаписьДействие
$draw = new ImagickDraw()Создать объект команд; он ещё не PNG
setStrokeColor('#146c74')Выбрать цвет края следующих фигур
setStrokeWidth(12)Задать толщину, отдельную от цвета
setFillColor('none')Отключить внутреннюю заливку
line(40,90,200,90)Записать отрезок с уже выбранными параметрами
drawImage / writeImageПрименить к пикселям / сохранить файл

Переменная $draw хранит объект; -> обращается к методу, скобки содержат параметры, точка с запятой заканчивает инструкцию. new создаёт объект; подробнее — класс и объект. Настройка после команды не переписывает прежнюю геометрию задним числом.

Getter возвращает данные, которые можно использовать

Прочитать дробную толщину из темыПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 180, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(12.5);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeWidth(12.5);
$width = $draw->getStrokeWidth();
echo 'width=', number_format($width, 2, '.', ''), '; type=', get_debug_type($width), "\n";
$draw->line(40, 90, 200, 90);
$image->drawImage($draw);
$path = __DIR__ . '/read-width.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'read-width.png', "\n";
$draw->clear();
$image->clear();

При успехе read-width.png 240×180 содержит линию толщиной 12.5. Перед именем файла консоль: width=12.50; type=float. number_format только форматирует журнал, а $width остаётся float. Полученное число можно использовать для отступов и расчёта легенды, не угадывая настройки темы.

GetterТипПрактическое действие
getStrokeColorImagickPixelСохранить/вернуть цвет темы, прочитать RGB
getStrokeWidthfloatУчесть половину толщины при размещении рамки
getStrokeOpacityfloatПрименить согласованную политику заметности
getStrokeAntialiasboolВременно выключить и вернуть прежний режим; false не ошибка

= сохраняет результат в переменную; === сравнивает тип и значение. В следующих программах if проверяет условие, throw сообщает об отказе, foreach перебирает массив. См. условия/циклы, массивы, исключения.

Цвет обводки

StrokeColor задаёт цвет края, а не внутреннюю заливку фигуры. Строка #146c74 — шестнадцатеричные каналы RGB: 14=20, 6c=108, 74=116. Можно передать ImagickPixel; getter возвращает именно объект цвета, не CSS-строку и не массив.

Три непрозрачных цвета сверху вниз: #146c74, #c25732, #354e8d; геометрия и толщина 12 одинаковы
Три непрозрачных цвета сверху вниз: #146c74, #c25732, #354e8d; геометрия и толщина 12 одинаковы Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.

Не путайте stroke с fill и цветом фона. У непрозрачного hex-цвета альфа не усложняет пример; в текущем ImageMagick setStrokeColor копирует цвет вместе с alpha, а setStrokeOpacity затем присваивает alpha обводки. Поэтому порядок установок имеет значение: нельзя обещать универсальное произведение rgba-alpha и opacity. Здесь сначала задаём непрозрачный цвет, затем opacity. Одна смена цвета не является достаточной доступной легендой: добавляйте подписи, форму или pattern.

Прочитать свойство · Установить свойство

Толщина обводки

Толщина — float в единицах текущей системы координат; на холсте без преобразований это пиксели. Обводка геометрически располагается по обе стороны центральной линии. Дробная толщина допустима: промежуточное покрытие краёв не равно ошибке.

Одинаковая горизонталь с толщиной 1, 6, 18 сверху вниз; это свойство обводки, не масштабирование PNG
Одинаковая горизонталь с толщиной 1, 6, 18 сверху вниз; это свойство обводки, не масштабирование PNG Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.

Рамка по координатам(0,0)—(width-1,height-1) теряет наружную половину толстого stroke за холстом. Отступайте на width/2 и запас для сглаживания. Видимая длина также зависит от Cap, а острый выступ — от Join/MiterLimit; увеличение Width не исправляет неверную геометрию.

Прочитать свойство · Установить свойство

Непрозрачность обводки

Opacity задаётся 0..1:1 — полностью непрозрачно,0 — не видно,0.5 — частичное смешивание с уже существующим фоном. Это свойство будущей обводки, не команда удалить пиксели или сделать отверстие в исходной картинке. Непрозрачность fill и всего изображения — отдельные действия.

Сверху opacity 0.25, затем 0.5, снизу 1; слева белый фон, справа #dbe8e6, поэтому итоговый оттенок различается
Сверху opacity 0.25, затем 0.5, снизу 1; слева белый фон, справа #dbe8e6, поэтому итоговый оттенок различается Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.

Повторный проход полупрозрачной линией по одному месту может сделать его темнее; это не одноразовая маска 50%. На белом и цветном фоне результат различается. Сохранение в непрозрачный формат/слой и прозрачная PNG — разные требования; StrokeOpacity не заменяет работу с alpha-каналом или маской.

Прочитать свойство · Установить свойство

Сглаживание края обводки

Antialias не добавляет новых точек пути и не размывает весь PNG. Он определяет покрытие пикселей краем stroke; при отключении выбираются цвет штриха или фон по пороговому правилу. По Manual обводки по умолчанию сглажены, но для воспроизводимости примеры задают bool явно.

Слева AA выключен, справа включён: один и тот же фрагмент 16×16 из x=42..57,y=48..63 увеличен nearest-neighbor×16 до 256×256 без создания новых цветов
Слева AA выключен, справа включён: один и тот же фрагмент 16×16 из x=42..57,y=48..63 увеличен nearest-neighbor×16 до 256×256 без создания новых цветов Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.

AA не исправляет плохо состыкованные независимые line, недостаточное разрешение, JPEG-артефакты и неверный Join. Увеличение готового PNG фильтром интерполяции создаёт собственное сглаживание и может скрыть разницу on/off; поэтому сравнение ниже использует nearest-neighbor. При полупрозрачной обводке AA=false не отменяет смешивание с фоном: alpha и покрытие края — разные причины промежуточного цвета. Настройка текста и заливки имеет свои свойства, не обещайте этим методом управлять всем изображением.

Прочитать свойство · Установить свойство

Сетка, полупрозрачное выделение и основной график

В отчётной картинке сетка помогает читать положение, широкое оранжевое выделение обозначает интересующий участок, а основной бирюзовый график остаётся чётким и непрозрачным. Сохраним четыре свойства темы, временно поменяем стиль выделения и вернём исходные значения перед основным графиком. Данные здесь синтетические, поэтому пример показывает компоновку, а не статистический анализ.

PNG 600×320: серая сетка, оранжевый полупрозрачный широкий штрих, бирюзовый график и нижний образец восстановленного стиля
PNG 600×320: серая сетка, оранжевый полупрозрачный широкий штрих, бирюзовый график и нижний образец восстановленного стиля Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Сохранить составной отчёт с восстановлением темыПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(600, 320, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(6);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$grid = new ImagickDraw();
$grid->setStrokeColor('#d6e1df');
$grid->setStrokeWidth(1);
foreach ([60, 120, 180, 240] as $y) {
    $grid->line(20, $y, 580, $y);
}
$image->drawImage($grid);
$grid->clear();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(6);
$draw->setStrokeOpacity(1);
$draw->setStrokeAntialias(true);
$savedColor = $draw->getStrokeColor();
$savedWidth = $draw->getStrokeWidth();
$savedOpacity = $draw->getStrokeOpacity();
$savedAntialias = $draw->getStrokeAntialias();
$draw->setStrokeColor('#c25732');
$draw->setStrokeWidth(22);
$draw->setStrokeOpacity(0.35);
$draw->setStrokeLineCap(Imagick::LINECAP_ROUND);
$draw->line(80, 220, 520, 90);
$draw->setStrokeColor($savedColor);
$draw->setStrokeWidth($savedWidth);
$draw->setStrokeOpacity($savedOpacity);
$draw->setStrokeAntialias($savedAntialias);
$draw->setStrokeLineJoin(Imagick::LINEJOIN_ROUND);
$draw->polyline([
    ['x' => 40, 'y' => 240], ['x' => 160, 'y' => 170], ['x' => 280, 'y' => 200],
    ['x' => 400, 'y' => 70], ['x' => 560, 'y' => 110],
]);
$draw->line(40, 295, 180, 295);
$savedColor->clear();
$image->drawImage($draw);
$path = __DIR__ . '/report-overlay.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'report-overlay.png', "\n";
$draw->clear();
$image->clear();

При успехе создаётся report-overlay.png 600×320, консоль — report-overlay.png. Сетка #d6e1df толщиной 1. Выделение #c25732 толщиной 22 с opacity 0.35. График и легенда #146c74 толщиной 6 с opacity 1 и AA=true; они нарисованы после восстановления цвета/ширины/opacity/AA. Цвет восстанавливается раньше opacity, чтобы порядок установок был явным.

Упражнение: увеличьте ширину основной темы с 6 до 10. Решение: измените начальную setStrokeWidth(6) перед getter. Сохранённая ширина станет 10, а временное выделение останется 22; после восстановления нижний образец тоже будет 10. Затем измените opacity выделения с 0.35 до 0.15: основной график должен остаться непрозрачным, поскольку savedOpacity возвращается явно.

Применить без скрытых предположений

  • Проверяйте непрозрачность 0..1 и неотрицательную конечную толщину до вызова. Цвет/режим выбирайте из согласованной конфигурации; не пытайтесь передать произвольный объект вместо ImagickPixel|string.
  • Не используйте false от getStrokeAntialias как признак неуспеха: это нормальный выключенный режим. Отказ setter/операции и прочитанное false — разные ситуации.
  • Сравнивайте AA при исходном размере и nearest-neighbor увеличении. Браузерное масштабирование, JPEG и ресайз могут добавить свои артефакты.
  • Opacity обводки, альфа всего слоя и прозрачность маски решают разные задачи. Не заменяйте ими друг друга без понимания результата.
  • В HTTP-ответ с PNG не должны попадать диагностические строки echo, HTML или предупреждения. Файлы сохраняйте в фиксированный каталог; обрабатывайте исключения и false от записи.

Эти восемь API продолжают десять настроек окончаний и пунктира. Остальные свойства ImagickDraw и полный PHP Manual не объявляются завершёнными. Дальше полезны пути, файлы, исключения.

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

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

ImagickDraw::getStrokeColorШаблон другого компонента уже выбрал цвет. Нужно узнать его или временно выделить предупреждение и вернуть прежний цвет без знания исходной строки.

PECL imagick 2, PECL imagick 3 · imagick

ImagickDraw::getStrokeColor(): ImagickPixel

Шаблон другого компонента уже выбрал цвет. Нужно узнать его или временно выделить предупреждение и вернуть прежний цвет без знания исходной строки.

StrokeColor задаёт цвет края, а не внутреннюю заливку фигуры. Строка #146c74 — шестнадцатеричные каналы RGB: 14=20, 6c=108, 74=116. Можно передать ImagickPixel; getter возвращает именно объект цвета, не CSS-строку и не массив.

Сигнатура: ImagickDraw::getStrokeColor(): ImagickPixel

Параметров нет: читается состояние конкретного Draw. Знак = сохраняет возвращённые данные в переменную. Getter не определяет стиль по готовым пикселям изображения.

Возврат: ImagickPixel с описанием текущего цвета. В текущем binding создаётся новый PixelWand и отдельный объект; это снимок, не живая ссылка на внутреннее поле Draw. Изменение полученного объекта само по себе не вызывает setStrokeColor. RGB читаем через getColor(0), где 0 означает ненормализованные 8-битные RGB-значения для этого sRGB-примера.

Версии и отказы: PECL imagick 2, PECL imagick 3. В frozen-снимке deprecated/removed не указаны; страница неполностью документирована, разделы errors/changelog пусты. Это не гарантия отсутствия ошибок. Неверный PHP-тип может вызвать TypeError, неверный цвет или состояние Draw — ImagickDrawException, применение/сохранение — ImagickException либо false. Проверяйте значения до рисования и отдельно обрабатывайте отказ записи. Нативное выполнение здесь пока отложено; синтаксис не подтверждает установку расширения.

Полный сохранённый контракт PHP Manual

Все исходные поля сохранены, включая описание, параметры, возвращаемое значение, версии, ссылки и hashes. Русское объяснение раскрывает применение и известные неточности документации.

{
  "id": "imagickdraw.getstrokecolor",
  "name": "ImagickDraw::getStrokeColor",
  "purpose_en": "Returns the color used for stroking object outlines",
  "description_en": "Returns the color used for stroking object outlines.",
  "signature": "ImagickDraw::getStrokeColor(): ImagickPixel",
  "modifiers": [
    "public"
  ],
  "return_type": "ImagickPixel",
  "parameters": [],
  "return_en": "Returns an ImagickPixel object which describes the color.",
  "errors_en": "",
  "changelog_en": "",
  "examples": [],
  "see_also": [],
  "availability": {
    "from": "PECL imagick 2, PECL imagick 3",
    "deprecated": null,
    "removed": null
  },
  "official_url": "https://www.php.net/manual/en/imagickdraw.getstrokecolor.php",
  "official_page_sha256": "6cf03e0868596116c019eb396fe0114cb4983335b7a301cb239efed37ad9a0d4",
  "xml_path": "evidence/imagick-sources/doc-en/reference/imagick/imagickdraw/getstrokecolor.xml",
  "xml_sha256": "11737608826644832c29c34fb311752d84bef96e240c22b333437488c96f54af",
  "official_undocumented_marker": true,
  "owner": "imagick_reference_draw_style.py"
}
Непрозрачная бирюзовая линия #146c74 толщиной 12 от (40,90) до (200,90), с прямыми окончаниями.
Непрозрачная бирюзовая линия #146c74 толщиной 12 от (40,90) до (200,90), с прямыми окончаниями. Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Прочитать: Цвет обводкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 180, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(12);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeColor('#146c74');
$value = $draw->getStrokeColor();
$rgb = $value->getColor(0);
echo 'type=', get_debug_type($value), '; rgb=', $rgb['r'], ',', $rgb['g'], ',', $rgb['b'], "\n";
$value->clear();
$draw->line(40, 90, 200, 90);
$image->drawImage($draw);
$path = __DIR__ . '/getstrokecolor-basic.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'getstrokecolor-basic.png', "\n";
$draw->clear();
$image->clear();

При успешном выполнении создаётся getstrokecolor-basic.png 240×180. Непрозрачная бирюзовая линия #146c74 толщиной 12 от (40,90) до (200,90), с прямыми окончаниями. Перед именем файла консоль: type=ImagickPixel; rgb=20,108,116. Последняя строка — getstrokecolor-basic.png. Холст и все исходные данные создаются кодом; getter читает состояние Draw, не анализирует этот PNG.

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

Общий объект Draw принадлежит шаблону. Сохраняем цвет как ImagickPixel, рисуем временную оранжевую отметку и возвращаем тему для следующей строки.

Вернуть цвет темы после предупрежденияПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(320, 170, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(10);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeColor('#146c74');
$savedColor = $draw->getStrokeColor();
$draw->setStrokeColor('#c25732');
$draw->line(30, 50, 290, 50);
$draw->setStrokeColor($savedColor);
$draw->line(30, 120, 290, 120);
$rgb = $savedColor->getColor(0);
echo 'restored-rgb=', $rgb['r'], ',', $rgb['g'], ',', $rgb['b'], "\n";
$savedColor->clear();
$image->drawImage($draw);
$path = __DIR__ . '/restore-theme-color.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'restore-theme-color.png', "\n";
$draw->clear();
$image->clear();

Результат: restore-theme-color.png 320×170. Верхняя линия оранжевая, нижняя бирюзовая. Getter вернул отдельный объект описания цвета; setStrokeColor явно применил его обратно. Освобождение снимка после передачи не является командой стереть уже записанный Draw. Перед именем файла консоль: restored-rgb=20,108,116. Последняя строка — restore-theme-color.png.

Ошибки, альтернативы и стоимость

Не путайте stroke с fill и цветом фона. У непрозрачного hex-цвета альфа не усложняет пример; в текущем ImageMagick setStrokeColor копирует цвет вместе с alpha, а setStrokeOpacity затем присваивает alpha обводки. Поэтому порядок установок имеет значение: нельзя обещать универсальное произведение rgba-alpha и opacity. Здесь сначала задаём непрозрачный цвет, затем opacity. Одна смена цвета не является достаточной доступной легендой: добавляйте подписи, форму или pattern.

Изменение/чтение настройки и растеризация — разные этапы. Чтение свойства не требует обходить готовое изображение; сохраняйте нужное значение один раз, если оно не меняется. Крупный холст, широкие обводки и множество узлов увеличивают работу drawImage и расход памяти, но объявлять один из этих флагов универсальным способом ускорить весь сервис нельзя. Ограничивайте размеры/число команд, измеряйте полное задание, переиспользуйте статичный PNG.

Пара: ImagickDraw::setStrokeColor. Цвет обводки; окончания/стыки/пунктир; цвета и пиксели.

ImagickDraw::setStrokeColorНесколько состояний в схеме нужно оформить согласованной палитрой, а не менять значения RGB вручную в каждом фрагменте.

PECL imagick 2, PECL imagick 3 · imagick

ImagickDraw::setStrokeColor(ImagickPixel|string $color): bool

Несколько состояний в схеме нужно оформить согласованной палитрой, а не менять значения RGB вручную в каждом фрагменте.

StrokeColor задаёт цвет края, а не внутреннюю заливку фигуры. Строка #146c74 — шестнадцатеричные каналы RGB: 14=20, 6c=108, 74=116. Можно передать ImagickPixel; getter возвращает именно объект цвета, не CSS-строку и не массив.

Сигнатура: ImagickDraw::setStrokeColor(ImagickPixel|string $color): bool

ПараметрТипЧто передать
$colorImagickPixel|stringImagickPixel|string: объект цвета либо поддерживаемая ImageMagick запись, например '#146c74'. Некорректная цветовая строка может вызвать исключение; для внешнего выбора используйте заранее заданную палитру.

Аргумент обязательный, без значения по умолчанию, передаётся по значению. Setter влияет на последующие команды данного объекта. Сигнатура объявляет bool; текущий binding возвращает true после установки, хотя текст return в Manual говорит, что значения нет. Снимок ниже сохраняет оба поля без исправления исходника. Bool не является PNG; вызовы не строят цепочку через возвращённое true.

Версии и отказы: PECL imagick 2, PECL imagick 3. В frozen-снимке deprecated/removed не указаны; страница неполностью документирована, разделы errors/changelog пусты. Это не гарантия отсутствия ошибок. Неверный PHP-тип может вызвать TypeError, неверный цвет или состояние Draw — ImagickDrawException, применение/сохранение — ImagickException либо false. Проверяйте значения до рисования и отдельно обрабатывайте отказ записи. Нативное выполнение здесь пока отложено; синтаксис не подтверждает установку расширения.

Полный сохранённый контракт PHP Manual

Все исходные поля сохранены, включая описание, параметры, возвращаемое значение, версии, ссылки и hashes. Русское объяснение раскрывает применение и известные неточности документации.

{
  "id": "imagickdraw.setstrokecolor",
  "name": "ImagickDraw::setStrokeColor",
  "purpose_en": "Sets the color used for stroking object outlines",
  "description_en": "Sets the color used for stroking object outlines.",
  "signature": "ImagickDraw::setStrokeColor(ImagickPixel|string $color): bool",
  "modifiers": [
    "public"
  ],
  "return_type": "bool",
  "parameters": [
    {
      "name": "color",
      "type": "ImagickPixel|string",
      "by_reference": false,
      "optional": false,
      "default": null,
      "description_en": "the stroke color"
    }
  ],
  "return_en": "Nothing is returned.",
  "errors_en": "",
  "changelog_en": "",
  "examples": [
    {
      "title": "ImagickDraw::setStrokeColor example",
      "language": "php",
      "code_sha256": "63751392c22362be704f8fb4858425a64f60ec7f29e44556d82a2636f62afc43"
    }
  ],
  "see_also": [],
  "availability": {
    "from": "PECL imagick 2, PECL imagick 3",
    "deprecated": null,
    "removed": null
  },
  "official_url": "https://www.php.net/manual/en/imagickdraw.setstrokecolor.php",
  "official_page_sha256": "ccbb415b35a9f152b2f3a76be7bc25105f1a67f88d616b2f9461f93877372f42",
  "xml_path": "evidence/imagick-sources/doc-en/reference/imagick/imagickdraw/setstrokecolor.xml",
  "xml_sha256": "eebffa2a0136c57ee7b9f301d7a91f55bf164ba90b82358afbf0fec8fb287b1b",
  "official_undocumented_marker": true,
  "owner": "imagick_reference_draw_style.py"
}
Непрозрачная бирюзовая линия #146c74 толщиной 12 от (40,90) до (200,90), с прямыми окончаниями.
Непрозрачная бирюзовая линия #146c74 толщиной 12 от (40,90) до (200,90), с прямыми окончаниями. Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Задать: Цвет обводкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 180, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(12);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeColor('#146c74');
$draw->line(40, 90, 200, 90);
$image->drawImage($draw);
$path = __DIR__ . '/setstrokecolor-basic.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'setstrokecolor-basic.png', "\n";
$draw->clear();
$image->clear();

При успешном выполнении создаётся setstrokecolor-basic.png 240×180. Непрозрачная бирюзовая линия #146c74 толщиной 12 от (40,90) до (200,90), с прямыми окончаниями. Последняя строка — setstrokecolor-basic.png. Холст и все исходные данные создаются кодом; getter читает состояние Draw, не анализирует этот PNG.

Практическая задача: Палитра состояний из разрешённого словаря

Сервис передал имена состояний, а не произвольные цветовые строки. Отображаем их через заданную палитру и отклоняем неизвестное имя.

Палитра состояний из разрешённого словаряПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(320, 180, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(10);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$palette = ['ready' => '#146c74', 'warning' => '#c25732', 'offline' => '#354e8d'];
$states = ['ready', 'warning', 'offline'];
foreach ($states as $index => $state) {
    if (!isset($palette[$state])) {
        throw new InvalidArgumentException('Неизвестное состояние');
    }
    $draw->setStrokeColor($palette[$state]);
    $draw->line(40, 40 + $index * 50, 280, 40 + $index * 50);
}
$image->drawImage($draw);
$path = __DIR__ . '/status-palette.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'status-palette.png', "\n";
$draw->clear();
$image->clear();

Результат: status-palette.png 320×180. Три строки сверху вниз: ready бирюзовая, warning оранжевая, offline синяя. Имена уже проверены по ключам массива. В настоящей легенде добавьте текст/форму или pattern: одна разница цвета не передаёт состояние всем читателям. Последняя строка — status-palette.png.

Ошибки, альтернативы и стоимость

Не путайте stroke с fill и цветом фона. У непрозрачного hex-цвета альфа не усложняет пример; в текущем ImageMagick setStrokeColor копирует цвет вместе с alpha, а setStrokeOpacity затем присваивает alpha обводки. Поэтому порядок установок имеет значение: нельзя обещать универсальное произведение rgba-alpha и opacity. Здесь сначала задаём непрозрачный цвет, затем opacity. Одна смена цвета не является достаточной доступной легендой: добавляйте подписи, форму или pattern.

Изменение/чтение настройки и растеризация — разные этапы. Чтение свойства не требует обходить готовое изображение; сохраняйте нужное значение один раз, если оно не меняется. Крупный холст, широкие обводки и множество узлов увеличивают работу drawImage и расход памяти, но объявлять один из этих флагов универсальным способом ускорить весь сервис нельзя. Ограничивайте размеры/число команд, измеряйте полное задание, переиспользуйте статичный PNG.

Пара: ImagickDraw::getStrokeColor. Цвет обводки; окончания/стыки/пунктир; цвета и пиксели.

ImagickDraw::getStrokeWidthДля рамки внутри фиксированного холста нужно знать уже установленную толщину и оставить место под половину обводки по каждую сторону контура.

PECL imagick 2, PECL imagick 3 · imagick

ImagickDraw::getStrokeWidth(): float

Для рамки внутри фиксированного холста нужно знать уже установленную толщину и оставить место под половину обводки по каждую сторону контура.

Толщина — float в единицах текущей системы координат; на холсте без преобразований это пиксели. Обводка геометрически располагается по обе стороны центральной линии. Дробная толщина допустима: промежуточное покрытие краёв не равно ошибке.

Сигнатура: ImagickDraw::getStrokeWidth(): float

Параметров нет: читается состояние конкретного Draw. Знак = сохраняет возвращённые данные в переменную. Getter не определяет стиль по готовым пикселям изображения.

Возврат: float с установленной толщиной. Например 12.5 остаётся дробным значением; number_format в примере нужен только для стабильной печати 12.50, не изменяет настройку. Getter не измеряет число окрашенных рядов пикселей в PNG.

Версии и отказы: PECL imagick 2, PECL imagick 3. В frozen-снимке deprecated/removed не указаны; страница неполностью документирована, разделы errors/changelog пусты. Это не гарантия отсутствия ошибок. Неверный PHP-тип может вызвать TypeError, неверный цвет или состояние Draw — ImagickDrawException, применение/сохранение — ImagickException либо false. Проверяйте значения до рисования и отдельно обрабатывайте отказ записи. Нативное выполнение здесь пока отложено; синтаксис не подтверждает установку расширения.

Полный сохранённый контракт PHP Manual

Все исходные поля сохранены, включая описание, параметры, возвращаемое значение, версии, ссылки и hashes. Русское объяснение раскрывает применение и известные неточности документации.

{
  "id": "imagickdraw.getstrokewidth",
  "name": "ImagickDraw::getStrokeWidth",
  "purpose_en": "Returns the width of the stroke used to draw object outlines",
  "description_en": "Returns the width of the stroke used to draw object outlines.",
  "signature": "ImagickDraw::getStrokeWidth(): float",
  "modifiers": [
    "public"
  ],
  "return_type": "float",
  "parameters": [],
  "return_en": "Returns a float describing the stroke width.",
  "errors_en": "",
  "changelog_en": "",
  "examples": [],
  "see_also": [],
  "availability": {
    "from": "PECL imagick 2, PECL imagick 3",
    "deprecated": null,
    "removed": null
  },
  "official_url": "https://www.php.net/manual/en/imagickdraw.getstrokewidth.php",
  "official_page_sha256": "4b1aaf0c689f8766b999053ccf0d60faea8ca470c1eee4642aa70cd34037d346",
  "xml_path": "evidence/imagick-sources/doc-en/reference/imagick/imagickdraw/getstrokewidth.xml",
  "xml_sha256": "92b55918ec27bc7fab5b6cb4f60a24046868bf295321becf2aeba455ed24d66a",
  "official_undocumented_marker": true,
  "owner": "imagick_reference_draw_style.py"
}
Бирюзовая горизонтальная линия с геометрической толщиной 12.5, а не округлённой до 12 или 13. На пограничных пикселях работает сглаживание.
Бирюзовая горизонтальная линия с геометрической толщиной 12.5, а не округлённой до 12 или 13. На пограничных пикселях работает сглаживание. Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Прочитать: Толщина обводкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 180, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(12.5);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeWidth(12.5);
$value = $draw->getStrokeWidth();
echo 'width=', number_format($value, 2, '.', ''), '; type=', get_debug_type($value), "\n";
$draw->line(40, 90, 200, 90);
$image->drawImage($draw);
$path = __DIR__ . '/getstrokewidth-basic.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'getstrokewidth-basic.png', "\n";
$draw->clear();
$image->clear();

При успешном выполнении создаётся getstrokewidth-basic.png 240×180. Бирюзовая горизонтальная линия с геометрической толщиной 12.5, а не округлённой до 12 или 13. На пограничных пикселях работает сглаживание. Перед именем файла консоль: width=12.50; type=float. Последняя строка — getstrokewidth-basic.png. Холст и все исходные данные создаются кодом; getter читает состояние Draw, не анализирует этот PNG.

Практическая задача: Рамка, которая помещается внутрь холста

Толщина приходит из темы. Прочитаем её и отступим от заданного внешнего поля на половину толщины, чтобы рамка не обрезалась.

Рамка, которая помещается внутрь холстаПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(300, 160, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(12.5);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeWidth(12.5);
$width = $draw->getStrokeWidth();
$inset = 10 + $width / 2;
$draw->rectangle($inset, $inset, 300 - $inset, 160 - $inset);
echo 'inset=', number_format($inset, 2, '.', ''), "\n";
$image->drawImage($draw);
$path = __DIR__ . '/inset-border.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'inset-border.png', "\n";
$draw->clear();
$image->clear();

Результат: inset-border.png 300×160. Прямоугольная бирюзовая рамка с центральным контуром(16.25,16.25)—(283.75,143.75). Геометрически наружный край остаётся около 10 единиц от границы; для строгого требования по alpha-пикселям оставьте ещё запас сглаживания. Getter участвует в расчёте поля, а не округляется до целого. Перед именем файла консоль: inset=16.25. Последняя строка — inset-border.png.

Ошибки, альтернативы и стоимость

Рамка по координатам(0,0)—(width-1,height-1) теряет наружную половину толстого stroke за холстом. Отступайте на width/2 и запас для сглаживания. Видимая длина также зависит от Cap, а острый выступ — от Join/MiterLimit; увеличение Width не исправляет неверную геометрию.

Изменение/чтение настройки и растеризация — разные этапы. Чтение свойства не требует обходить готовое изображение; сохраняйте нужное значение один раз, если оно не меняется. Крупный холст, широкие обводки и множество узлов увеличивают работу drawImage и расход памяти, но объявлять один из этих флагов универсальным способом ускорить весь сервис нельзя. Ограничивайте размеры/число команд, измеряйте полное задание, переиспользуйте статичный PNG.

Пара: ImagickDraw::setStrokeWidth. Толщина обводки; окончания/стыки/пунктир; цвета и пиксели.

ImagickDraw::setStrokeWidthНа отчётной схеме загруженные соединения должны быть толще слабых, но не выходить за разумные пределы и не превращать нулевую нагрузку в линию.

PECL imagick 2, PECL imagick 3 · imagick

ImagickDraw::setStrokeWidth(float $width): bool

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

Толщина — float в единицах текущей системы координат; на холсте без преобразований это пиксели. Обводка геометрически располагается по обе стороны центральной линии. Дробная толщина допустима: промежуточное покрытие краёв не равно ошибке.

Сигнатура: ImagickDraw::setStrokeWidth(float $width): bool

ПараметрТипЧто передать
$widthfloatfloat width; для прикладного ввода проверяйте конечное число>=0. Ноль означает отсутствие рисуемой обводки по SVG-модели; отрицательная ширина невалидна. Не рассчитывайте на неявное исправление неверного ввода разными версиями.

Аргумент обязательный, без значения по умолчанию, передаётся по значению. Setter влияет на последующие команды данного объекта. Сигнатура объявляет bool; текущий binding возвращает true после установки, хотя текст return в Manual говорит, что значения нет. Снимок ниже сохраняет оба поля без исправления исходника. Bool не является PNG; вызовы не строят цепочку через возвращённое true.

Версии и отказы: PECL imagick 2, PECL imagick 3. В frozen-снимке deprecated/removed не указаны; страница неполностью документирована, разделы errors/changelog пусты. Это не гарантия отсутствия ошибок. Неверный PHP-тип может вызвать TypeError, неверный цвет или состояние Draw — ImagickDrawException, применение/сохранение — ImagickException либо false. Проверяйте значения до рисования и отдельно обрабатывайте отказ записи. Нативное выполнение здесь пока отложено; синтаксис не подтверждает установку расширения.

Полный сохранённый контракт PHP Manual

Все исходные поля сохранены, включая описание, параметры, возвращаемое значение, версии, ссылки и hashes. Русское объяснение раскрывает применение и известные неточности документации.

{
  "id": "imagickdraw.setstrokewidth",
  "name": "ImagickDraw::setStrokeWidth",
  "purpose_en": "Sets the width of the stroke used to draw object outlines",
  "description_en": "Sets the width of the stroke used to draw object outlines.",
  "signature": "ImagickDraw::setStrokeWidth(float $width): bool",
  "modifiers": [
    "public"
  ],
  "return_type": "bool",
  "parameters": [
    {
      "name": "width",
      "type": "float",
      "by_reference": false,
      "optional": false,
      "default": null,
      "description_en": "stroke width"
    }
  ],
  "return_en": "Nothing is returned.",
  "errors_en": "",
  "changelog_en": "",
  "examples": [
    {
      "title": "ImagickDraw::setStrokeWidth example",
      "language": "php",
      "code_sha256": "a54c4d427fa7a5238d87525c96f77caceee657d08f5abd27672c2c8eaf65f339"
    }
  ],
  "see_also": [],
  "availability": {
    "from": "PECL imagick 2, PECL imagick 3",
    "deprecated": null,
    "removed": null
  },
  "official_url": "https://www.php.net/manual/en/imagickdraw.setstrokewidth.php",
  "official_page_sha256": "d23010830179e2491abfcd6d619aaaeccbfacbd1ef9d3746ea2a6e8726d81fcd",
  "xml_path": "evidence/imagick-sources/doc-en/reference/imagick/imagickdraw/setstrokewidth.xml",
  "xml_sha256": "0c34562b43b8dfe71dd97f330c74a1338942f44220f6c9779df408dee60cad7d",
  "official_undocumented_marker": true,
  "owner": "imagick_reference_draw_style.py"
}
Бирюзовая горизонтальная линия с геометрической толщиной 12.5, а не округлённой до 12 или 13. На пограничных пикселях работает сглаживание.
Бирюзовая горизонтальная линия с геометрической толщиной 12.5, а не округлённой до 12 или 13. На пограничных пикселях работает сглаживание. Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Задать: Толщина обводкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 180, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(12.5);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeWidth(12.5);
$draw->line(40, 90, 200, 90);
$image->drawImage($draw);
$path = __DIR__ . '/setstrokewidth-basic.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'setstrokewidth-basic.png', "\n";
$draw->clear();
$image->clear();

При успешном выполнении создаётся setstrokewidth-basic.png 240×180. Бирюзовая горизонтальная линия с геометрической толщиной 12.5, а не округлённой до 12 или 13. На пограничных пикселях работает сглаживание. Последняя строка — setstrokewidth-basic.png. Холст и все исходные данные создаются кодом; getter читает состояние Draw, не анализирует этот PNG.

Практическая задача: Толщина соединений из нагрузки

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

Толщина соединений из нагрузкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(320, 180, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(1);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$loads = [0, 25, 100];
foreach ($loads as $index => $load) {
    if ($load === 0) {
        continue;
    }
    $width = max(1, min(12, $load / 10));
    $draw->setStrokeWidth($width);
    $draw->line(40, 40 + $index * 50, 280, 40 + $index * 50);
}
$image->drawImage($draw);
$path = __DIR__ . '/weighted-connections.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'weighted-connections.png', "\n";
$draw->clear();
$image->clear();

Результат: weighted-connections.png 320×180. На y=40 линия отсутствует, y=90 имеет толщину 2.5, y=140 —10. Это выбранная шкала отчёта, не автоматическая статистическая нормализация; входную нагрузку проверяют как неотрицательное конечное число. Последняя строка — weighted-connections.png.

Ошибки, альтернативы и стоимость

Рамка по координатам(0,0)—(width-1,height-1) теряет наружную половину толстого stroke за холстом. Отступайте на width/2 и запас для сглаживания. Видимая длина также зависит от Cap, а острый выступ — от Join/MiterLimit; увеличение Width не исправляет неверную геометрию.

Изменение/чтение настройки и растеризация — разные этапы. Чтение свойства не требует обходить готовое изображение; сохраняйте нужное значение один раз, если оно не меняется. Крупный холст, широкие обводки и множество узлов увеличивают работу drawImage и расход памяти, но объявлять один из этих флагов универсальным способом ускорить весь сервис нельзя. Ограничивайте размеры/число команд, измеряйте полное задание, переиспользуйте статичный PNG.

Пара: ImagickDraw::getStrokeWidth. Толщина обводки; окончания/стыки/пунктир; цвета и пиксели.

ImagickDraw::getStrokeOpacityШаблон содержит слишком слабую обводку для выбранного режима отчёта. Прочитаем opacity и применим заранее выбранный минимум, сохранив исходное значение для журнала.

PECL imagick 2, PECL imagick 3 · imagick

ImagickDraw::getStrokeOpacity(): float

Шаблон содержит слишком слабую обводку для выбранного режима отчёта. Прочитаем opacity и применим заранее выбранный минимум, сохранив исходное значение для журнала.

Opacity задаётся 0..1:1 — полностью непрозрачно,0 — не видно,0.5 — частичное смешивание с уже существующим фоном. Это свойство будущей обводки, не команда удалить пиксели или сделать отверстие в исходной картинке. Непрозрачность fill и всего изображения — отдельные действия.

Сигнатура: ImagickDraw::getStrokeOpacity(): float

Параметров нет: читается состояние конкретного Draw. Знак = сохраняет возвращённые данные в переменную. Getter не определяет стиль по готовым пикселям изображения.

Возврат: float с состоянием opacity. Внутренняя квантовая глубина ImageMagick может дать небольшое отличие от идеальной десятичной доли; для журнала в примере округляем вывод до двух знаков, но не утверждаем точное равенство float через===0.5.

Версии и отказы: PECL imagick 2, PECL imagick 3. В frozen-снимке deprecated/removed не указаны; страница неполностью документирована, разделы errors/changelog пусты. Это не гарантия отсутствия ошибок. Неверный PHP-тип может вызвать TypeError, неверный цвет или состояние Draw — ImagickDrawException, применение/сохранение — ImagickException либо false. Проверяйте значения до рисования и отдельно обрабатывайте отказ записи. Нативное выполнение здесь пока отложено; синтаксис не подтверждает установку расширения.

Полный сохранённый контракт PHP Manual

Все исходные поля сохранены, включая описание, параметры, возвращаемое значение, версии, ссылки и hashes. Русское объяснение раскрывает применение и известные неточности документации.

{
  "id": "imagickdraw.getstrokeopacity",
  "name": "ImagickDraw::getStrokeOpacity",
  "purpose_en": "Returns the opacity of stroked object outlines",
  "description_en": "Returns the opacity of stroked object outlines.",
  "signature": "ImagickDraw::getStrokeOpacity(): float",
  "modifiers": [
    "public"
  ],
  "return_type": "float",
  "parameters": [],
  "return_en": "Returns a float describing the opacity.",
  "errors_en": "",
  "changelog_en": "",
  "examples": [],
  "see_also": [],
  "availability": {
    "from": "PECL imagick 2, PECL imagick 3",
    "deprecated": null,
    "removed": null
  },
  "official_url": "https://www.php.net/manual/en/imagickdraw.getstrokeopacity.php",
  "official_page_sha256": "1c9213baabab04174046ee555fcf32e8c0671bacbcced7ccb468d0edb15885c1",
  "xml_path": "evidence/imagick-sources/doc-en/reference/imagick/imagickdraw/getstrokeopacity.xml",
  "xml_sha256": "485869acd63ae8cb6d8932d7ea63807da0ecb8a56238fffc543d2b5a269d1451",
  "official_undocumented_marker": true,
  "owner": "imagick_reference_draw_style.py"
}
Полупрозрачная бирюзовая линия толщиной 20 на двух фонах: белом слева и #dbe8e6 справа. Итоговый оттенок зависит от фона; opacity 0.5 не превращает саму линию в новый фиксированный RGB-цвет.
Полупрозрачная бирюзовая линия толщиной 20 на двух фонах: белом слева и #dbe8e6 справа. Итоговый оттенок зависит от фона; opacity 0.5 не превращает саму линию в новый фиксированный RGB-цвет. Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Прочитать: Непрозрачность обводкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 180, 'white');
$image->setImageFormat('png');
$background = new ImagickDraw();
$background->setStrokeColor('none');
$background->setFillColor('#dbe8e6');
$background->rectangle(120, 0, 239, 179);
$image->drawImage($background);
$background->clear();
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(20);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeOpacity(0.5);
$value = $draw->getStrokeOpacity();
echo 'opacity=', number_format($value, 2, '.', ''), '; type=', get_debug_type($value), "\n";
$draw->line(25, 90, 215, 90);
$image->drawImage($draw);
$path = __DIR__ . '/getstrokeopacity-basic.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'getstrokeopacity-basic.png', "\n";
$draw->clear();
$image->clear();

При успешном выполнении создаётся getstrokeopacity-basic.png 240×180. Полупрозрачная бирюзовая линия толщиной 20 на двух фонах: белом слева и #dbe8e6 справа. Итоговый оттенок зависит от фона; opacity 0.5 не превращает саму линию в новый фиксированный RGB-цвет. Перед именем файла консоль: opacity=0.50; type=float. Последняя строка — getstrokeopacity-basic.png. Холст и все исходные данные создаются кодом; getter читает состояние Draw, не анализирует этот PNG.

Практическая задача: Применить минимальную заметность по политике отчёта

В теме стоит opacity 0.2. Сохраняем его для журнала, рисуем слабый образец, затем поднимаем слишком малое значение до 0.75 для основного режима.

Применить минимальную заметность по политике отчётаПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(320, 170, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(16);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeOpacity(0.2);
$draw->line(30, 50, 290, 50);
$before = $draw->getStrokeOpacity();
if ($before < 0.4) {
    $draw->setStrokeOpacity(0.75);
}
$draw->line(30, 120, 290, 120);
echo 'before=', number_format($before, 2, '.', ''), '; after=',
    number_format($draw->getStrokeOpacity(), 2, '.', ''), "\n";
$image->drawImage($draw);
$path = __DIR__ . '/opacity-policy.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'opacity-policy.png', "\n";
$draw->clear();
$image->clear();

Результат: opacity-policy.png 320×170. Верхняя бирюзовая линия слабая, нижняя заметнее на белом фоне. Это правило конкретного отчёта, не гарантия доступного контраста для любого цвета и фона. Проверяйте итоговую видимость, не только число opacity. Перед именем файла консоль: before=0.20; after=0.75. Последняя строка — opacity-policy.png.

Ошибки, альтернативы и стоимость

Повторный проход полупрозрачной линией по одному месту может сделать его темнее; это не одноразовая маска 50%. На белом и цветном фоне результат различается. Сохранение в непрозрачный формат/слой и прозрачная PNG — разные требования; StrokeOpacity не заменяет работу с alpha-каналом или маской.

Изменение/чтение настройки и растеризация — разные этапы. Чтение свойства не требует обходить готовое изображение; сохраняйте нужное значение один раз, если оно не меняется. Крупный холст, широкие обводки и множество узлов увеличивают работу drawImage и расход памяти, но объявлять один из этих флагов универсальным способом ускорить весь сервис нельзя. Ограничивайте размеры/число команд, измеряйте полное задание, переиспользуйте статичный PNG.

Пара: ImagickDraw::setStrokeOpacity. Непрозрачность обводки; окончания/стыки/пунктир; цвета и пиксели.

ImagickDraw::setStrokeOpacityНужно поверх отчётной сетки выделить область толстым штрихом, оставив данные под выделением видимыми.

PECL imagick 2, PECL imagick 3 · imagick

ImagickDraw::setStrokeOpacity(float $opacity): bool

Нужно поверх отчётной сетки выделить область толстым штрихом, оставив данные под выделением видимыми.

Opacity задаётся 0..1:1 — полностью непрозрачно,0 — не видно,0.5 — частичное смешивание с уже существующим фоном. Это свойство будущей обводки, не команда удалить пиксели или сделать отверстие в исходной картинке. Непрозрачность fill и всего изображения — отдельные действия.

Сигнатура: ImagickDraw::setStrokeOpacity(float $opacity): bool

ПараметрТипЧто передать
$opacityfloatfloat opacity в прикладном диапазоне 0..1. Не передавайте 50 вместо 0.5 и не используйте альфа-шкалу GD 0..127. Вход из формы сначала проверяют как число и диапазон.

Аргумент обязательный, без значения по умолчанию, передаётся по значению. Setter влияет на последующие команды данного объекта. Сигнатура объявляет bool; текущий binding возвращает true после установки, хотя текст return в Manual говорит, что значения нет. Снимок ниже сохраняет оба поля без исправления исходника. Bool не является PNG; вызовы не строят цепочку через возвращённое true.

Версии и отказы: PECL imagick 2, PECL imagick 3. В frozen-снимке deprecated/removed не указаны; страница неполностью документирована, разделы errors/changelog пусты. Это не гарантия отсутствия ошибок. Неверный PHP-тип может вызвать TypeError, неверный цвет или состояние Draw — ImagickDrawException, применение/сохранение — ImagickException либо false. Проверяйте значения до рисования и отдельно обрабатывайте отказ записи. Нативное выполнение здесь пока отложено; синтаксис не подтверждает установку расширения.

Полный сохранённый контракт PHP Manual

Все исходные поля сохранены, включая описание, параметры, возвращаемое значение, версии, ссылки и hashes. Русское объяснение раскрывает применение и известные неточности документации.

{
  "id": "imagickdraw.setstrokeopacity",
  "name": "ImagickDraw::setStrokeOpacity",
  "purpose_en": "Specifies the opacity of stroked object outlines",
  "description_en": "Specifies the opacity of stroked object outlines.",
  "signature": "ImagickDraw::setStrokeOpacity(float $opacity): bool",
  "modifiers": [
    "public"
  ],
  "return_type": "bool",
  "parameters": [
    {
      "name": "opacity",
      "type": "float",
      "by_reference": false,
      "optional": false,
      "default": null,
      "description_en": "stroke opacity. 1.0 is fully opaque"
    }
  ],
  "return_en": "Nothing is returned.",
  "errors_en": "",
  "changelog_en": "",
  "examples": [
    {
      "title": "ImagickDraw::setStrokeOpacity example",
      "language": "php",
      "code_sha256": "bb65a110a4af2cc0b901b4ebf1eef140c2def0441afaab0734de2c978fa9896c"
    }
  ],
  "see_also": [],
  "availability": {
    "from": "PECL imagick 2, PECL imagick 3",
    "deprecated": null,
    "removed": null
  },
  "official_url": "https://www.php.net/manual/en/imagickdraw.setstrokeopacity.php",
  "official_page_sha256": "326b84b5d63d3c67d4d06698358f8323aa339864c644e84e5c8143ad7585cb5b",
  "xml_path": "evidence/imagick-sources/doc-en/reference/imagick/imagickdraw/setstrokeopacity.xml",
  "xml_sha256": "1a4c0b1c9ef52f101f64995fd4daaacd5565c7d5cdda41d8f0aab8a7564d4c24",
  "official_undocumented_marker": true,
  "owner": "imagick_reference_draw_style.py"
}
Полупрозрачная бирюзовая линия толщиной 20 на двух фонах: белом слева и #dbe8e6 справа. Итоговый оттенок зависит от фона; opacity 0.5 не превращает саму линию в новый фиксированный RGB-цвет.
Полупрозрачная бирюзовая линия толщиной 20 на двух фонах: белом слева и #dbe8e6 справа. Итоговый оттенок зависит от фона; opacity 0.5 не превращает саму линию в новый фиксированный RGB-цвет. Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Задать: Непрозрачность обводкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 180, 'white');
$image->setImageFormat('png');
$background = new ImagickDraw();
$background->setStrokeColor('none');
$background->setFillColor('#dbe8e6');
$background->rectangle(120, 0, 239, 179);
$image->drawImage($background);
$background->clear();
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(20);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeOpacity(0.5);
$draw->line(25, 90, 215, 90);
$image->drawImage($draw);
$path = __DIR__ . '/setstrokeopacity-basic.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'setstrokeopacity-basic.png', "\n";
$draw->clear();
$image->clear();

При успешном выполнении создаётся setstrokeopacity-basic.png 240×180. Полупрозрачная бирюзовая линия толщиной 20 на двух фонах: белом слева и #dbe8e6 справа. Итоговый оттенок зависит от фона; opacity 0.5 не превращает саму линию в новый фиксированный RGB-цвет. Последняя строка — setstrokeopacity-basic.png. Холст и все исходные данные создаются кодом; getter читает состояние Draw, не анализирует этот PNG.

Практическая задача: Выделение поверх сетки без полного закрытия данных

Сгенерируем сетку отчёта и проведём поверх широкий полупрозрачный штрих, чтобы сетка оставалась различимой.

Выделение поверх сетки без полного закрытия данныхПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(320, 170, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(22);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$grid = new ImagickDraw();
$grid->setStrokeColor('#d6e1df');
$grid->setStrokeWidth(1);
foreach ([40, 80, 120] as $y) {
    $grid->line(15, $y, 305, $y);
}
$image->drawImage($grid);
$grid->clear();
$draw->setStrokeColor('#c25732');
$draw->setStrokeWidth(22);
$draw->setStrokeOpacity(0.35);
$draw->line(40, 135, 280, 35);
$image->drawImage($draw);
$path = __DIR__ . '/translucent-highlight.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'translucent-highlight.png', "\n";
$draw->clear();
$image->clear();

Результат: translucent-highlight.png 320×170. Оранжевый широкий диагональный штрих частично пропускает три серые горизонтали под ним. Opacity назначена после непрозрачного цвета и до рисования; она не меняет уже нанесённую сетку и не создаёт отверстие в холсте. Последняя строка — translucent-highlight.png.

Ошибки, альтернативы и стоимость

Повторный проход полупрозрачной линией по одному месту может сделать его темнее; это не одноразовая маска 50%. На белом и цветном фоне результат различается. Сохранение в непрозрачный формат/слой и прозрачная PNG — разные требования; StrokeOpacity не заменяет работу с alpha-каналом или маской.

Изменение/чтение настройки и растеризация — разные этапы. Чтение свойства не требует обходить готовое изображение; сохраняйте нужное значение один раз, если оно не меняется. Крупный холст, широкие обводки и множество узлов увеличивают работу drawImage и расход памяти, но объявлять один из этих флагов универсальным способом ускорить весь сервис нельзя. Ограничивайте размеры/число команд, измеряйте полное задание, переиспользуйте статичный PNG.

Пара: ImagickDraw::getStrokeOpacity. Непрозрачность обводки; окончания/стыки/пунктир; цвета и пиксели.

ImagickDraw::getStrokeAntialiasВременный диагностический режим отключает сглаживание. Прочитаем прежний bool и вернём его, чтобы следующий обычный рисунок не унаследовал пиксельную лесенку.

PECL imagick 2, PECL imagick 3 · imagick

ImagickDraw::getStrokeAntialias(): bool

Временный диагностический режим отключает сглаживание. Прочитаем прежний bool и вернём его, чтобы следующий обычный рисунок не унаследовал пиксельную лесенку.

Antialias не добавляет новых точек пути и не размывает весь PNG. Он определяет покрытие пикселей краем stroke; при отключении выбираются цвет штриха или фон по пороговому правилу. По Manual обводки по умолчанию сглажены, но для воспроизводимости примеры задают bool явно.

Сигнатура: ImagickDraw::getStrokeAntialias(): bool

Параметров нет: читается состояние конкретного Draw. Знак = сохраняет возвращённые данные в переменную. Getter не определяет стиль по готовым пикселям изображения.

Возврат: bool: true означает включённое сглаживание, false — выключенное. false здесь нормальное прочитанное состояние, а не признак ошибки getter. Это настройка stroke, не отчёт о том, каким способом масштабировалось готовое изображение.

Версии и отказы: PECL imagick 2, PECL imagick 3. В frozen-снимке deprecated/removed не указаны; страница неполностью документирована, разделы errors/changelog пусты. Это не гарантия отсутствия ошибок. Неверный PHP-тип может вызвать TypeError, неверный цвет или состояние Draw — ImagickDrawException, применение/сохранение — ImagickException либо false. Проверяйте значения до рисования и отдельно обрабатывайте отказ записи. Нативное выполнение здесь пока отложено; синтаксис не подтверждает установку расширения.

Полный сохранённый контракт PHP Manual

Все исходные поля сохранены, включая описание, параметры, возвращаемое значение, версии, ссылки и hashes. Русское объяснение раскрывает применение и известные неточности документации.

{
  "id": "imagickdraw.getstrokeantialias",
  "name": "ImagickDraw::getStrokeAntialias",
  "purpose_en": "Returns the current stroke antialias setting",
  "description_en": "Returns the current stroke antialias setting. Stroked outlines are antialiased by default. When antialiasing is disabled stroked pixels are thresholded to determine if the stroke color or underlying canvas color should be used.",
  "signature": "ImagickDraw::getStrokeAntialias(): bool",
  "modifiers": [
    "public"
  ],
  "return_type": "bool",
  "parameters": [],
  "return_en": "Returns true if antialiasing is on and false if it is off.",
  "errors_en": "",
  "changelog_en": "",
  "examples": [],
  "see_also": [],
  "availability": {
    "from": "PECL imagick 2, PECL imagick 3",
    "deprecated": null,
    "removed": null
  },
  "official_url": "https://www.php.net/manual/en/imagickdraw.getstrokeantialias.php",
  "official_page_sha256": "51d31a442302a71704489e95ca95f08e246a2c05e3b56d0161e314eef81f10fa",
  "xml_path": "evidence/imagick-sources/doc-en/reference/imagick/imagickdraw/getstrokeantialias.xml",
  "xml_sha256": "4f61d7813d2f4d3cf892a53714e4ab6bf3934ae90f561dbef194ed63e1daf454",
  "official_undocumented_marker": true,
  "owner": "imagick_reference_draw_style.py"
}
Тонкая диагональ из(18,75) в(110,22) на белом холсте 128×96. При включённом AA край получает промежуточные покрытия пикселей и выглядит мягче в исходном размере.
Тонкая диагональ из(18,75) в(110,22) на белом холсте 128×96. При включённом AA край получает промежуточные покрытия пикселей и выглядит мягче в исходном размере. Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Прочитать: Сглаживание края обводкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(128, 96, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(1);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeAntialias(true);
$value = $draw->getStrokeAntialias();
echo 'antialias=', $value ? 'on' : 'off', '; type=', get_debug_type($value), "\n";
$draw->line(18, 75, 110, 22);
$image->drawImage($draw);
$path = __DIR__ . '/getstrokeantialias-basic.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'getstrokeantialias-basic.png', "\n";
$draw->clear();
$image->clear();

При успешном выполнении создаётся getstrokeantialias-basic.png 128×96. Тонкая диагональ из(18,75) в(110,22) на белом холсте 128×96. При включённом AA край получает промежуточные покрытия пикселей и выглядит мягче в исходном размере. Перед именем файла консоль: antialias=on; type=bool. Последняя строка — getstrokeantialias-basic.png. Холст и все исходные данные создаются кодом; getter читает состояние Draw, не анализирует этот PNG.

Практическая задача: Временный пиксельный режим и возврат к обычному

Вспомогательный образец нужен без сглаживания, но общий Draw после него должен продолжить исходный режим. Сохраним bool, не трактуя false как ошибку.

Временный пиксельный режим и возврат к обычномуПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(240, 160, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(1);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeAntialias(true);
$saved = $draw->getStrokeAntialias();
$draw->setStrokeAntialias(false);
$draw->line(20, 60, 100, 20);
$draw->setStrokeAntialias($saved);
$draw->line(140, 140, 220, 100);
echo 'restored=', $draw->getStrokeAntialias() ? 'on' : 'off', "\n";
$image->drawImage($draw);
$path = __DIR__ . '/restore-antialias.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'restore-antialias.png', "\n";
$draw->clear();
$image->clear();

Результат: restore-antialias.png 240×160. Слева сверху диагональ без AA, справа ниже такая же по направлению — после восстановления true. В исходном размере различается покрытие крайних пикселей; смотрите PNG без дополнительного сглаживающего масштабирования. Перед именем файла консоль: restored=on. Последняя строка — restore-antialias.png.

Тот же исходный 128×96 PNG без сглаживания; увеличение браузером может добавить собственную интерполяцию
Тот же исходный 128×96 PNG без сглаживания; увеличение браузером может добавить собственную интерполяцию Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.

Ошибки, альтернативы и стоимость

AA не исправляет плохо состыкованные независимые line, недостаточное разрешение, JPEG-артефакты и неверный Join. Увеличение готового PNG фильтром интерполяции создаёт собственное сглаживание и может скрыть разницу on/off; поэтому сравнение ниже использует nearest-neighbor. При полупрозрачной обводке AA=false не отменяет смешивание с фоном: alpha и покрытие края — разные причины промежуточного цвета. Настройка текста и заливки имеет свои свойства, не обещайте этим методом управлять всем изображением.

Изменение/чтение настройки и растеризация — разные этапы. Чтение свойства не требует обходить готовое изображение; сохраняйте нужное значение один раз, если оно не меняется. Крупный холст, широкие обводки и множество узлов увеличивают работу drawImage и расход памяти, но объявлять один из этих флагов универсальным способом ускорить весь сервис нельзя. Ограничивайте размеры/число команд, измеряйте полное задание, переиспользуйте статичный PNG.

Пара: ImagickDraw::setStrokeAntialias. Сглаживание края обводки; окончания/стыки/пунктир; цвета и пиксели.

ImagickDraw::setStrokeAntialiasОдин экспорт нужен для пиксельной диагностики, другой — для обычной картинки интерфейса. Геометрия одинакова, режим покрытия края разный.

PECL imagick 2, PECL imagick 3 · imagick

ImagickDraw::setStrokeAntialias(bool $enabled): bool

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

Antialias не добавляет новых точек пути и не размывает весь PNG. Он определяет покрытие пикселей краем stroke; при отключении выбираются цвет штриха или фон по пороговому правилу. По Manual обводки по умолчанию сглажены, но для воспроизводимости примеры задают bool явно.

Сигнатура: ImagickDraw::setStrokeAntialias(bool $enabled): bool

ПараметрТипЧто передать
$enabledboolbool enabled: true включить, false выключить. Строка 'false' не является логическим false; входное значение должно быть разобрано как bool до вызова.

Аргумент обязательный, без значения по умолчанию, передаётся по значению. Setter влияет на последующие команды данного объекта. Сигнатура объявляет bool; текущий binding возвращает true после установки, хотя текст return в Manual говорит, что значения нет. Снимок ниже сохраняет оба поля без исправления исходника. Bool не является PNG; вызовы не строят цепочку через возвращённое true.

Версии и отказы: PECL imagick 2, PECL imagick 3. В frozen-снимке deprecated/removed не указаны; страница неполностью документирована, разделы errors/changelog пусты. Это не гарантия отсутствия ошибок. Неверный PHP-тип может вызвать TypeError, неверный цвет или состояние Draw — ImagickDrawException, применение/сохранение — ImagickException либо false. Проверяйте значения до рисования и отдельно обрабатывайте отказ записи. Нативное выполнение здесь пока отложено; синтаксис не подтверждает установку расширения.

Полный сохранённый контракт PHP Manual

Все исходные поля сохранены, включая описание, параметры, возвращаемое значение, версии, ссылки и hashes. Русское объяснение раскрывает применение и известные неточности документации.

{
  "id": "imagickdraw.setstrokeantialias",
  "name": "ImagickDraw::setStrokeAntialias",
  "purpose_en": "Controls whether stroked outlines are antialiased",
  "description_en": "Controls whether stroked outlines are antialiased. Stroked outlines are antialiased by default. When antialiasing is disabled stroked pixels are thresholded to determine if the stroke color or underlying canvas color should be used.",
  "signature": "ImagickDraw::setStrokeAntialias(bool $enabled): bool",
  "modifiers": [
    "public"
  ],
  "return_type": "bool",
  "parameters": [
    {
      "name": "enabled",
      "type": "bool",
      "by_reference": false,
      "optional": false,
      "default": null,
      "description_en": "the antialias setting"
    }
  ],
  "return_en": "Nothing is returned.",
  "errors_en": "",
  "changelog_en": "",
  "examples": [
    {
      "title": "ImagickDraw::setStrokeAntialias example",
      "language": "php",
      "code_sha256": "aeaf5069027d02000a5c84e21688c7977b64eaeed1168a0925da211f78dde3dd"
    }
  ],
  "see_also": [],
  "availability": {
    "from": "PECL imagick 2, PECL imagick 3",
    "deprecated": null,
    "removed": null
  },
  "official_url": "https://www.php.net/manual/en/imagickdraw.setstrokeantialias.php",
  "official_page_sha256": "dab36a05a40007db44001af0c1e7816e94e4592632b235795ecf7e71740994d7",
  "xml_path": "evidence/imagick-sources/doc-en/reference/imagick/imagickdraw/setstrokeantialias.xml",
  "xml_sha256": "8e4ac3b6d0f966792dbd833928265923296b55c0e5c0171eaca50baaf6058627",
  "official_undocumented_marker": true,
  "owner": "imagick_reference_draw_style.py"
}
Тонкая диагональ из(18,75) в(110,22) на белом холсте 128×96. При включённом AA край получает промежуточные покрытия пикселей и выглядит мягче в исходном размере.
Тонкая диагональ из(18,75) в(110,22) на белом холсте 128×96. При включённом AA край получает промежуточные покрытия пикселей и выглядит мягче в исходном размере. Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.
Задать: Сглаживание края обводкиПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(128, 96, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(1);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeAntialias(true);
$draw->line(18, 75, 110, 22);
$image->drawImage($draw);
$path = __DIR__ . '/setstrokeantialias-basic.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'setstrokeantialias-basic.png', "\n";
$draw->clear();
$image->clear();

При успешном выполнении создаётся setstrokeantialias-basic.png 128×96. Тонкая диагональ из(18,75) в(110,22) на белом холсте 128×96. При включённом AA край получает промежуточные покрытия пикселей и выглядит мягче в исходном размере. Последняя строка — setstrokeantialias-basic.png. Холст и все исходные данные создаются кодом; getter читает состояние Draw, не анализирует этот PNG.

Практическая задача: Сохранить два экспорта одной геометрии

Для пиксельной диагностики нужен off, для обычной картинки on. Сохраним оба файла, чтобы различие не сводилось к устному обещанию.

Сохранить два экспорта одной геометрииПример для указанного окружения
<?php
declare(strict_types=1);

$image = new Imagick();
$image->newImage(128, 96, 'white');
$image->setImageFormat('png');
$draw = new ImagickDraw();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(1);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeAntialias(false);
$draw->line(18, 75, 110, 22);
$image->drawImage($draw);
if (!$image->writeImage(__DIR__ . '/antialias-off.png')) {
    throw new RuntimeException('Не удалось сохранить AA-off');
}
echo "antialias-off.png\n";
$image->clear();
$image->newImage(128, 96, 'white');
$image->setImageFormat('png');
$draw->clear();
$draw->setStrokeColor('#146c74');
$draw->setStrokeWidth(1);
$draw->setStrokeLineCap(Imagick::LINECAP_BUTT);
$draw->setFillColor('none');
$draw->setStrokeAntialias(true);
$draw->line(18, 75, 110, 22);
$image->drawImage($draw);
$path = __DIR__ . '/antialias-on.png';
if (!$image->writeImage($path)) {
    throw new RuntimeException('Не удалось сохранить PNG');
}
echo 'antialias-on.png', "\n";
$draw->clear();
$image->clear();

Результат: antialias-on.png 128×96. Программа создаёт два PNG 128×96: off с пороговыми краями и on со сглаженными, с одной диагональю(18,75)—(110,22). После сохранения off холст и Draw очищены, чтобы второй рисунок не накладывался поверх первого. Последняя строка консоли antialias-on.png; предыдущая antialias-off.png. Сравнительная модель показывает тот же фрагмент 16×16, увеличенный без интерполяции. Перед именем файла консоль: antialias-off.png. Последняя строка — antialias-on.png.

Тот же исходный 128×96 PNG без сглаживания; увеличение браузером может добавить собственную интерполяцию
Тот же исходный 128×96 PNG без сглаживания; увеличение браузером может добавить собственную интерполяцию Иллюстрация ImageMagick CLI, не подтверждение выполнения PHP. Подписи и увеличение сравнений — поясняющий слой.

Ошибки, альтернативы и стоимость

AA не исправляет плохо состыкованные независимые line, недостаточное разрешение, JPEG-артефакты и неверный Join. Увеличение готового PNG фильтром интерполяции создаёт собственное сглаживание и может скрыть разницу on/off; поэтому сравнение ниже использует nearest-neighbor. При полупрозрачной обводке AA=false не отменяет смешивание с фоном: alpha и покрытие края — разные причины промежуточного цвета. Настройка текста и заливки имеет свои свойства, не обещайте этим методом управлять всем изображением.

Изменение/чтение настройки и растеризация — разные этапы. Чтение свойства не требует обходить готовое изображение; сохраняйте нужное значение один раз, если оно не меняется. Крупный холст, широкие обводки и множество узлов увеличивают работу drawImage и расход памяти, но объявлять один из этих флагов универсальным способом ускорить весь сервис нельзя. Ограничивайте размеры/число команд, измеряйте полное задание, переиспользуйте статичный PNG.

Пара: ImagickDraw::getStrokeAntialias. Сглаживание края обводки; окончания/стыки/пунктир; цвета и пиксели.

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

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

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

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

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