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

Дерево руководства
Глава 323 · От первого цвета до проверенной маски
ImagickPixel, PixelIterator и ImagickKernel: цвет, область и morphology
Полный официальный блок: 3 класса и 41 API — от шкал цвета и alpha до region iterator, syncIterator и реального применения kernel к маске.
Маршрут: от одного цвета до фильтра по окрестности
Задача начинается с результата: прочитать цвет логотипа, перекрасить прямоугольник или расширить белую маску. Для одного значения нужен ImagickPixel; для строк изображения — PixelIterator; для решения по соседям — ImagickKernel.
- Один цвет → создаём ImagickPixel, выбираем шкалу и читаем результат getter.
- Область изображения → задаём region/строку, меняем pixel-wand и синхронизируем каждую изменённую строку.
- Форма вокруг пикселя → строим kernel с origin, применяем morphology к маске и сохраняем PNG.
ImagickPixel: цвет, а не точка на холсте
Объект хранит каналы цвета и служебные поля. Координаты x/y принадлежат месту, откуда объект получен. Если getImagePixelColor вернул отдельное значение, его setColor сам по себе не обязан изменить исходный cache; для массового редактирования используют iterator.
| Свойство | Что означает | Чем не является |
|---|---|---|
| RGBA/HSL | компоненты одного цвета | координатами |
| colorCount | частотой histogram-записи | числом всех цветов |
| index | индексом/служебным каналом | номером строки или столбца |
Первый безопасный шаг — создать цвет, прочитать его в одной шкале и проверить диапазоны. Затем тот же pixel становится фоном видимого PNG-образца.
Начинаем с цвета: что хранится в ImagickPixel
Представьте настройку цвета кнопки или фона карточки товара. Сайт получает #336699, а обработчику нужны отдельные красный, зелёный и синий каналы. ImagickPixel переводит запись цвета в значения, с которыми можно работать.

В RGB три канала: R — красный, G — зелёный, B — синий. В записи #336699 пары 33,66,99 — шестнадцатеричная запись чисел 51,102,153. Alpha — отдельный канал прозрачности; этот непрозрачный пример его не использует.
<?php
declare(strict_types=1);
$color = new ImagickPixel('#336699');
$rgb = $color->getColor(0);
echo $rgb['r'], ', ', $rgb['g'], ', ', $rgb['b'], PHP_EOL;
$color->clear();
При доступном Imagick ожидается строка 51, 102, 153. Это состав цвета: красный канал 51, зелёный 102, синий 153. Код не меняет картинку и не создаёт файл. Проверен синтаксис; нативный запуск здесь не заявлен.
| Запись | Что происходит |
|---|---|
new ImagickPixel(...) | Создаём объект одного цвета; переменная $color хранит ссылку на него. |
$color->getColor(0) | Вызываем метод у этого объекта. Целое 0 выбирает RGB 0…255; результатом будет массив. |
$rgb['r'] | Читаем значение по ключу r; g и b обозначают два других канала. |
clear() | Освобождаем состояние временного цвета после использования. |
Если запись объекта или массива пока незнакома: класс и объект, массивы. Здесь важно различить: объект цвета сам по себе ещё не имеет места на изображении; чтобы изменить изображение, нужен следующий шаг.
Три шкалы цвета: 0…255, 0…1 и quantum
getColor(0) возвращает RGB 0…255 и грубый alpha 0/1; getColor(1) — нормализованные float 0…1; getColor(2) — RGBA 0…255. Quantum-методы используют реальную глубину сборки.
| Шкала | Когда удобна | Проверка |
|---|---|---|
| 0…1 | бизнес-правила, пороги, перенос между Q8/Q16 | каждый канал в диапазоне |
| 0…255 | интерфейс и знакомая RGB-запись | не выдавать за полную точность Q16 |
| 0…Imagick::getQuantum() | точная работа в текущей сборке | int без HDRI, возможен float с HDRI |
Alpha и opacity читают только с явно названной константой. Их исторические представления могут быть инверсными в разных контекстах ImageMagick; примеры проверяют выбранный канал round-trip, а не угадывают его по слову.
PixelIterator: строки, region и обязательная синхронизация
Iterator похож на окно в pixel cache. Он отдаёт массив объектов строки. y — позиция iterator; x — индекс элемента внутри строки. Region iterator видит только заданный прямоугольник.
- Проверяем x, y, width, height относительно размеров изображения.
- Получаем iterator или region iterator.
- Меняем pixel-wand объектов текущей строки.
- Сразу вызываем syncIterator() для этой изменённой строки.
- Читаем контрольный пиксель из Imagick и записываем итоговый PNG.
От цвета к изображению: где находится пиксель и когда он изменяется
Изображение можно представить таблицей цветных клеток. Ширина 6 и высота 4 дают 24 клетки. Координаты начинаются с нуля: x идёт слева направо, y — сверху вниз. Точка (2,1) — третья клетка второй строки. В отличие от простого массива, данные картинки хранятся в ImageMagick; iterator предоставляет доступ по строкам.

- Создаём белый холст 6×4.
- Внешний foreach выбирает строку y, внутренний — цвет в столбце x.
- В точке (2,1) вызываем setColor. После внутреннего цикла syncIterator передаёт текущую строку обратно изображению.
- writeImage записывает новое состояние в PNG. До этого вызова файла на диске ещё нет.
<?php
declare(strict_types=1);
$image = new Imagick();
$image->newImage(6, 4, 'white', 'png');
$iterator = $image->getPixelIterator();
foreach ($iterator as $y => $row) {
foreach ($row as $x => $pixel) {
if ($x === 2 && $y === 1) {
$pixel->setColor('#336699');
}
}
$iterator->syncIterator();
}
$image->writeImage(__DIR__ . '/changed-pixel.png');
echo 'changed-pixel.png', PHP_EOL;
$iterator->clear();
$image->clear();
При успешном запуске рядом со скриптом появится changed-pixel.png размером 6×4: 23 белых пикселя и один синий в точке (2,1). Консоль напечатает имя файла. Каталог скрипта должен разрешать запись. Это учебный минимум; ниже карточка syncIterator() показывает чтение результата и проверку записи. Проверен синтаксис, выполнение PHP Imagick отложено.
Здесь === проверяет точное равенство координаты, && требует совпадения обеих координат; => в foreach разделяет ключ и значение. Как работает foreach. Отдельно полученный цвет через getImagePixelColor — снимок значения; его изменение не следует считать редактированием исходного холста. Для редактирования здесь используются пиксели iterator и фиксация каждой строки.
Почему фабричные методы проверяются по версии и возвращаемому значению
В frozen PHP Manual для newPixelIterator() указано : bool. Для newPixelRegionIterator() сигнатура тоже : bool, но return-текст обещает новый ImagickPixelIterator. Это внутреннее противоречие upstream-документации, а не повод выдумывать один результат.
Эти два метода помечены устаревшими в актуальной реализации Imagick: они переинициализируют текущий iterator и возвращают bool. Проверка объекта оставлена как защитная совместимость с противоречивым описанием, а не обещание реального возврата объекта. Для нового кода используйте конструктор, Imagick::getPixelIterator или Imagick::getPixelRegionIterator. При обходе region отсчёт строки ведётся относительно области, начиная с нуля.
ImagickKernel: матрица, origin и видимый эффект
Kernel накладывается на окрестность каждого пикселя. Float задаёт вклад позиции, false исключает её. Для нечётной ширины и высоты origin по умолчанию находится в центре. Для любого чётного размера origin нужно передать явно как [x, y].
| Матрица | Смысл | Практика |
|---|---|---|
| крест из 1.0 и false | участвуют центр и четыре соседа | расширение/сжатие бинарной маски |
| disk/diamond builtin | стандартная форма с параметром радиуса | контур, закрытие разрыва, маска |
| веса с отрицательными числами | convolution/sharpen | проверять normalization и clipping |
Карточки не ограничиваются печатью матрицы: каждый kernel применяется к программно созданной чёрно-белой маске, сохраняется PNG, а histogram даёт число светлых пикселей до и после.
Операция по соседям: зачем нужна маска и ядро
Например, перед распознаванием текста надо немного утолстить светлые штрихи. Маска — отдельное изображение, в котором белое выделяет нужную область, а чёрное — фон. Не надо писать вложенные проверки всех соседей вручную: ядро задаёт форму соседства, а операция dilation расширяет белые области по этой форме.


<?php
declare(strict_types=1);
$mask = new Imagick(__DIR__ . '/mask.pgm');
$kernel = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DIAMOND, '1');
$mask->morphology(Imagick::MORPHOLOGY_DILATE, 1, $kernel);
$mask->writeImage(__DIR__ . '/expanded-mask.png');
echo 'expanded-mask.png', PHP_EOL;
$mask->clear();
Архив уже содержит mask.pgm: чёрное изображение 5×5 с одной белой точкой в центре. При успешном запуске expanded-mask.png получит пять белых точек в форме креста: центр и его четыре соседа. Нужны Imagick с Kernel, поддержка PGM/PNG и право записи в каталог. Проверен синтаксис; PHP-результат пока не выполнен локально.
| Часть вызова | Зачем нужна |
|---|---|
fromBuiltIn(KERNEL_DIAMOND, '1') | Готовое ромбовидное соседство радиуса 1: центр, верх, низ, лево и право. |
MORPHOLOGY_DILATE | Правило обработки: распространяем светлые области по соседству. Само ядро картинку не меняет. |
1 в morphology | Количество повторений операции; больше повторений расширяет область дальше. |
Операцию применяют к маске осознанно: рядом расположенные области могут слиться, а мелкие детали — потеряться. Для закрытия небольших разрывов есть Close, для сужения — Erode. Ниже разобраны собственные матрицы, смещённый центр и отличие свёртки от операций над формой. Как читать двумерный массив пригодится при записи своей матрицы.
Стоимость и выбор более крупной операции
Построчный PHP-обход выполняет PHP-вызов на множество пикселей. Для простой заливки прямоугольника ImagickDraw, colorize/opaquePaint или morphology обычно выражают задачу яснее. Iterator нужен, когда решение действительно зависит от каждого значения или сложного пользовательского правила.
Создать и освободить цвет
ImagickPixel хранит описание одного цвета. Сам по себе он не является координатой и не меняет исходное изображение.
- ImagickPixel::clear — освободить временный объект цвета после чтения
- ImagickPixel::__construct — создать цвет фона, рамки или маски из строки
- ImagickPixel::destroy — явно завершить старый ресурсный объект
Прочитать каналы без догадок о шкале
Один цвет можно читать как 0…255, нормализованные 0…1 или quantum текущей сборки. Шкалу всегда фиксируют рядом со значением.
- ImagickPixel::getColor — получить сразу RGBA для ответа API
- ImagickPixel::getColorAsString — показать цвет человеку или записать диагностическую строку
- ImagickPixel::getColorQuantum — прочитать все каналы в нативной quantum-шкале
- ImagickPixel::getColorValue — прочитать один нормализованный канал
- ImagickPixel::getColorValueQuantum — сопоставить канал с нативной точностью сборки
- ImagickPixel::getHSL — разделить оттенок, насыщенность и светлоту
Изменить канал и проверить чтением
Setter сообщает, принят ли вызов; полезный эффект подтверждают парным getter и, когда это уместно, записанным образцом PNG.
- ImagickPixel::setColor — заменить цвет pixel-wand целиком
- ImagickPixel::setColorValue — поменять один канал в переносимой шкале 0…1
- ImagickPixel::setColorValueQuantum — задать канал в quantum-точности текущей сборки
- ImagickPixel::setHSL — собрать тематический цвет через оттенок/насыщенность/светлоту
Отличить цвет от индекса и частоты
colorCount — частота цвета в histogram, index — индекс/служебный канал. Ни одно из них не является номером x/y пикселя.
- ImagickPixel::getColorCount — прочитать частоту цвета из histogram
- ImagickPixel::getIndex — прочитать индекс/служебный канал pixel-wand
- ImagickPixel::setColorCount — задать служебную частоту histogram-записи
- ImagickPixel::setIndex — задать индекс/служебный канал при низкоуровневой работе
Сравнить близкие цвета с явным допуском
Fuzz — часть правила сравнения. Без выбранной шкалы и проверенных примеров слово «похожий» не имеет воспроизводимого смысла.
- ImagickPixel::isPixelSimilar — сравнить цвет с допуском в нормализованной метрике
- ImagickPixel::isPixelSimilarQuantum — сравнить цвет в quantum-допуске конкретной сборки
- ImagickPixel::isSimilar — поддержать код со старым именем quantum-сравнения
Открыть полный холст или ограниченную область
Iterator отдаёт строки живых pixel-wand объектов. Region iterator ограничивает работу прямоугольником и снижает число обходов.
- ImagickPixelIterator::clear — освободить iterator после ограниченного прохода
- ImagickPixelIterator::__construct — начать построчный обход программно созданного изображения
- ImagickPixelIterator::destroy — явно завершить старый iterator
- ImagickPixelIterator::newPixelIterator — переназначить iterator на другой Imagick
- ImagickPixelIterator::newPixelRegionIterator — обойти только прямоугольник интереса
Перемещаться по строкам и сохранять изменения
Курсор строки и координата пикселя — разные величины. После изменения любой строки нужен syncIterator().
- ImagickPixelIterator::getCurrentIteratorRow — получить пиксели выбранной строки
- ImagickPixelIterator::getIteratorRow — узнать текущий y курсора
- ImagickPixelIterator::getNextIteratorRow — читать строки по одной в streaming-подобном цикле
- ImagickPixelIterator::getPreviousIteratorRow — вернуться к предыдущей строке
- ImagickPixelIterator::resetIterator — вернуть курсор перед новым проходом
- ImagickPixelIterator::setIteratorFirstRow — перейти к первой строке
- ImagickPixelIterator::setIteratorLastRow — начать обратный проход снизу
- ImagickPixelIterator::setIteratorRow — перейти к известному y без полного обхода
- ImagickPixelIterator::syncIterator — зафиксировать изменённую строку в pixel cache
Описать окрестность числами
Kernel — матрица float/false с origin. Число задаёт вклад соседа, false исключает позицию.
- ImagickKernel::fromBuiltIn — получить disk/diamond/gaussian без ручной матрицы
- ImagickKernel::fromMatrix — явно описать веса и пропущенные позиции
- ImagickKernel::getMatrix — проинспектировать фактические float/false перед фильтром
Собрать и применить фильтр
Список ядер можно связывать, масштабировать и разделять; смысл проверяют реальной morphology/filter операцией на маске.
- ImagickKernel::addKernel — применить несколько связанных ядер одной операцией
- ImagickKernel::addUnityKernel — подмешать исходный пиксель к blur/sharpen ядру
- ImagickKernel::scale — масштабировать веса с выбранной normalization
- ImagickKernel::separate — разделить linked kernel list для диагностики
Перед production: что ещё обязательно доказать
| До обработки | После обработки | Чего lint не доказывает |
|---|---|---|
| лимит width × height, allowlist формата, проверка geometry region | контрольный pixel/histogram, непустой файл, повторный decode | наличие методов/констант и поведение ImageMagick версии |
| resource policy и timeout worker | MIME по содержимому, атомарное перемещение | Q8/Q16/HDRI числа, визуальный эффект morphology |
Примеры в этой главе проверены синтаксически. Для запуска установите совместимые Imagick и ImageMagick; наличие PNG-кодера и поведение методов зависят от сборки. Показанные изображения — отдельно подготовленные CLI-иллюстрации, а не подтверждение выполнения PHP.
Функции и методы этой темы
Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.
ImagickKernel::addKernelприменить несколько связанных ядер одной операцией
доступно: PECL imagick >= 3.3.0 · imagick
ImagickKernel::addKernel(ImagickKernel $ImagickKernel): voidПотребность. применить несколько связанных ядер одной операцией.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickKernel::addKernel(ImagickKernel $ImagickKernel): void. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickKernel::addKernel(ImagickKernel $ImagickKernel): void
| Параметр | Тип | Смысл |
|---|---|---|
$ImagickKernel | ImagickKernel | Второе ядро, присоединяемое к linked list. |
Возвращает. Официальная страница не формулирует отдельный return-текст; точный тип берём из сигнатуры.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: список ядер отличается от арифметического сложения матриц.
Когда выбрать другое. несколько явных morphology-вызовов.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(9, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(3, 3, 5, 5);
$mask->drawImage($draw);
$draw->clear();
$before = brightPixels($mask);
$kernel = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DISK, '1');
$second = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DIAMOND, '1');
$kernel->addKernel($second);
$linked = $kernel->separate();
if (!is_array($linked) || count($linked) !== 2) { throw new RuntimeException('Ожидались два связанных ядра'); }
$matrix = $kernel->getMatrix();
if (!is_array($matrix) || $matrix === []) { throw new RuntimeException('Пустая матрица'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_DILATE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-addkernel-minimal.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(13, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(5, 2, 7, 6);
$draw->setFillColor(new ImagickPixel('black'));
$draw->rectangle(6, 4, 6, 4);
$mask->drawImage($draw);
$draw->clear();
$gapBefore = $mask->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
$before = brightPixels($mask);
$kernel = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DISK, '1');
$second = ImagickKernel::fromMatrix([[0.0, 1.0, 0.0], [1.0, 1.0, 1.0], [0.0, 1.0, 0.0]]);
$kernel->addKernel($second);
$linked = $kernel->separate();
if (!is_array($linked) || count($linked) !== 2) { throw new RuntimeException('Ожидались два связанных ядра'); }
$matrix = $kernel->getMatrix();
if (!is_array($matrix) || $matrix === []) { throw new RuntimeException('Пустая матрица'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CLOSE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$gapAfter = $result->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
if ($gapBefore > 0.01 || $gapAfter < 0.95 || $after <= $before) { throw new RuntimeException('Отверстие в маске не закрыто'); }
$path = $outDir . '/kernel-addkernel-workflow.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickKernel::addUnityKernel, ImagickKernel::scale, ImagickKernel::separate.
ImagickKernel::addUnityKernelподмешать исходный пиксель к blur/sharpen ядру
доступно: PECL imagick >= 3.3.0 · imagick
ImagickKernel::addUnityKernel(float $scale): voidПотребность. подмешать исходный пиксель к blur/sharpen ядру.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickKernel::addUnityKernel(float $scale): void. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickKernel::addUnityKernel(float $scale): void
| Параметр | Тип | Смысл |
|---|---|---|
$scale | float | Коэффициент масштаба или доля unity — по методу. |
Возвращает. Официальная страница не формулирует отдельный return-текст; точный тип берём из сигнатуры.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: после изменения может понадобиться повторная normalization.
Когда выбрать другое. явная матрица с центральным коэффициентом.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(9, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(3, 3, 5, 5);
$mask->drawImage($draw);
$draw->clear();
$before = brightPixels($mask);
$kernel = ImagickKernel::fromMatrix([[-1.0, 0.0, -1.0], [0.0, 4.0, 0.0], [-1.0, 0.0, -1.0]]);
$kernel->scale(1.0, Imagick::NORMALIZE_KERNEL_VALUE);
$kernel->addUnityKernel(0.5);
$matrix = $kernel->getMatrix();
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CONVOLVE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-addunitykernel-minimal.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(13, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(5, 2, 7, 6);
$draw->setFillColor(new ImagickPixel('black'));
$draw->rectangle(6, 4, 6, 4);
$mask->drawImage($draw);
$draw->clear();
$gapBefore = $mask->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
$before = brightPixels($mask);
$kernel = ImagickKernel::fromMatrix([[-1.0, 0.0, -1.0], [0.0, 4.0, 0.0], [-1.0, 0.0, -1.0]]);
$kernel->scale(1.0, Imagick::NORMALIZE_KERNEL_VALUE);
$kernel->addUnityKernel(1.0);
$kernel->scale(1.0, Imagick::NORMALIZE_KERNEL_VALUE);
$matrix = $kernel->getMatrix();
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CONVOLVE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-addunitykernel-workflow.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickKernel::addKernel, ImagickKernel::scale, ImagickKernel::separate.
ImagickKernel::fromBuiltInполучить disk/diamond/gaussian без ручной матрицы
доступно: PECL imagick >= 3.3.0 · imagick
ImagickKernel::fromBuiltin(int $kernelType, string $kernelString): ImagickKernelПотребность. получить disk/diamond/gaussian без ручной матрицы.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickKernel::fromBuiltin(int $kernelType, string $kernelString): ImagickKernel. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickKernel::fromBuiltin(int $kernelType, string $kernelString): ImagickKernel
| Параметр | Тип | Смысл |
|---|---|---|
$kernelType | int | Константа Imagick::KERNEL_*.Формулировка PHP ManualThe type of kernel to build e.g. \Imagick::KERNEL_DIAMOND |
$kernelString | string | Параметры built-in kernel в синтаксисе ImageMagick.Формулировка PHP ManualA string that describes the parameters e.g. "4,2.5" |
Возвращает. Официальная страница не формулирует отдельный return-текст; точный тип берём из сигнатуры.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: kernelString — синтаксис ImageMagick, его проверяют на своей версии.
Когда выбрать другое. fromMatrix для точной матрицы.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(9, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(3, 3, 5, 5);
$mask->drawImage($draw);
$draw->clear();
$before = brightPixels($mask);
$kernel = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DISK, '1');
$matrix = $kernel->getMatrix();
if (!is_array($matrix) || $matrix === []) { throw new RuntimeException('Пустая матрица'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_DILATE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-frombuiltin-minimal.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(13, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(5, 2, 7, 6);
$draw->setFillColor(new ImagickPixel('black'));
$draw->rectangle(6, 4, 6, 4);
$mask->drawImage($draw);
$draw->clear();
$gapBefore = $mask->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
$before = brightPixels($mask);
$kernel = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DIAMOND, '2');
$matrix = $kernel->getMatrix();
if (!is_array($matrix) || $matrix === []) { throw new RuntimeException('Пустая матрица'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CLOSE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$gapAfter = $result->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
if ($gapBefore > 0.01 || $gapAfter < 0.95 || $after <= $before) { throw new RuntimeException('Отверстие в маске не закрыто'); }
$path = $outDir . '/kernel-frombuiltin-workflow.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickKernel::fromMatrix, ImagickKernel::getMatrix.
ImagickKernel::fromMatrixявно описать веса и пропущенные позиции
доступно: PECL imagick >= 3.3.0 · imagick
ImagickKernel::fromMatrix(array $matrix, array $origin = ?): ImagickKernelПотребность. явно описать веса и пропущенные позиции.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickKernel::fromMatrix(array $matrix, array $origin = ?): ImagickKernel. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickKernel::fromMatrix(array $matrix, array $origin = ?): ImagickKernel
| Параметр | Тип | Смысл |
|---|---|---|
$matrix | array | Прямоугольный двумерный массив float/false. |
$origin | array; необязательный | [x, y] центральной позиции; обязателен для чётного размера. |
Возвращает. The generated ImagickKernel.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: нечётная матрица получает центр автоматически, чётной нужен origin.
Когда выбрать другое. fromBuiltin для стандартной формы.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(9, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(3, 3, 5, 5);
$mask->drawImage($draw);
$draw->clear();
$before = brightPixels($mask);
$matrixInput = [[false, 1.0, false], [1.0, 1.0, 1.0], [false, 1.0, false]];
$kernel = ImagickKernel::fromMatrix($matrixInput);
$matrix = $kernel->getMatrix();
if (!is_array($matrix) || $matrix === []) { throw new RuntimeException('Пустая матрица'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_DILATE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-frommatrix-minimal.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(13, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(5, 2, 7, 6);
$draw->setFillColor(new ImagickPixel('black'));
$draw->rectangle(6, 4, 6, 4);
$mask->drawImage($draw);
$draw->clear();
$gapBefore = $mask->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
$before = brightPixels($mask);
$matrixInput = [[1.0, 0.5], [false, 1.0]];
$kernel = ImagickKernel::fromMatrix($matrixInput, [0, 0]);
$matrix = $kernel->getMatrix();
if (!is_array($matrix) || $matrix === []) { throw new RuntimeException('Пустая матрица'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CLOSE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$gapAfter = $result->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
if ($gapBefore > 0.01 || $gapAfter < 0.95 || $after <= $before) { throw new RuntimeException('Отверстие в маске не закрыто'); }
$path = $outDir . '/kernel-frommatrix-workflow.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickKernel::fromBuiltIn, ImagickKernel::getMatrix.
ImagickKernel::getMatrixпроинспектировать фактические float/false перед фильтром
доступно: PECL imagick >= 3.3.0 · imagick
ImagickKernel::getMatrix(): arrayПотребность. проинспектировать фактические float/false перед фильтром.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickKernel::getMatrix(): array. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickKernel::getMatrix(): array
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. A matrix (2d array) of the values that represent the kernel.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: матрица показывает веса, но не доказывает эффект на изображении.
Когда выбрать другое. применить morphology к тестовой маске.
В первом примере крест из положительных значений расширяет белую маску. Во втором отрицательные веса выделяют перепады яркости через CONVOLVE — свёртку: значения соседей умножаются на веса и складываются. Это другая операция, чем CLOSE, которая закрывает маленькие отверстия в форме. В сборке без HDRI отрицательные результаты могут обрезаться до нуля; для измерений нельзя считать такой PNG полным набором исходных чисел.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(9, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(3, 3, 5, 5);
$mask->drawImage($draw);
$draw->clear();
$before = brightPixels($mask);
$kernel = ImagickKernel::fromMatrix([[false, 1.0, false], [1.0, 1.0, 1.0], [false, 1.0, false]]);
$matrix = $kernel->getMatrix();
if (!is_array($matrix) || count($matrix) < 2 || !is_array($matrix[0])) { throw new RuntimeException('Матрица не прочитана'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_DILATE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-getmatrix-minimal.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(13, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(5, 2, 7, 6);
$draw->setFillColor(new ImagickPixel('black'));
$draw->rectangle(6, 4, 6, 4);
$mask->drawImage($draw);
$draw->clear();
$gapBefore = $mask->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
$before = brightPixels($mask);
$kernel = ImagickKernel::fromMatrix([[1.0, -1.0], [false, 1.0]], [1, 1]);
$matrix = $kernel->getMatrix();
if (!is_array($matrix) || count($matrix) < 2 || !is_array($matrix[0])) { throw new RuntimeException('Матрица не прочитана'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CONVOLVE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-getmatrix-workflow.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickKernel::fromBuiltIn, ImagickKernel::fromMatrix.
ImagickKernel::scaleмасштабировать веса с выбранной normalization
доступно: PECL imagick >= 3.3.0 · imagick
ImagickKernel::scale(float $scale, int $normalizeFlag = ?): voidПотребность. масштабировать веса с выбранной normalization.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickKernel::scale(float $scale, int $normalizeFlag = ?): void. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickKernel::scale(float $scale, int $normalizeFlag = ?): void
| Параметр | Тип | Смысл |
|---|---|---|
$scale | float | Коэффициент масштаба или доля unity — по методу. |
$normalizeFlag | int; необязательный | Одна из Imagick::NORMALIZE_KERNEL_*.Формулировка PHP ManualImagick::NORMALIZE_KERNEL_NONE Imagick::NORMALIZE_KERNEL_VALUE Imagick::NORMALIZE_KERNEL_CORRELATE Imagick::NORMALIZE_KERNEL_PERCENT |
Возвращает. Официальная страница не формулирует отдельный return-текст; точный тип берём из сигнатуры.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: разные NORMALIZE_KERNEL_* меняют смысл суммы.
Когда выбрать другое. пересчитать матрицу вручную для учебной проверки.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(9, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(3, 3, 5, 5);
$mask->drawImage($draw);
$draw->clear();
$before = brightPixels($mask);
$kernel = ImagickKernel::fromMatrix([[1.0, 1.0, 1.0], [1.0, 2.0, 1.0], [1.0, 1.0, 1.0]]);
$kernel->scale(1.0, Imagick::NORMALIZE_KERNEL_VALUE);
$matrix = $kernel->getMatrix();
$flat = array_merge(...$matrix);
$sum = array_sum(array_filter($flat, static fn ($v): bool => $v !== false));
if (!is_finite((float) $sum)) { throw new RuntimeException('Невалидная сумма ядра'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CONVOLVE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-scale-minimal.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(13, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(5, 2, 7, 6);
$draw->setFillColor(new ImagickPixel('black'));
$draw->rectangle(6, 4, 6, 4);
$mask->drawImage($draw);
$draw->clear();
$gapBefore = $mask->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
$before = brightPixels($mask);
$kernel = ImagickKernel::fromMatrix([[1.0, 1.0, 1.0], [1.0, 2.0, 1.0], [1.0, 1.0, 1.0]]);
$kernel->scale(0.5, Imagick::NORMALIZE_KERNEL_NONE);
$matrix = $kernel->getMatrix();
$flat = array_merge(...$matrix);
$sum = array_sum(array_filter($flat, static fn ($v): bool => $v !== false));
if (!is_finite((float) $sum)) { throw new RuntimeException('Невалидная сумма ядра'); }
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CONVOLVE, 1, $kernel);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-scale-workflow.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickKernel::addKernel, ImagickKernel::addUnityKernel, ImagickKernel::separate.
ImagickKernel::separateразделить linked kernel list для диагностики
доступно: PECL imagick >= 3.3.0 · imagick
ImagickKernel::separate(): arrayПотребность. разделить linked kernel list для диагностики.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickKernel::separate(): array. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickKernel::separate(): array
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Официальная страница не формулирует отдельный return-текст; точный тип берём из сигнатуры.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: возвращается массив ядер, не матрица.
Когда выбрать другое. getMatrix каждого элемента.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(9, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(3, 3, 5, 5);
$mask->drawImage($draw);
$draw->clear();
$before = brightPixels($mask);
$kernel = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DISK, '1');
$second = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DIAMOND, '1');
$kernel->addKernel($second);
$parts = $kernel->separate();
if (!is_array($parts) || count($parts) !== 2 || !$parts[0] instanceof ImagickKernel) { throw new RuntimeException('Список ядер не разделён'); }
$matrix = $parts[0]->getMatrix();
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_DILATE, 1, $parts[0]);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$path = $outDir . '/kernel-separate-minimal.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
function brightPixels(Imagick $image): int {
$total = 0;
foreach ($image->getImageHistogram() as $color) {
$rgb = $color->getColor(1);
if ($rgb['r'] > 0.8 && $rgb['g'] > 0.8 && $rgb['b'] > 0.8) { $total += $color->getColorCount(); }
}
return $total;
}
$mask = new Imagick();
$mask->newImage(13, 9, new ImagickPixel('black'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('white'));
$draw->rectangle(5, 2, 7, 6);
$draw->setFillColor(new ImagickPixel('black'));
$draw->rectangle(6, 4, 6, 4);
$mask->drawImage($draw);
$draw->clear();
$gapBefore = $mask->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
$before = brightPixels($mask);
$kernel = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DISK, '1');
$second = ImagickKernel::fromBuiltIn(Imagick::KERNEL_DIAMOND, '1');
$kernel->addKernel($second);
$parts = $kernel->separate();
if (!is_array($parts) || count($parts) !== 2 || !$parts[0] instanceof ImagickKernel) { throw new RuntimeException('Список ядер не разделён'); }
$matrix = $parts[0]->getMatrix();
$result = clone $mask;
$accepted = $result->morphology(Imagick::MORPHOLOGY_CLOSE, 1, $parts[0]);
if ($accepted !== true) { throw new RuntimeException('Morphology не выполнена'); }
$after = brightPixels($result);
$gapAfter = $result->getImagePixelColor(6, 4)->getColorValue(Imagick::COLOR_RED);
if ($gapBefore > 0.01 || $gapAfter < 0.95 || $after <= $before) { throw new RuntimeException('Отверстие в маске не закрыто'); }
$path = $outDir . '/kernel-separate-workflow.png';
if (!$result->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Результат morphology не записан'); }
echo json_encode(['matrix' => $matrix, 'before_white' => $before, 'after_white' => $after, 'file' => basename($path)], JSON_THROW_ON_ERROR), PHP_EOL;
$result->clear();
$mask->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickKernel::addKernel, ImagickKernel::addUnityKernel, ImagickKernel::scale.
ImagickPixel::clearосвободить временный объект цвета после чтения
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::clear(): boolПотребность. освободить временный объект цвета после чтения.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::clear(): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::clear(): bool
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: после clear не используют старое состояние.
Когда выбрать другое. дать объекту выйти из области видимости.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$before = $pixel->getColor(1);
$accepted = $pixel->clear();
if ($accepted !== true) { throw new RuntimeException('Освобождение не подтверждено'); }
echo json_encode(['released' => true, 'before' => $before], JSON_THROW_ON_ERROR), PHP_EOL;
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$before = $pixel->getColor(1);
$accepted = $pixel->clear();
if ($accepted !== true) { throw new RuntimeException('Освобождение не подтверждено'); }
echo json_encode(['released' => true, 'before' => $before], JSON_THROW_ON_ERROR), PHP_EOL;
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::__construct, ImagickPixel::destroy.
ImagickPixel::__constructсоздать цвет фона, рамки или маски из строки
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::__construct(string $color = ?): mixedПотребность. создать цвет фона, рамки или маски из строки.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::__construct(string $color = ?): mixed. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::__construct(string $color = ?): mixed
| Параметр | Тип | Смысл |
|---|---|---|
$color | string; необязательный | Строка цвета или константа канала — точный смысл виден из сигнатуры.Формулировка PHP ManualThe optional color string to use as the initial value of this object. |
Возвращает. Returns an ImagickPixel object on success, throwing ImagickPixelException on failure.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: невалидная строка приводит к ImagickPixelException.
Когда выбрать другое. получить pixel из уже декодированного Imagick.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('#336699');
$rgba = $pixel->getColor(1);
if (!isset($rgba['r'], $rgba['g'], $rgba['b'], $rgba['a'])) { throw new RuntimeException('Цвет не создан'); }
echo json_encode(['value' => $rgba], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$pixel = new ImagickPixel('rgba(20, 80, 140, 0.65)');
$rgba = $pixel->getColor(1);
if (!isset($rgba['r'], $rgba['g'], $rgba['b'], $rgba['a'])) { throw new RuntimeException('Цвет не создан'); }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-construct-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $rgba, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::clear, ImagickPixel::destroy.
ImagickPixel::destroyявно завершить старый ресурсный объект
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::destroy(): boolПотребность. явно завершить старый ресурсный объект.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::destroy(): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::destroy(): bool
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: destroy не заменяет проверку владельца объекта.
Когда выбрать другое. clear или естественное освобождение объекта.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$before = $pixel->getColor(1);
$accepted = $pixel->destroy();
if ($accepted !== true) { throw new RuntimeException('Освобождение не подтверждено'); }
echo json_encode(['released' => true, 'before' => $before], JSON_THROW_ON_ERROR), PHP_EOL;
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$before = $pixel->getColor(1);
$accepted = $pixel->destroy();
if ($accepted !== true) { throw new RuntimeException('Освобождение не подтверждено'); }
echo json_encode(['released' => true, 'before' => $before], JSON_THROW_ON_ERROR), PHP_EOL;
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::clear, ImagickPixel::__construct.
ImagickPixel::getColorполучить сразу RGBA для ответа API
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::getColor(int $normalized = 0): arrayПотребность. получить сразу RGBA для ответа API.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::getColor(int $normalized = 0): array. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::getColor(int $normalized = 0): array
| Параметр | Тип | Смысл |
|---|---|---|
$normalized | int; необязательный | Режим шкалы getColor: 0, 1 или 2; не смешивать результаты разных режимов.Формулировка PHP ManualNormalize the color values. Possible values are 0 , 1 or 2 . List of possible values for normalized normalized Description 0 The RGB values are returned as int s in the range 0 to 255 (inclusive.) The alpha value is returned as int and is either 0 or 1 . 1 The RGBA values are returned as float s in the range 0 to 1 (inclusive.) 2 The RGBA values are returned as int s in the range 0 to 255 (inclusive.) 0. |
Возвращает. An array of channel values. Throws ImagickPixelException on error.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: режимы 0, 1 и 2 используют разные типы и диапазоны.
Когда выбрать другое. getColorValue для одного канала.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$value = $pixel->getColor(1);
if (!isset($value['r'], $value['g'], $value['b'], $value['a'])) { throw new RuntimeException('Нет RGBA'); }
foreach ($value as $channel) { if (!is_float($channel) || $channel < 0.0 || $channel > 1.0) { throw new RuntimeException('Ожидалась шкала 0..1'); } }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$value = $pixel->getColor(2);
if (!isset($value['r'], $value['g'], $value['b'], $value['a'])) { throw new RuntimeException('Нет RGBA'); }
foreach ($value as $channel) { if (!is_int($channel) || $channel < 0 || $channel > 255) { throw new RuntimeException('Ожидалась шкала 0..255'); } }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-getcolor-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColorAsString, ImagickPixel::getColorQuantum, ImagickPixel::getColorValue, ImagickPixel::getColorValueQuantum.
ImagickPixel::getColorAsStringпоказать цвет человеку или записать диагностическую строку
доступно: PECL imagick 2 >= 2.1.0, PECL imagick 3 · imagick
ImagickPixel::getColorAsString(): stringПотребность. показать цвет человеку или записать диагностическую строку.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::getColorAsString(): string. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::getColorAsString(): string
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns the color of the ImagickPixel object as a string.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: формат строки зависит от ImageMagick и не годится как стабильный ключ.
Когда выбрать другое. нормализованный getColor плюс собственный JSON.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$value = $pixel->getColorAsString();
if ($value === '') { throw new RuntimeException('Пустое представление цвета'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$value = $pixel->getColorAsString();
if ($value === '') { throw new RuntimeException('Пустое представление цвета'); }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-getcolorasstring-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColor, ImagickPixel::getColorQuantum, ImagickPixel::getColorValue, ImagickPixel::getColorValueQuantum.
ImagickPixel::getColorCountпрочитать частоту цвета из histogram
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::getColorCount(): intПотребность. прочитать частоту цвета из histogram.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::getColorCount(): int. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::getColorCount(): int
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns the color count as an integer on success, throws ImagickPixelException on failure.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: у произвольного нового pixel это не число пикселей изображения.
Когда выбрать другое. count(getImageHistogram()) считает уникальные цвета.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$pixel->setColorCount(17);
$value = $pixel->getColorCount();
if ($value < 0) { throw new RuntimeException('Отрицательная частота'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$image->quantizeImage(4, Imagick::COLORSPACE_SRGB, 0, false, false);
$histogram = $image->getImageHistogram();
$pixel = $histogram[0];
$value = $pixel->getColorCount();
if ($value < 0) { throw new RuntimeException('Отрицательная частота'); }
$file = null;
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getIndex, ImagickPixel::setColorCount, ImagickPixel::setIndex.
ImagickPixel::getColorQuantumпрочитать все каналы в нативной quantum-шкале
доступно: официальная страница не уточняет · imagick
ImagickPixel::getColorQuantum(): arrayПотребность. прочитать все каналы в нативной quantum-шкале.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::getColorQuantum(): array. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::getColorQuantum(): array
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns an array with keys "r" , "g" , "b" , "a" .
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: Q8/Q16/HDRI нельзя угадать по серверу.
Когда выбрать другое. getColor(1) для переносимой шкалы 0…1.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$value = $pixel->getColorQuantum();
$quantum = Imagick::getQuantum();
foreach (['r', 'g', 'b', 'a'] as $channel) { if (!array_key_exists($channel, $value) || !is_numeric($value[$channel]) || $value[$channel] < 0 || $value[$channel] > $quantum) { throw new RuntimeException('Канал вне quantum'); } }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$value = $pixel->getColorQuantum();
$quantum = Imagick::getQuantum();
foreach (['r', 'g', 'b', 'a'] as $channel) { if (!array_key_exists($channel, $value) || !is_numeric($value[$channel]) || $value[$channel] < 0 || $value[$channel] > $quantum) { throw new RuntimeException('Канал вне quantum'); } }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-getcolorquantum-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColor, ImagickPixel::getColorAsString, ImagickPixel::getColorValue, ImagickPixel::getColorValueQuantum.
ImagickPixel::getColorValueпрочитать один нормализованный канал
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::getColorValue(int $color): floatПотребность. прочитать один нормализованный канал.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::getColorValue(int $color): float. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::getColorValue(int $color): float
| Параметр | Тип | Смысл |
|---|---|---|
$color | int | Строка цвета или константа канала — точный смысл виден из сигнатуры.Формулировка PHP ManualThe color to get the value of, specified as one of the Imagick color constants. This can be one of the RGB colors, CMYK colors, alpha and opacity e.g (Imagick::COLOR_BLUE, Imagick::COLOR_MAGENTA). |
Возвращает. The value of the channel, as a normalized floating-point number, throwing ImagickPixelException on error.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: COLOR_ALPHA и COLOR_OPACITY имеют разную семантику.
Когда выбрать другое. getColor(1) для набора каналов.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$value = $pixel->getColorValue(Imagick::COLOR_BLUE);
if ($value < 0.0 || $value > 1.0) { throw new RuntimeException('Канал вне 0..1'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$value = $pixel->getColorValue(Imagick::COLOR_ALPHA);
if ($value < 0.0 || $value > 1.0) { throw new RuntimeException('Канал вне 0..1'); }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-getcolorvalue-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColor, ImagickPixel::getColorAsString, ImagickPixel::getColorQuantum, ImagickPixel::getColorValueQuantum.
ImagickPixel::getColorValueQuantumсопоставить канал с нативной точностью сборки
доступно: PECL imagick 2 >= 2.3.0, PECL imagick 3 · imagick
ImagickPixel::getColorValueQuantum(int $color): int|floatПотребность. сопоставить канал с нативной точностью сборки.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::getColorValueQuantum(int $color): int|float. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::getColorValueQuantum(int $color): int|float
| Параметр | Тип | Смысл |
|---|---|---|
$color | int | Строка цвета или константа канала — точный смысл виден из сигнатуры. |
Возвращает. The quantum value of the color element. Float if ImageMagick was compiled with HDRI, otherwise an int.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: HDRI может вернуть float, обычная сборка int.
Когда выбрать другое. getColorValue для логики 0…1.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$value = $pixel->getColorValueQuantum(Imagick::COLOR_GREEN);
$quantum = Imagick::getQuantum();
if (!is_int($value) && !is_float($value)) { throw new RuntimeException('Ожидался int|float'); }
if ($value < 0 || $value > $quantum) { throw new RuntimeException('Канал вне quantum'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$value = $pixel->getColorValueQuantum(Imagick::COLOR_BLUE);
$quantum = Imagick::getQuantum();
if (!is_int($value) && !is_float($value)) { throw new RuntimeException('Ожидался int|float'); }
if ($value < 0 || $value > $quantum) { throw new RuntimeException('Канал вне quantum'); }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-getcolorvaluequantum-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColor, ImagickPixel::getColorAsString, ImagickPixel::getColorQuantum, ImagickPixel::getColorValue.
ImagickPixel::getHSLразделить оттенок, насыщенность и светлоту
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::getHSL(): arrayПотребность. разделить оттенок, насыщенность и светлоту.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::getHSL(): array. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::getHSL(): array
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns the HSL value in an array with the keys "hue", "saturation", and "luminosity". Throws ImagickPixelException on failure.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: все три значения нормализованы, hue циклический.
Когда выбрать другое. RGB для точного обмена с внешним API.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$value = $pixel->getHSL();
foreach (['hue', 'saturation', 'luminosity'] as $key) { if (!isset($value[$key]) || $value[$key] < 0.0 || $value[$key] > 1.0) { throw new RuntimeException('Некорректный HSL'); } }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$value = $pixel->getHSL();
foreach (['hue', 'saturation', 'luminosity'] as $key) { if (!isset($value[$key]) || $value[$key] < 0.0 || $value[$key] > 1.0) { throw new RuntimeException('Некорректный HSL'); } }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-gethsl-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColor, ImagickPixel::getColorAsString, ImagickPixel::getColorQuantum, ImagickPixel::getColorValue.
ImagickPixel::getIndexпрочитать индекс/служебный канал pixel-wand
доступно: PECL imagick 2 >= 2.3.0, PECL imagick 3 · imagick
ImagickPixel::getIndex(): intПотребность. прочитать индекс/служебный канал pixel-wand.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::getIndex(): int. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::getIndex(): int
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Официальная страница не формулирует отдельный return-текст; точный тип берём из сигнатуры.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: это не координата и не позиция в PHP-массиве.
Когда выбрать другое. getIteratorRow и индекс foreach для координат.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$pixel->setIndex(3);
$value = $pixel->getIndex();
if ($value !== 3) { throw new RuntimeException('Index round-trip не совпал'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$pixel->setIndex(11);
$value = $pixel->getIndex();
if ($value !== 11) { throw new RuntimeException('Index round-trip не совпал'); }
$file = null;
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColorCount, ImagickPixel::setColorCount, ImagickPixel::setIndex.
ImagickPixel::isPixelSimilarсравнить цвет с допуском в нормализованной метрике
доступно: PECL imagick 3 >= 3.3.0 · imagick
ImagickPixel::isPixelSimilar(ImagickPixel $color, float $fuzz): boolПотребность. сравнить цвет с допуском в нормализованной метрике.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::isPixelSimilar(ImagickPixel $color, float $fuzz): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::isPixelSimilar(ImagickPixel $color, float $fuzz): bool
| Параметр | Тип | Смысл |
|---|---|---|
$color | ImagickPixel | Строка цвета или константа канала — точный смысл виден из сигнатуры.Формулировка PHP ManualThe ImagickPixel object to compare this object against. |
$fuzz | float | Максимально допустимое различие; шкала зависит от выбранного метода.Формулировка PHP ManualThe maximum distance within which to consider these colors as similar. The theoretical maximum for this value is the square root of three (1.732). |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: порог 0 и слишком широкий порог дают разные классы ошибок.
Когда выбрать другое. сравнить каналы вручную по бизнес-правилу.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$other = new ImagickPixel('rgba(53, 103, 155, 0.75)');
$value = $pixel->isPixelSimilar($other, 0.04);
if (!is_bool($value)) { throw new RuntimeException('Ожидался bool'); }
$other->clear();
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$other = new ImagickPixel('rgba(242, 181, 68, 0.65)');
$value = $pixel->isPixelSimilar($other, 0.08);
if (!is_bool($value)) { throw new RuntimeException('Ожидался bool'); }
$other->clear();
$file = null;
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::isPixelSimilarQuantum, ImagickPixel::isSimilar.
ImagickPixel::isPixelSimilarQuantumсравнить цвет в quantum-допуске конкретной сборки
доступно: PECL imagick 3 >= 3.3.0 · imagick
ImagickPixel::isPixelSimilarQuantum(string $color, string $fuzz = ?): boolПотребность. сравнить цвет в quantum-допуске конкретной сборки.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::isPixelSimilarQuantum(string $color, string $fuzz = ?): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::isPixelSimilarQuantum(string $color, string $fuzz = ?): bool
| Параметр | Тип | Смысл |
|---|---|---|
$color | string | Строка цвета или константа канала — точный смысл виден из сигнатуры. |
$fuzz | string; необязательный | Максимально допустимое различие; шкала зависит от выбранного метода. |
Возвращает. Официальная страница не формулирует отдельный return-текст; точный тип берём из сигнатуры.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: в сохранённой сигнатуре ошибочно указан string для fuzz; реализация принимает float в quantum-шкале.
Когда выбрать другое. isPixelSimilar с 0…1.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$value = $pixel->isPixelSimilarQuantum('rgba(53, 103, 155, 0.75)', Imagick::getQuantum() * 0.04);
if (!is_bool($value)) { throw new RuntimeException('Ожидался bool'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$value = $pixel->isPixelSimilarQuantum('rgba(242, 181, 68, 0.65)', Imagick::getQuantum() * 0.08);
if (!is_bool($value)) { throw new RuntimeException('Ожидался bool'); }
$file = null;
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::isPixelSimilar, ImagickPixel::isSimilar.
ImagickPixel::isSimilarподдержать код со старым именем quantum-сравнения
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::isSimilar(ImagickPixel $color, float $fuzz): boolПотребность. поддержать код со старым именем quantum-сравнения.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::isSimilar(ImagickPixel $color, float $fuzz): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::isSimilar(ImagickPixel $color, float $fuzz): bool
| Параметр | Тип | Смысл |
|---|---|---|
$color | ImagickPixel | Строка цвета или константа канала — точный смысл виден из сигнатуры.Формулировка PHP ManualThe ImagickPixel object to compare this object against. |
$fuzz | float | Максимально допустимое различие; шкала зависит от выбранного метода.Формулировка PHP ManualThe maximum distance within which to consider these colors as similar. The theoretical maximum for this value is the square root of three (1.732). |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: isSimilar — alias isPixelSimilarQuantum и использует quantum-шкалу, не нормализованный порог.
Когда выбрать другое. isPixelSimilar с порогом 0…1 для нового кода.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$other = new ImagickPixel('rgba(53, 103, 155, 0.75)');
$value = $pixel->isSimilar($other, Imagick::getQuantum() * 0.04);
if (!is_bool($value)) { throw new RuntimeException('Ожидался bool'); }
$other->clear();
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$other = new ImagickPixel('rgba(242, 181, 68, 0.65)');
$value = $pixel->isSimilar($other, Imagick::getQuantum() * 0.08);
if (!is_bool($value)) { throw new RuntimeException('Ожидался bool'); }
$other->clear();
$file = null;
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::isPixelSimilar, ImagickPixel::isPixelSimilarQuantum.
ImagickPixel::setColorзаменить цвет pixel-wand целиком
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::setColor(string $color): boolПотребность. заменить цвет pixel-wand целиком.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::setColor(string $color): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::setColor(string $color): bool
| Параметр | Тип | Смысл |
|---|---|---|
$color | string | Строка цвета или константа канала — точный смысл виден из сигнатуры.Формулировка PHP ManualThe color definition to use in order to initialise the ImagickPixel object. |
Возвращает. Returns true if the specified color was set, false otherwise.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: pixel из iterator попадёт в изображение только после syncIterator.
Когда выбрать другое. setColorValue для одного канала.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$accepted = $pixel->setColor('#ef476f');
if ($accepted !== true) { throw new RuntimeException('Цвет отклонён'); }
$value = $pixel->getColor(1);
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$accepted = $pixel->setColor('rgba(6, 214, 160, 0.8)');
if ($accepted !== true) { throw new RuntimeException('Цвет отклонён'); }
$value = $pixel->getColor(1);
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-setcolor-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::setColorValue, ImagickPixel::setColorValueQuantum, ImagickPixel::setHSL.
ImagickPixel::setColorCountзадать служебную частоту histogram-записи
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::setcolorcount(int $colorCount): boolПотребность. задать служебную частоту histogram-записи.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::setcolorcount(int $colorCount): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::setcolorcount(int $colorCount): bool
| Параметр | Тип | Смысл |
|---|---|---|
$colorCount | int | Служебная частота цвета в histogram. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: метод не рисует указанное число пикселей.
Когда выбрать другое. менять само изображение через iterator/draw.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$accepted = $pixel->setColorCount(17);
if ($accepted !== true) { throw new RuntimeException('Частота отклонена'); }
$value = $pixel->getColorCount();
if ($value !== 17) { throw new RuntimeException('Частота не сохранена'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$accepted = $pixel->setColorCount(96);
if ($accepted !== true) { throw new RuntimeException('Частота отклонена'); }
$value = $pixel->getColorCount();
if ($value !== 96) { throw new RuntimeException('Частота не сохранена'); }
$file = null;
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColorCount, ImagickPixel::getIndex, ImagickPixel::setIndex.
ImagickPixel::setColorValueпоменять один канал в переносимой шкале 0…1
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::setColorValue(int $color, float $value): boolПотребность. поменять один канал в переносимой шкале 0…1.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::setColorValue(int $color, float $value): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::setColorValue(int $color, float $value): bool
| Параметр | Тип | Смысл |
|---|---|---|
$color | int | Строка цвета или константа канала — точный смысл виден из сигнатуры.Формулировка PHP ManualOne of the Imagick color constants e.g. \Imagick::COLOR_GREEN or \Imagick::COLOR_ALPHA. |
$value | float | Новое значение канала: 0…1 либо quantum — по сигнатуре.Формулировка PHP ManualThe value to set this channel to, ranging from 0 to 1. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: значение вне диапазона и неверная константа нарушают контракт.
Когда выбрать другое. setColorValueQuantum для нативной шкалы.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$accepted = $pixel->setColorValue(Imagick::COLOR_RED, 0.9);
if ($accepted !== true) { throw new RuntimeException('Канал отклонён'); }
$value = $pixel->getColorValue(Imagick::COLOR_RED);
if (abs($value - 0.9) > 0.01) { throw new RuntimeException('Setter не подтверждён getter'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$accepted = $pixel->setColorValue(Imagick::COLOR_ALPHA, 0.4);
if ($accepted !== true) { throw new RuntimeException('Канал отклонён'); }
$value = $pixel->getColorValue(Imagick::COLOR_ALPHA);
if (abs($value - 0.4) > 0.01) { throw new RuntimeException('Setter не подтверждён getter'); }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-setcolorvalue-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::setColor, ImagickPixel::setColorValueQuantum, ImagickPixel::setHSL.
ImagickPixel::setColorValueQuantumзадать канал в quantum-точности текущей сборки
доступно: PECL imagick 2 >=2.3.0, PECL imagick 3 · imagick
ImagickPixel::setColorValueQuantum(int $color, int|float $value): boolПотребность. задать канал в quantum-точности текущей сборки.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::setColorValueQuantum(int $color, int|float $value): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::setColorValueQuantum(int $color, int|float $value): bool
| Параметр | Тип | Смысл |
|---|---|---|
$color | int | Строка цвета или константа канала — точный смысл виден из сигнатуры.Формулировка PHP ManualWhich color element to set e.g. \Imagick::COLOR_GREEN. |
$value | int|float | Новое значение канала: 0…1 либо quantum — по сигнатуре.Формулировка PHP ManualThe quantum value to set the color element to. This should be a float if ImageMagick was compiled with HDRI otherwise an int in the range 0 to Imagick::getQuantum(). |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: нельзя жёстко считать quantum равным 255 или 65535.
Когда выбрать другое. setColorValue с нормализованным значением.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$quantum = Imagick::getQuantum();
$rawTarget = $quantum * 0.25;
$sample = $pixel->getColorValueQuantum(Imagick::COLOR_GREEN);
$target = is_float($sample) ? $rawTarget : (int) round($rawTarget);
$accepted = $pixel->setColorValueQuantum(Imagick::COLOR_GREEN, $target);
if ($accepted !== true) { throw new RuntimeException('Quantum-канал отклонён'); }
$value = $pixel->getColorValueQuantum(Imagick::COLOR_GREEN);
if (abs((float) $value - $target) > max(1.0, $quantum * 0.002)) { throw new RuntimeException('Quantum round-trip не совпал'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$quantum = Imagick::getQuantum();
$rawTarget = $quantum * 0.72;
$sample = $pixel->getColorValueQuantum(Imagick::COLOR_BLUE);
$target = is_float($sample) ? $rawTarget : (int) round($rawTarget);
$accepted = $pixel->setColorValueQuantum(Imagick::COLOR_BLUE, $target);
if ($accepted !== true) { throw new RuntimeException('Quantum-канал отклонён'); }
$value = $pixel->getColorValueQuantum(Imagick::COLOR_BLUE);
if (abs((float) $value - $target) > max(1.0, $quantum * 0.002)) { throw new RuntimeException('Quantum round-trip не совпал'); }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-setcolorvaluequantum-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::setColor, ImagickPixel::setColorValue, ImagickPixel::setHSL.
ImagickPixel::setHSLсобрать тематический цвет через оттенок/насыщенность/светлоту
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixel::setHSL(float $hue, float $saturation, float $luminosity): boolПотребность. собрать тематический цвет через оттенок/насыщенность/светлоту.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::setHSL(float $hue, float $saturation, float $luminosity): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::setHSL(float $hue, float $saturation, float $luminosity): bool
| Параметр | Тип | Смысл |
|---|---|---|
$hue | float | Оттенок как доля цветового круга 0…1.Формулировка PHP ManualThe normalized value for hue, described as a fractional arc (between 0 and 1) of the hue circle, where the zero value is red. |
$saturation | float | Насыщенность 0…1.Формулировка PHP ManualThe normalized value for saturation, with 1 as full saturation. |
$luminosity | float | Светлота 0…1.Формулировка PHP ManualThe normalized value for luminosity, on a scale from black at 0 to white at 1, with the full HS value at 0.5 luminosity. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: hue — доля круга, а не градусы.
Когда выбрать другое. setColor для готовой CSS/ImageMagick строки.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$accepted = $pixel->setHSL(0.58, 0.70, 0.48);
if ($accepted !== true) { throw new RuntimeException('HSL отклонён'); }
$value = $pixel->getHSL();
foreach ($value as $channel) { if ($channel < 0.0 || $channel > 1.0) { throw new RuntimeException('HSL вне 0..1'); } }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$accepted = $pixel->setHSL(0.12, 0.82, 0.55);
if ($accepted !== true) { throw new RuntimeException('HSL отклонён'); }
$value = $pixel->getHSL();
foreach ($value as $channel) { if ($channel < 0.0 || $channel > 1.0) { throw new RuntimeException('HSL вне 0..1'); } }
$swatch = new Imagick();
$swatch->newImage(64, 40, $pixel, 'png');
$path = $outDir . '/pixel-sethsl-workflow.png';
if (!$swatch->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$swatch->clear();
$file = basename($path);
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::setColor, ImagickPixel::setColorValue, ImagickPixel::setColorValueQuantum.
ImagickPixel::setIndexзадать индекс/служебный канал при низкоуровневой работе
доступно: PECL imagick 2 >= 2.3.0, PECL imagick 3 · imagick
ImagickPixel::setIndex(int $index): boolПотребность. задать индекс/служебный канал при низкоуровневой работе.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixel::setIndex(int $index): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixel::setIndex(int $index): bool
| Параметр | Тип | Смысл |
|---|---|---|
$index | int | Индекс/служебный канал, не координата. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: в DirectClass RGB это не создаёт palette mapping.
Когда выбрать другое. quantize/remap для управляемой палитры.
<?php
declare(strict_types=1);
$pixel = new ImagickPixel('rgba(51, 102, 153, 0.75)');
$accepted = $pixel->setIndex(5);
if ($accepted !== true) { throw new RuntimeException('Index отклонён'); }
$value = $pixel->getIndex();
if ($value !== 5) { throw new RuntimeException('Index не сохранён'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(12, 8, new ImagickPixel('rgba(20, 80, 140, 0.65)'), 'png');
$pixel = $image->getImagePixelColor(4, 3);
$accepted = $pixel->setIndex(13);
if ($accepted !== true) { throw new RuntimeException('Index отклонён'); }
$value = $pixel->getIndex();
if ($value !== 13) { throw new RuntimeException('Index не сохранён'); }
$file = null;
echo json_encode(['value' => $value, 'file' => $file], JSON_THROW_ON_ERROR), PHP_EOL;
$pixel->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixel::getColorCount, ImagickPixel::getIndex, ImagickPixel::setColorCount.
ImagickPixelIterator::clearосвободить iterator после ограниченного прохода
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::clear(): boolПотребность. освободить iterator после ограниченного прохода.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::clear(): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::clear(): bool
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: очистка iterator не является записью изображения.
Когда выбрать другое. дать объекту выйти из области видимости.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$before = ['row' => $iterator->getIteratorRow(), 'columns' => count($iterator->getCurrentIteratorRow())];
$accepted = $iterator->clear();
if ($accepted !== true) { throw new RuntimeException('Iterator не освобождён'); }
$value = ['released' => true, 'before' => $before];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$before = ['row' => $iterator->getIteratorRow(), 'columns' => count($iterator->getCurrentIteratorRow())];
$accepted = $iterator->clear();
if ($accepted !== true) { throw new RuntimeException('Iterator не освобождён'); }
$value = ['released' => true, 'before' => $before];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixelIterator::__construct, ImagickPixelIterator::destroy, ImagickPixelIterator::newPixelIterator, ImagickPixelIterator::newPixelRegionIterator.
ImagickPixelIterator::__constructначать построчный обход программно созданного изображения
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::__construct(Imagick $wand): mixedПотребность. начать построчный обход программно созданного изображения.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::__construct(Imagick $wand): mixed. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::__construct(Imagick $wand): mixed
| Параметр | Тип | Смысл |
|---|---|---|
$wand | Imagick | Объект Imagick, пиксели которого будет обходить iterator. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: пустой/повреждённый Imagick не даст полезных строк.
Когда выбрать другое. Imagick::getPixelIterator.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$row = $iterator->getCurrentIteratorRow();
if (!is_array($row) || count($row) !== 6) { throw new RuntimeException('Ширина строки не совпала'); }
$value = ['row' => $iterator->getIteratorRow(), 'columns' => count($row)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$row = $iterator->getCurrentIteratorRow();
if (!is_array($row) || count($row) !== 10) { throw new RuntimeException('Ширина строки не совпала'); }
$value = ['row' => $iterator->getIteratorRow(), 'columns' => count($row)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixelIterator::clear, ImagickPixelIterator::destroy, ImagickPixelIterator::newPixelIterator, ImagickPixelIterator::newPixelRegionIterator.
ImagickPixelIterator::destroyявно завершить старый iterator
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::destroy(): boolПотребность. явно завершить старый iterator.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::destroy(): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::destroy(): bool
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: нельзя продолжать навигацию после destroy.
Когда выбрать другое. clear или естественное освобождение.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$before = ['row' => $iterator->getIteratorRow(), 'columns' => count($iterator->getCurrentIteratorRow())];
$accepted = $iterator->destroy();
if ($accepted !== true) { throw new RuntimeException('Iterator не освобождён'); }
$value = ['released' => true, 'before' => $before];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$before = ['row' => $iterator->getIteratorRow(), 'columns' => count($iterator->getCurrentIteratorRow())];
$accepted = $iterator->destroy();
if ($accepted !== true) { throw new RuntimeException('Iterator не освобождён'); }
$value = ['released' => true, 'before' => $before];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixelIterator::clear, ImagickPixelIterator::__construct, ImagickPixelIterator::newPixelIterator, ImagickPixelIterator::newPixelRegionIterator.
ImagickPixelIterator::getCurrentIteratorRowполучить пиксели выбранной строки
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::getCurrentIteratorRow(): arrayПотребность. получить пиксели выбранной строки.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::getCurrentIteratorRow(): array. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::getCurrentIteratorRow(): array
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns a row as an array of ImagickPixel objects that can themselves be iterated.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: изменения без syncIterator потеряются.
Когда выбрать другое. foreach по iterator для всех строк.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
if (!$iterator->setIteratorRow(1)) { throw new RuntimeException('Строка недоступна'); }
$row = $iterator->getCurrentIteratorRow();
if (!is_array($row) || count($row) !== 6) { throw new RuntimeException('Неверная ширина строки'); }
$value = ['row' => $iterator->getIteratorRow(), 'columns' => count($row), 'first' => $row[0]->getColor(1)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
if (!$iterator->setIteratorRow(3)) { throw new RuntimeException('Строка недоступна'); }
$row = $iterator->getCurrentIteratorRow();
if (!is_array($row) || count($row) !== 10) { throw new RuntimeException('Неверная ширина строки'); }
$value = ['row' => $iterator->getIteratorRow(), 'columns' => count($row), 'first' => $row[0]->getColor(1)];
$selectedY = $iterator->getIteratorRow();
$selectedPixels = $iterator->getCurrentIteratorRow();
$rgbRow = array_map(static fn (ImagickPixel $pixel): array => $pixel->getColor(0), $selectedPixels);
$strip = clone $image;
$strip->cropImage(10, 1, 0, $selectedY);
$strip->setImagePage(0, 0, 0, 0);
$path = $outDir . '/selected-row-getcurrentiteratorrow.png';
if (!$strip->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Полоса строки не записана'); }
$strip->clear();
$value = ['navigation' => $value, 'selected_y' => $selectedY, 'rgb_row' => $rgbRow, 'file' => basename($path)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Во втором сценарии выбранная строка превращается в PNG-полосу высотой один пиксель и массив RGB: так проверяют цвет строки, рамки или артефакт импорта. Курсор определяет, какую строку диагностировать. PHP Imagick локально не выполнялся.
Соседние инструменты: ImagickPixelIterator::getIteratorRow, ImagickPixelIterator::getNextIteratorRow, ImagickPixelIterator::getPreviousIteratorRow, ImagickPixelIterator::resetIterator.
ImagickPixelIterator::getIteratorRowузнать текущий y курсора
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::getIteratorRow(): intПотребность. узнать текущий y курсора.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::getIteratorRow(): int. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::getIteratorRow(): int
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns the integer offset of the row, throwing ImagickPixelIteratorException on error.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: это строка, не x пикселя.
Когда выбрать другое. ключ foreach для последовательного обхода.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$iterator->setIteratorRow(2);
$value = $iterator->getIteratorRow();
if ($value !== 2) { throw new RuntimeException('Курсор строки не совпал'); }
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$iterator->setIteratorRow(4);
$value = $iterator->getIteratorRow();
if ($value !== 4) { throw new RuntimeException('Курсор строки не совпал'); }
$selectedY = $iterator->getIteratorRow();
$selectedPixels = $iterator->getCurrentIteratorRow();
$rgbRow = array_map(static fn (ImagickPixel $pixel): array => $pixel->getColor(0), $selectedPixels);
$strip = clone $image;
$strip->cropImage(10, 1, 0, $selectedY);
$strip->setImagePage(0, 0, 0, 0);
$path = $outDir . '/selected-row-getiteratorrow.png';
if (!$strip->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Полоса строки не записана'); }
$strip->clear();
$value = ['navigation' => $value, 'selected_y' => $selectedY, 'rgb_row' => $rgbRow, 'file' => basename($path)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Во втором сценарии выбранная строка превращается в PNG-полосу высотой один пиксель и массив RGB: так проверяют цвет строки, рамки или артефакт импорта. Курсор определяет, какую строку диагностировать. PHP Imagick локально не выполнялся.
Соседние инструменты: ImagickPixelIterator::getCurrentIteratorRow, ImagickPixelIterator::getNextIteratorRow, ImagickPixelIterator::getPreviousIteratorRow, ImagickPixelIterator::resetIterator.
ImagickPixelIterator::getNextIteratorRowчитать строки по одной в streaming-подобном цикле
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::getNextIteratorRow(): arrayПотребность. читать строки по одной в streaming-подобном цикле.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::getNextIteratorRow(): array. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::getNextIteratorRow(): array
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns the next row as an array of ImagickPixel objects, throwing ImagickPixelIteratorException on error.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: на границе версии могут различаться по сигналу конца.
Когда выбрать другое. foreach по iterator.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$iterator->resetIterator();
$row = $iterator->getNextIteratorRow();
if (!is_array($row) || count($row) !== 6) { throw new RuntimeException('Первая строка не прочитана'); }
$value = ['row' => $iterator->getIteratorRow(), 'columns' => count($row), 'sample' => $row[0]->getColor(1)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$iterator->resetIterator();
$row = $iterator->getNextIteratorRow();
if (!is_array($row) || count($row) !== 10) { throw new RuntimeException('Первая строка не прочитана'); }
$value = ['row' => $iterator->getIteratorRow(), 'columns' => count($row), 'sample' => $row[0]->getColor(1)];
$selectedY = $iterator->getIteratorRow();
$selectedPixels = $iterator->getCurrentIteratorRow();
$rgbRow = array_map(static fn (ImagickPixel $pixel): array => $pixel->getColor(0), $selectedPixels);
$strip = clone $image;
$strip->cropImage(10, 1, 0, $selectedY);
$strip->setImagePage(0, 0, 0, 0);
$path = $outDir . '/selected-row-getnextiteratorrow.png';
if (!$strip->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Полоса строки не записана'); }
$strip->clear();
$value = ['navigation' => $value, 'selected_y' => $selectedY, 'rgb_row' => $rgbRow, 'file' => basename($path)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Во втором сценарии выбранная строка превращается в PNG-полосу высотой один пиксель и массив RGB: так проверяют цвет строки, рамки или артефакт импорта. Курсор определяет, какую строку диагностировать. PHP Imagick локально не выполнялся.
Соседние инструменты: ImagickPixelIterator::getCurrentIteratorRow, ImagickPixelIterator::getIteratorRow, ImagickPixelIterator::getPreviousIteratorRow, ImagickPixelIterator::resetIterator.
ImagickPixelIterator::getPreviousIteratorRowвернуться к предыдущей строке
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::getPreviousIteratorRow(): arrayПотребность. вернуться к предыдущей строке.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::getPreviousIteratorRow(): array. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::getPreviousIteratorRow(): array
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns the previous row as an array of ImagickPixelWand objects from the ImagickPixelIterator, throwing ImagickPixelIteratorException on error.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: сначала курсор должен находиться ниже неё.
Когда выбрать другое. setIteratorRow для прямого перехода.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$iterator->setIteratorLastRow();
$iterator->getCurrentIteratorRow();
$row = $iterator->getPreviousIteratorRow();
if ($iterator->getIteratorRow() !== 2) { throw new RuntimeException('Курсор не перешёл на предыдущую строку'); }
if (!is_array($row) || count($row) !== 6) { throw new RuntimeException('Предыдущая строка не прочитана'); }
$value = ['row' => $iterator->getIteratorRow(), 'columns' => count($row)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$iterator->setIteratorLastRow();
$iterator->getCurrentIteratorRow();
$row = $iterator->getPreviousIteratorRow();
if ($iterator->getIteratorRow() !== 4) { throw new RuntimeException('Курсор не перешёл на предыдущую строку'); }
if (!is_array($row) || count($row) !== 10) { throw new RuntimeException('Предыдущая строка не прочитана'); }
$value = ['row' => $iterator->getIteratorRow(), 'columns' => count($row)];
$selectedY = $iterator->getIteratorRow();
$selectedPixels = $iterator->getCurrentIteratorRow();
$rgbRow = array_map(static fn (ImagickPixel $pixel): array => $pixel->getColor(0), $selectedPixels);
$strip = clone $image;
$strip->cropImage(10, 1, 0, $selectedY);
$strip->setImagePage(0, 0, 0, 0);
$path = $outDir . '/selected-row-getpreviousiteratorrow.png';
if (!$strip->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Полоса строки не записана'); }
$strip->clear();
$value = ['navigation' => $value, 'selected_y' => $selectedY, 'rgb_row' => $rgbRow, 'file' => basename($path)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Во втором сценарии выбранная строка превращается в PNG-полосу высотой один пиксель и массив RGB: так проверяют цвет строки, рамки или артефакт импорта. Курсор определяет, какую строку диагностировать. PHP Imagick локально не выполнялся.
Соседние инструменты: ImagickPixelIterator::getCurrentIteratorRow, ImagickPixelIterator::getIteratorRow, ImagickPixelIterator::getNextIteratorRow, ImagickPixelIterator::resetIterator.
ImagickPixelIterator::newPixelIteratorпереназначить iterator на другой Imagick
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::newPixelIterator(Imagick $wand): boolПотребность. переназначить iterator на другой Imagick.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::newPixelIterator(Imagick $wand): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::newPixelIterator(Imagick $wand): bool
| Параметр | Тип | Смысл |
|---|---|---|
$wand | Imagick | Объект Imagick, пиксели которого будет обходить iterator. |
Возвращает. Returns true on success. Throwing ImagickPixelIteratorException.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: PHP Manual одновременно заявляет bool и описывает новый iterator.
Когда выбрать другое. конструктор или Imagick::getPixelIterator.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$extensionVersion = phpversion('imagick');
if (!is_string($extensionVersion) || $extensionVersion === '') { throw new RuntimeException('Не удалось определить версию imagick'); }
$replacement = new Imagick();
$replacement->newImage(5, 3, new ImagickPixel('#06d6a0'), 'png');
$factoryResult = $iterator->newPixelIterator($replacement);
if ($factoryResult instanceof ImagickPixelIterator) {
$active = $factoryResult;
$factoryMode = 'iterator-object';
} elseif ($factoryResult === true) {
$active = $iterator;
$factoryMode = 'bool-mutates-receiver';
} else {
throw new RuntimeException('Версия вернула неподдерживаемый результат фабрики');
}
$active->resetIterator();
$row = [];
$seenRows = 0;
while (true) {
try { $next = $active->getNextIteratorRow(); } catch (ImagickPixelIteratorException) { break; }
if (!is_array($next) || $next === []) { break; }
if ($seenRows === 0) { $row = $next; }
if (count($next) !== 5) { throw new RuntimeException('Ширина области не совпала'); }
$seenRows++;
if ($seenRows > 3) { throw new RuntimeException('Iterator вышел за ожидаемую область'); }
}
if ($seenRows !== 3) { throw new RuntimeException('Число строк области не совпало'); }
$value = ['imagick_version' => $extensionVersion, 'factory_mode' => $factoryMode, 'columns' => count($row), 'rows' => $seenRows];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
if (isset($active) && $active !== $iterator) { $active->clear(); }
$replacement->clear();
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$extensionVersion = phpversion('imagick');
if (!is_string($extensionVersion) || $extensionVersion === '') { throw new RuntimeException('Не удалось определить версию imagick'); }
$replacement = new Imagick();
$replacement->newImage(8, 5, new ImagickPixel('#f2b544'), 'png');
$factoryResult = $iterator->newPixelIterator($replacement);
if ($factoryResult instanceof ImagickPixelIterator) {
$active = $factoryResult;
$factoryMode = 'iterator-object';
} elseif ($factoryResult === true) {
$active = $iterator;
$factoryMode = 'bool-mutates-receiver';
} else {
throw new RuntimeException('Версия вернула неподдерживаемый результат фабрики');
}
$active->resetIterator();
$row = [];
$seenRows = 0;
while (true) {
try { $next = $active->getNextIteratorRow(); } catch (ImagickPixelIteratorException) { break; }
if (!is_array($next) || $next === []) { break; }
if ($seenRows === 0) { $row = $next; }
if (count($next) !== 8) { throw new RuntimeException('Ширина области не совпала'); }
$seenRows++;
if ($seenRows > 5) { throw new RuntimeException('Iterator вышел за ожидаемую область'); }
}
if ($seenRows !== 5) { throw new RuntimeException('Число строк области не совпало'); }
$value = ['imagick_version' => $extensionVersion, 'factory_mode' => $factoryMode, 'columns' => count($row), 'rows' => $seenRows];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
if (isset($active) && $active !== $iterator) { $active->clear(); }
$replacement->clear();
$iterator->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixelIterator::clear, ImagickPixelIterator::__construct, ImagickPixelIterator::destroy, ImagickPixelIterator::newPixelRegionIterator.
ImagickPixelIterator::newPixelRegionIteratorобойти только прямоугольник интереса
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::newPixelRegionIterator(Imagick $wand, int $x, int $y, int $columns, int $rows): boolПотребность. обойти только прямоугольник интереса.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::newPixelRegionIterator(Imagick $wand, int $x, int $y, int $columns, int $rows): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::newPixelRegionIterator(Imagick $wand, int $x, int $y, int $columns, int $rows): bool
| Параметр | Тип | Смысл |
|---|---|---|
$wand | Imagick | Объект Imagick, пиксели которого будет обходить iterator. |
$x | int | Левая координата region. |
$y | int | Верхняя координата region. |
$columns | int | Ширина region в пикселях. |
$rows | int | Высота region в пикселях. |
Возвращает. Returns a new ImagickPixelIterator on success; on failure, throws ImagickPixelIteratorException.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: Manual конфликтует: bool в сигнатуре, ImagickPixelIterator в return-тексте.
Когда выбрать другое. Imagick::getPixelRegionIterator при наличии в версии.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$extensionVersion = phpversion('imagick');
if (!is_string($extensionVersion) || $extensionVersion === '') { throw new RuntimeException('Не удалось определить версию imagick'); }
$factoryResult = $iterator->newPixelRegionIterator($image, 1, 1, 3, 2);
if ($factoryResult instanceof ImagickPixelIterator) {
$active = $factoryResult;
$factoryMode = 'iterator-object';
} elseif ($factoryResult === true) {
$active = $iterator;
$factoryMode = 'bool-mutates-receiver';
} else {
throw new RuntimeException('Версия вернула неподдерживаемый результат region-фабрики');
}
$active->resetIterator();
$row = [];
$seenRows = 0;
while (true) {
try { $next = $active->getNextIteratorRow(); } catch (ImagickPixelIteratorException) { break; }
if (!is_array($next) || $next === []) { break; }
if ($seenRows === 0) { $row = $next; }
if (count($next) !== 3) { throw new RuntimeException('Ширина области не совпала'); }
$seenRows++;
if ($seenRows > 2) { throw new RuntimeException('Iterator вышел за ожидаемую область'); }
}
if ($seenRows !== 2) { throw new RuntimeException('Число строк области не совпало'); }
$value = ['imagick_version' => $extensionVersion, 'factory_mode' => $factoryMode, 'columns' => count($row), 'rows' => $seenRows];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
if (isset($active) && $active !== $iterator) { $active->clear(); }
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$extensionVersion = phpversion('imagick');
if (!is_string($extensionVersion) || $extensionVersion === '') { throw new RuntimeException('Не удалось определить версию imagick'); }
$factoryResult = $iterator->newPixelRegionIterator($image, 2, 2, 5, 3);
if ($factoryResult instanceof ImagickPixelIterator) {
$active = $factoryResult;
$factoryMode = 'iterator-object';
} elseif ($factoryResult === true) {
$active = $iterator;
$factoryMode = 'bool-mutates-receiver';
} else {
throw new RuntimeException('Версия вернула неподдерживаемый результат region-фабрики');
}
$active->resetIterator();
$row = [];
$seenRows = 0;
while (true) {
try { $next = $active->getNextIteratorRow(); } catch (ImagickPixelIteratorException) { break; }
if (!is_array($next) || $next === []) { break; }
if ($seenRows === 0) { $row = $next; }
if (count($next) !== 5) { throw new RuntimeException('Ширина области не совпала'); }
$seenRows++;
if ($seenRows > 3) { throw new RuntimeException('Iterator вышел за ожидаемую область'); }
}
if ($seenRows !== 3) { throw new RuntimeException('Число строк области не совпало'); }
$value = ['imagick_version' => $extensionVersion, 'factory_mode' => $factoryMode, 'columns' => count($row), 'rows' => $seenRows];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
if (isset($active) && $active !== $iterator) { $active->clear(); }
$iterator->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixelIterator::clear, ImagickPixelIterator::__construct, ImagickPixelIterator::destroy, ImagickPixelIterator::newPixelIterator.
ImagickPixelIterator::resetIteratorвернуть курсор перед новым проходом
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::resetIterator(): boolПотребность. вернуть курсор перед новым проходом.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::resetIterator(): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::resetIterator(): bool
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: reset не записывает несинхронизированные изменения.
Когда выбрать другое. создать новый iterator.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$iterator->setIteratorLastRow();
$accepted = $iterator->resetIterator();
if ($accepted !== true) { throw new RuntimeException('Reset отклонён'); }
$first = $iterator->getNextIteratorRow();
if (!is_array($first) || count($first) !== 6) { throw new RuntimeException('После reset нет первой строки'); }
$value = ['accepted' => true, 'row_after_next' => $iterator->getIteratorRow()];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$iterator->setIteratorLastRow();
$accepted = $iterator->resetIterator();
if ($accepted !== true) { throw new RuntimeException('Reset отклонён'); }
$first = $iterator->getNextIteratorRow();
if (!is_array($first) || count($first) !== 10) { throw new RuntimeException('После reset нет первой строки'); }
$value = ['accepted' => true, 'row_after_next' => $iterator->getIteratorRow()];
$selectedY = $iterator->getIteratorRow();
$selectedPixels = $iterator->getCurrentIteratorRow();
$rgbRow = array_map(static fn (ImagickPixel $pixel): array => $pixel->getColor(0), $selectedPixels);
$strip = clone $image;
$strip->cropImage(10, 1, 0, $selectedY);
$strip->setImagePage(0, 0, 0, 0);
$path = $outDir . '/selected-row-resetiterator.png';
if (!$strip->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Полоса строки не записана'); }
$strip->clear();
$value = ['navigation' => $value, 'selected_y' => $selectedY, 'rgb_row' => $rgbRow, 'file' => basename($path)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Во втором сценарии выбранная строка превращается в PNG-полосу высотой один пиксель и массив RGB: так проверяют цвет строки, рамки или артефакт импорта. Курсор определяет, какую строку диагностировать. PHP Imagick локально не выполнялся.
Соседние инструменты: ImagickPixelIterator::getCurrentIteratorRow, ImagickPixelIterator::getIteratorRow, ImagickPixelIterator::getNextIteratorRow, ImagickPixelIterator::getPreviousIteratorRow.
ImagickPixelIterator::setIteratorFirstRowперейти к первой строке
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::setIteratorFirstRow(): boolПотребность. перейти к первой строке.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::setIteratorFirstRow(): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::setIteratorFirstRow(): bool
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: пустое изображение не имеет полезной строки.
Когда выбрать другое. resetIterator затем getNextIteratorRow.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$iterator->setIteratorLastRow();
$accepted = $iterator->setIteratorFirstRow();
if ($accepted !== true || $iterator->getIteratorRow() !== 0) { throw new RuntimeException('Не первая строка'); }
$value = ['accepted' => true, 'row' => $iterator->getIteratorRow()];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$iterator->setIteratorLastRow();
$accepted = $iterator->setIteratorFirstRow();
if ($accepted !== true || $iterator->getIteratorRow() !== 0) { throw new RuntimeException('Не первая строка'); }
$value = ['accepted' => true, 'row' => $iterator->getIteratorRow()];
$selectedY = $iterator->getIteratorRow();
$selectedPixels = $iterator->getCurrentIteratorRow();
$rgbRow = array_map(static fn (ImagickPixel $pixel): array => $pixel->getColor(0), $selectedPixels);
$strip = clone $image;
$strip->cropImage(10, 1, 0, $selectedY);
$strip->setImagePage(0, 0, 0, 0);
$path = $outDir . '/selected-row-setiteratorfirstrow.png';
if (!$strip->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Полоса строки не записана'); }
$strip->clear();
$value = ['navigation' => $value, 'selected_y' => $selectedY, 'rgb_row' => $rgbRow, 'file' => basename($path)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Во втором сценарии выбранная строка превращается в PNG-полосу высотой один пиксель и массив RGB: так проверяют цвет строки, рамки или артефакт импорта. Курсор определяет, какую строку диагностировать. PHP Imagick локально не выполнялся.
Соседние инструменты: ImagickPixelIterator::getCurrentIteratorRow, ImagickPixelIterator::getIteratorRow, ImagickPixelIterator::getNextIteratorRow, ImagickPixelIterator::getPreviousIteratorRow.
ImagickPixelIterator::setIteratorLastRowначать обратный проход снизу
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::setIteratorLastRow(): boolПотребность. начать обратный проход снизу.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::setIteratorLastRow(): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::setIteratorLastRow(): bool
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: последний y равен height-1.
Когда выбрать другое. setIteratorRow(height-1).
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$accepted = $iterator->setIteratorLastRow();
if ($accepted !== true || $iterator->getIteratorRow() !== 3) { throw new RuntimeException('Не последняя строка'); }
$value = ['accepted' => true, 'row' => $iterator->getIteratorRow()];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$accepted = $iterator->setIteratorLastRow();
if ($accepted !== true || $iterator->getIteratorRow() !== 5) { throw new RuntimeException('Не последняя строка'); }
$value = ['accepted' => true, 'row' => $iterator->getIteratorRow()];
$selectedY = $iterator->getIteratorRow();
$selectedPixels = $iterator->getCurrentIteratorRow();
$rgbRow = array_map(static fn (ImagickPixel $pixel): array => $pixel->getColor(0), $selectedPixels);
$strip = clone $image;
$strip->cropImage(10, 1, 0, $selectedY);
$strip->setImagePage(0, 0, 0, 0);
$path = $outDir . '/selected-row-setiteratorlastrow.png';
if (!$strip->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Полоса строки не записана'); }
$strip->clear();
$value = ['navigation' => $value, 'selected_y' => $selectedY, 'rgb_row' => $rgbRow, 'file' => basename($path)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Во втором сценарии выбранная строка превращается в PNG-полосу высотой один пиксель и массив RGB: так проверяют цвет строки, рамки или артефакт импорта. Курсор определяет, какую строку диагностировать. PHP Imagick локально не выполнялся.
Соседние инструменты: ImagickPixelIterator::getCurrentIteratorRow, ImagickPixelIterator::getIteratorRow, ImagickPixelIterator::getNextIteratorRow, ImagickPixelIterator::getPreviousIteratorRow.
ImagickPixelIterator::setIteratorRowперейти к известному y без полного обхода
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::setIteratorRow(int $row): boolПотребность. перейти к известному y без полного обхода.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::setIteratorRow(int $row): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::setIteratorRow(int $row): bool
| Параметр | Тип | Смысл |
|---|---|---|
$row | int | Нулевой y строки; допустимо 0…height-1. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: row вне 0…height-1 должен считаться ошибкой входа.
Когда выбрать другое. region iterator для прямоугольника.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
$accepted = $iterator->setIteratorRow(1);
if ($accepted !== true || $iterator->getIteratorRow() !== 1) { throw new RuntimeException('Переход не выполнен'); }
$value = ['accepted' => true, 'row' => $iterator->getIteratorRow(), 'columns' => count($iterator->getCurrentIteratorRow())];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$accepted = $iterator->setIteratorRow(4);
if ($accepted !== true || $iterator->getIteratorRow() !== 4) { throw new RuntimeException('Переход не выполнен'); }
$value = ['accepted' => true, 'row' => $iterator->getIteratorRow(), 'columns' => count($iterator->getCurrentIteratorRow())];
$selectedY = $iterator->getIteratorRow();
$selectedPixels = $iterator->getCurrentIteratorRow();
$rgbRow = array_map(static fn (ImagickPixel $pixel): array => $pixel->getColor(0), $selectedPixels);
$strip = clone $image;
$strip->cropImage(10, 1, 0, $selectedY);
$strip->setImagePage(0, 0, 0, 0);
$path = $outDir . '/selected-row-setiteratorrow.png';
if (!$strip->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('Полоса строки не записана'); }
$strip->clear();
$value = ['navigation' => $value, 'selected_y' => $selectedY, 'rgb_row' => $rgbRow, 'file' => basename($path)];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Во втором сценарии выбранная строка превращается в PNG-полосу высотой один пиксель и массив RGB: так проверяют цвет строки, рамки или артефакт импорта. Курсор определяет, какую строку диагностировать. PHP Imagick локально не выполнялся.
Соседние инструменты: ImagickPixelIterator::getCurrentIteratorRow, ImagickPixelIterator::getIteratorRow, ImagickPixelIterator::getNextIteratorRow, ImagickPixelIterator::getPreviousIteratorRow.
ImagickPixelIterator::syncIteratorзафиксировать изменённую строку в pixel cache
доступно: PECL imagick 2, PECL imagick 3 · imagick
ImagickPixelIterator::syncIterator(): boolПотребность. зафиксировать изменённую строку в pixel cache.
- Подготовить самодостаточный цвет/изображение/маску.
- Вызвать
ImagickPixelIterator::syncIterator(): bool. - Проверить return и наблюдаемый эффект; при изменении изображения записать и перечитать результат.
Сигнатура: ImagickPixelIterator::syncIterator(): bool
| Параметр | Тип | Смысл |
|---|---|---|
| — | нет параметров | Метод работает с текущим состоянием объекта. |
Возвращает. Returns true on success.
Ошибки и границы. Специальный errors-блок отсутствует; неверный цвет, geometry, состояние iterator или kernel может привести к Imagick*Exception либо false согласно конкретной версии. Практический риск: без вызова setColor может не попасть в итоговый файл.
Когда выбрать другое. ImagickDraw для геометрических примитивов.
Если пример меняет pixel-wand, он вызывает syncIterator() на каждой изменённой строке и затем читает контрольный пиксель из Imagick.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(6, 4, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(2, 1, 4, 2);
$image->drawImage($draw);
$draw->clear();
$iterator = new ImagickPixelIterator($image);
if (!$iterator->setIteratorRow(1)) { throw new RuntimeException('Строка 1 недоступна'); }
$row = $iterator->getCurrentIteratorRow();
$row[2]->setColor('#ffffff');
$accepted = $iterator->syncIterator();
if ($accepted !== true) { throw new RuntimeException('Строка не синхронизирована'); }
$actual = $image->getImagePixelColor(2, 1)->getColor(1);
if ($actual['r'] < 0.95 || $actual['g'] < 0.95 || $actual['b'] < 0.95) { throw new RuntimeException('Пиксель не изменился'); }
$path = $outDir . '/sync-iterator-single.png';
if (!$image->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$value = ['accepted' => true, 'file' => basename($path), 'pixel' => $actual];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Код вызывает метод напрямую и проверяет тип, диапазон либо round-trip читаемым getter. Native Imagick runtime на этой машине не заявлен.
<?php
declare(strict_types=1);
$outDir = __DIR__ . '/out';
if (!is_dir($outDir) && !mkdir($outDir, 0775, true) && !is_dir($outDir)) {
throw new RuntimeException('Не удалось создать каталог результата');
}
$image = new Imagick();
$image->newImage(10, 6, new ImagickPixel('#102a43'), 'png');
$draw = new ImagickDraw();
$draw->setFillColor(new ImagickPixel('#ef476f'));
$draw->rectangle(3, 2, 7, 4);
$image->drawImage($draw);
$draw->clear();
$geometry = ['width' => $image->getImageWidth(), 'height' => $image->getImageHeight()];
if ($geometry !== ['width' => 10, 'height' => 6]) { throw new RuntimeException('Fixture имеет другую геометрию'); }
$image->setImageProperty('aen:fixture', 'service-region');
$iterator = new ImagickPixelIterator($image);
$changed = 0;
foreach ($iterator as $y => $row) {
foreach ($row as $x => $pixel) {
if ($x >= 2 && $x <= 7 && $y >= 1 && $y <= 4) { $pixel->setColor('#06d6a0'); $changed++; }
}
$accepted = $iterator->syncIterator();
if ($accepted !== true) { throw new RuntimeException('Строка не синхронизирована'); }
}
if ($changed !== 24) { throw new RuntimeException('Изменено не 24 пикселя'); }
$actual = $image->getImagePixelColor(3, 2)->getColor(1);
if ($actual['g'] < 0.7) { throw new RuntimeException('Region не перекрашен'); }
$path = $outDir . '/sync-iterator-region.png';
if (!$image->writeImage($path) || !is_file($path) || filesize($path) === 0) { throw new RuntimeException('PNG не записан'); }
$value = ['accepted' => true, 'file' => basename($path), 'pixel' => $actual];
echo json_encode(['value' => $value], JSON_THROW_ON_ERROR), PHP_EOL;
$iterator->clear();
$image->clear();
Вторая задача использует другое изображение, region или kernel. Там, где действие меняет изображение, код пишет непустой PNG и печатает наблюдаемые значения; фактический запуск отложен до совместимой Imagick-сборки.
Соседние инструменты: ImagickPixelIterator::getCurrentIteratorRow, ImagickPixelIterator::getIteratorRow, ImagickPixelIterator::getNextIteratorRow, ImagickPixelIterator::getPreviousIteratorRow.
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


