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

Дерево руководства
Глава 423 · После первых изображений, объектов и clone
Gmagick: эскиз, живописная фактура и рельеф
Сравнить настоящие эффекты на фактурной схеме и собрать три стиля каталога.
Получить угольный эскиз упаковки
Для оформления статьи о чае нужен эскиз упаковки. Возьмём собственную схему: у банки есть цветная этикетка, мелкая фактура и плавный светлый фон. Слева исходник 320×200, справа его копия после charcoalImage(1,1). Видимая модель: цветные области превращаются в светлые участки с тёмными линиями; линии внутри этикетки показывают, что фильтр реагирует и на фактуру.


$source = new Gmagick("effects.ppm");
$sketch = clone $source;
$sketch->charcoalImage(1, 1);
$sketch->setImageFormat("PNG"); $sketch->writeImage("sketch.png");new Gmagick открывает файл в объект изображения. $source и $sketch — имена переменных; clone создаёт независимую копию. Стрелка -> вызывает метод у объекта; два числа в скобках — radius и sigma, точка с запятой завершает инструкцию. Радиус задаёт окрестность в пикселях без центрального пикселя, sigma — стандартное отклонение гауссова распределения, тоже в пикселях. Сохраняем именно изменённый $sketch. В текущем C расширения параметры передаются библиотеке как sigma,radius: здесь оба равны 1, поэтому нет скрытой перестановки и одинаковое значение имеет однозначный смысл. Для разных значений сверяйте свою версию и результат.
<?php
declare(strict_types=1);
require __DIR__.'/gm99-effects-fixture.php';
gmRestore();
$source=new Gmagick(__DIR__.'/effects.ppm');$before=$source->getImageSignature();
$sketch=clone $source;$returned=$sketch->charcoalImage(1,1);
gmPng($source,'gm99-fx-charcoal-before.png');gmPng($sketch,'gm99-fx-charcoal-after.png');
$rgb=gmRgb($sketch,280,50);
gmReport('gm99-fx-charcoal',["gmagick.charcoalimage"],["gm99-fx-charcoal-before.png", "gm99-fx-charcoal-after.png"],['same_object'=>$returned===$sketch,'pixels_changed'=>$sketch->getImageSignature()!==$before,'source_kept'=>$source->getImageSignature()===$before,'gray_background'=>$rgb[0]===$rgb[1]&&$rgb[1]===$rgb[2]],$errors??[],['background_rgb'=>$rgb],['gmagick.charcoalimage'=>'applied']);
echo "charcoal: source=kept sketch=changed gray-background=yes\n";
Ожидаемый результат
charcoal: source=kept sketch=changed gray-background=yes
Полная программа восстановит effects.ppm из вложенных байтов с проверкой SHA256. Запустите php example.php в распакованной папке. gmPng сохраняет копию в PNG8; gmRgb читает три нормализованных компонента через getColorValue; gmReport сохраняет реальные результаты и проверки в metrics.json. make-effects-input.py содержит самостоятельный авторский алгоритм схемы без внешних изображений. Результаты PNG появятся после выполнения.
Полная программа сохраняет два PNG, проверяет изменение пикселей и сохранность исходного объекта. Это растровая стилизация, она не распознаёт предметы и не создаёт векторный рисунок. Упражнение: оставить фотографическую копию для каталога и сделать эскиз только для статьи. Решение: хранить $source отдельно, фильтровать clone и использовать разные имена файлов. На фотографии с травой или волосами линий будет больше, чем на нашей схеме.
Нужная основа: загрузка изображения и запись файла, объект и вызов метода, независимая копия объекта. Перед первым полным запуском все входные файлы уже есть в архиве как проверяемые байты; путь загрузки не зависит от чужой папки на сервере.
Дальше по задаче: эскиз, фактура и край, движение и случайные эффекты, деформация и соляризация, сохранение и проверка формата.
Отделить контуры от исходных цветов
Перед стилизацией полезно увидеть, какие границы заметит фильтр. edgeImage выделяет изменения между соседними пикселями. В нашей схеме ровные участки фона становятся почти чёрными, контуры банки и мелкая фактура — светлыми или цветными. Это карта границ, а не готовая обводка предмета с прозрачным фоном.


$source = new Gmagick("effects.ppm");
$edges = clone $source;
$edges->edgeImage(0);
$edges->setImageFormat("PNG"); $edges->writeImage("edges.png");Метод применяет свёртку: новое значение зависит от соседних пикселей в заданной окрестности. radius=0 просит библиотеку подобрать радиус, а не выключает эффект. На сохранённых PNG8 этого входа результаты 0 и 2 совпали; это наблюдение не превращает 2 в универсальный радиус по умолчанию. В полной программе пустой объект вызывает GmagickException, а после обработки проверяется чёрный фон в конкретной ровной точке 280,50.
<?php
declare(strict_types=1);
require __DIR__.'/gm99-effects-fixture.php';
gmRestore();
$source=new Gmagick(__DIR__.'/effects.ppm');$edges=clone $source;
$edges->edgeImage(0);
gmPng($source,'gm99-fx-edge-before.png');gmPng($edges,'gm99-fx-edge-after.png');
$background=gmRgb($edges,280,50);$errors=['empty_image'=>gmTry(fn()=>(new Gmagick())->edgeImage(1))];
gmReport('gm99-fx-edge',["gmagick.edgeimage"],["gm99-fx-edge-before.png", "gm99-fx-edge-after.png"],['pixels_changed'=>$edges->getImageSignature()!==$source->getImageSignature(),'dark_flat_background'=>$background===[0,0,0]],$errors??[],[],['gmagick.edgeimage'=>'applied']);
echo "edge: contours=visible flat-background=black empty-image=caught\n";
Ожидаемый результат
edge: contours=visible flat-background=black empty-image=caught
Полная программа восстановит effects.ppm из вложенных байтов с проверкой SHA256. Запустите php example.php в распакованной папке. gmPng сохраняет копию в PNG8; gmRgb читает три нормализованных компонента через getColorValue; gmReport сохраняет реальные результаты и проверки в metrics.json. make-effects-input.py содержит самостоятельный авторский алгоритм схемы без внешних изображений. Результаты PNG появятся после выполнения.
Ожидаемый результат — яркие контуры на тёмном фоне; исходник сохранён. Упражнение: получить только силуэт банки без линий этикетки. Одного edgeImage недостаточно: он реагирует на все границы. Решение задачи требует заранее выделить нужный объект или маску; автоматически считать внутренние линии ошибкой фильтра нельзя.
Дальше по задаче: эскиз, фактура и край, движение и случайные эффекты, деформация и соляризация, сохранение и проверка формата.
Сравнить цветной рельеф и явное обесцвечивание
Нужен рельефный вариант иллюстрации, будто границы получили свет и тень. Рядом показаны исходник, прямой embossImage(3,1) и вариант с предварительным удалением насыщенности. На нашей GraphicsMagick 1.3.42 прямой вызов даёт цветные оттенки — это существенное отличие от описания grayscale на PHP.net.



$source = new Gmagick("effects.ppm");
$relief = clone $source;
$relief->modulateImage(100, 0, 100);
$relief->embossImage(3, 1);
$relief->setImageFormat("PNG"); $relief->writeImage("gray-relief.png");embossImage использует гауссов оператор с radius и sigma. PHP.net советует radius больше sigma или 0 для автоматического выбора;3 и 1 следуют первому варианту. В коротком примере modulateImage(100,0,100) сохраняет яркость и оттенок, но задаёт насыщенность 0; это отдельный явный шаг, благодаря которому нужен именно серый рельеф. Полная программа оставляет и прямой цветной результат для сравнения. Проверяется реальная RGB-точка каждого варианта, а не только размер файла.
<?php
declare(strict_types=1);
require __DIR__.'/gm99-effects-fixture.php';
gmRestore();
$source=new Gmagick(__DIR__.'/effects.ppm');$color=clone $source;$color->embossImage(3,1);
$mono=clone $source;$mono->modulateImage(100,0,100);$mono->embossImage(3,1);
gmPng($source,'gm99-fx-emboss-before.png');gmPng($color,'gm99-fx-emboss-color.png');gmPng($mono,'gm99-fx-emboss-mono.png');
$colorPixel=gmRgb($color,280,50);$monoPixel=gmRgb($mono,280,50);
gmReport('gm99-fx-emboss',["gmagick.embossimage", "gmagick.modulateimage"],["gm99-fx-emboss-before.png", "gm99-fx-emboss-color.png", "gm99-fx-emboss-mono.png"],['effect_changes'=>$color->getImageSignature()!==$source->getImageSignature(),'color_not_gray_here'=>count(array_unique($colorPixel))>1,'mono_is_gray'=>count(array_unique($monoPixel))===1,'variants_differ'=>$color->getImageSignature()!==$mono->getImageSignature()],$errors??[],['color_rgb'=>$colorPixel,'mono_rgb'=>$monoPixel],['gmagick.embossimage'=>'applied','gmagick.modulateimage'=>'applied']);
echo "emboss: runtime=color explicit-desaturation=gray variants=different\n";
Ожидаемый результат
emboss: runtime=color explicit-desaturation=gray variants=different
Полная программа восстановит effects.ppm из вложенных байтов с проверкой SHA256. Запустите php example.php в распакованной папке. gmPng сохраняет копию в PNG8; gmRgb читает три нормализованных компонента через getColorValue; gmReport сохраняет реальные результаты и проверки в metrics.json. make-effects-input.py содержит самостоятельный авторский алгоритм схемы без внешних изображений. Результаты PNG появятся после выполнения.
Не объявляйте цветной результат серым только потому, что так написано в кратком контракте метода. Упражнение: для макета допустим цветной рельеф, но печатный вариант должен быть серым. Решение: делайте две независимые копии и обесцвечивайте только печатную. Светотень здесь вычисляется по границам растра; геометрия настоящего трёхмерного предмета не восстанавливается.
Дальше по задаче: эскиз, фактура и край, движение и случайные эффекты, деформация и соляризация, сохранение и проверка формата.
Укрупнить фактуру, сравнить два радиуса
Для иллюстрации на обложке мелкую фактуру можно превратить в более крупные пятна. Сравним oilPaintImage(2) и oilPaintImage(4) на одной схеме. Смотрите на рисунок этикетки, тонкие линии и маленькие листья: после большего радиуса они сильнее упрощаются.



$source = new Gmagick("effects.ppm");
$painted = clone $source;
$painted->oilPaintImage(4);
$painted->setImageFormat("PNG"); $painted->writeImage("painted.png");Официальная модель — замена пикселя наиболее частым цветом в круговой окрестности радиуса radius. Это локальный фильтр, он не рисует осмысленные мазки художника. Радиус 4 измеряется в пикселях входа, а не в процентах ширины. На нашей фактурной схеме число цветов не растёт, детали укрупняются; это проверяется вместе с изменением пиксельной подписи. Сильный радиус на маленьком логотипе может уничтожить важные детали.
<?php
declare(strict_types=1);
require __DIR__.'/gm99-effects-fixture.php';
gmRestore();
$source=new Gmagick(__DIR__.'/effects.ppm');$small=clone $source;$small->oilPaintImage(2);
$large=clone $source;$large->oilPaintImage(4);
gmPng($source,'gm99-fx-oil-before.png');gmPng($small,'gm99-fx-oil-radius2.png');gmPng($large,'gm99-fx-oil-radius4.png');
gmReport('gm99-fx-oil',["gmagick.oilpaintimage"],["gm99-fx-oil-before.png", "gm99-fx-oil-radius2.png", "gm99-fx-oil-radius4.png"],['radius2_changes'=>$small->getImageSignature()!==$source->getImageSignature(),'radii_differ'=>$small->getImageSignature()!==$large->getImageSignature(),'colors_not_increased'=>(new Gmagick(__DIR__."/gm99-fx-oil-radius4.png"))->getImageColors()<=$source->getImageColors()],$errors??[],[],['gmagick.oilpaintimage'=>'applied']);
echo "oil: radius2-and4=different source=kept small-detail=changed\n";
Ожидаемый результат
oil: radius2-and4=different source=kept small-detail=changed
Полная программа восстановит effects.ppm из вложенных байтов с проверкой SHA256. Запустите php example.php в распакованной папке. gmPng сохраняет копию в PNG8; gmRgb читает три нормализованных компонента через getColorValue; gmReport сохраняет реальные результаты и проверки в metrics.json. make-effects-input.py содержит самостоятельный авторский алгоритм схемы без внешних изображений. Результаты PNG появятся после выполнения.
PNG радиусов 2 и 4 должен заметно различаться, но ни один не заменяет исходник. Упражнение: подготовить миниатюру 120 px и крупный баннер. Решение: подбирать радиус после выбора конечного размера и сравнивать детали при реальном масштабе просмотра, а не переносить одно число на любые разрешения.
Дальше по задаче: эскиз, фактура и край, движение и случайные эффекты, деформация и соляризация, сохранение и проверка формата.
Добавить выпуклый или вдавленный край
Для иллюстрации раздела нужен объёмный край. raiseImage осветляет одни стороны прямоугольника и затемняет другие. У нас ширина вертикальной грани 8 px, высота горизонтальной 6 px; центральная часть с банкой должна остаться прежней. Сравните выпуклый и вдавленный варианты.



$source = new Gmagick("effects.ppm");
$raised = clone $source;
$raised->raiseImage(8, 6, 0, 0, true);
$raised->setImageFormat("PNG"); $raised->writeImage("raised.png");Пять аргументов: width, height, x, y и raise. true выбирает выпуклый эффект, false — вдавленный. Здесь width/height задают толщину краёв, а не новый размер холста. PHP.net называет x/y координатами; в проверенной сборке смещение 20,10 дало пиксельно тот же результат, что 0,0. Поэтому этот метод здесь не используем как выбор произвольной прямоугольной области. Центральный участок 100×80 вырезается из двух копий и сравнивается без изменения оригиналов.
<?php
declare(strict_types=1);
require __DIR__.'/gm99-effects-fixture.php';
gmRestore();
$source=new Gmagick(__DIR__.'/effects.ppm');$up=clone $source;$up->raiseImage(8,6,0,0,true);
$down=clone $source;$down->raiseImage(8,6,0,0,false);
$offset=clone $source;$offset->raiseImage(8,6,20,10,true);
$centerBefore=clone $source;$centerBefore->cropImage(100,80,110,60);$centerAfter=clone $up;$centerAfter->cropImage(100,80,110,60);
gmPng($source,'gm99-fx-raise-before.png');gmPng($up,'gm99-fx-raise-up.png');gmPng($down,'gm99-fx-raise-down.png');
gmReport('gm99-fx-raise',["gmagick.raiseimage"],["gm99-fx-raise-before.png", "gm99-fx-raise-up.png", "gm99-fx-raise-down.png"],['edges_changed'=>$up->getImageSignature()!==$source->getImageSignature(),'raise_lower_differ'=>$up->getImageSignature()!==$down->getImageSignature(),'center_kept'=>$centerBefore->getImageSignature()===$centerAfter->getImageSignature(),'offset_ignored_here'=>$up->getImageSignature()===$offset->getImageSignature()],$errors??[],[],['gmagick.raiseimage'=>'applied']);
echo "raise: up-and-down=different center=kept xy-offset=ignored-here\n";
Ожидаемый результат
raise: up-and-down=different center=kept xy-offset=ignored-here
Полная программа восстановит effects.ppm из вложенных байтов с проверкой SHA256. Запустите php example.php в распакованной папке. gmPng сохраняет копию в PNG8; gmRgb читает три нормализованных компонента через getColorValue; gmReport сохраняет реальные результаты и проверки в metrics.json. make-effects-input.py содержит самостоятельный авторский алгоритм схемы без внешних изображений. Результаты PNG появятся после выполнения.
Ожидается фаска внутри изображения 320×200, без расширения рамки. Упражнение: нужна настоящая новая рамка вокруг фотографии. Решение: перейти к borderImage/frameImage; raiseImage меняет существующие крайние пиксели. Большую толщину нельзя бездумно задавать для маленькой миниатюры: сначала ограничьте её размерами своего макета.
Дальше по задаче: эскиз, фактура и край, движение и случайные эффекты, деформация и соляризация, сохранение и проверка формата.
Сохранить три согласованных стиля каталога
Соберём три заранее выбранных стиля для одного каталога: угольный эскиз с фаской, графический рельеф и крупную живописную фактуру с фаской. Модель действий подписана под каждым результатом. Пользователь выбирает имя стиля; функция создаёт копию и выполняет конкретную последовательность методов.




$source = new Gmagick("effects.ppm");
$preview = clone $source;
$preview->charcoalImage(1, 1);
$preview->raiseImage(8, 6, 0, 0, true);
$preview->setImageFormat("PNG"); $preview->writeImage("catalog-sketch.png");Короткий пример показывает один маршрут. В полной программе функция catalogStyle принимает объект и строку. Условия if/elseif выбирают только три известные последовательности; return отдаёт готовую копию, неизвестное имя вызывает InvalidArgumentException. В ветке relief сначала выделяются контуры edgeImage, затем embossImage делает светотень уже по полученной карте. Порядок важен: каждый следующий вызов получает пиксели предыдущего шага.
<?php
declare(strict_types=1);
require __DIR__.'/gm99-effects-fixture.php';
gmRestore();
function catalogStyle(Gmagick $source,string $style):Gmagick {
$copy=clone $source;
if($style==='sketch'){$copy->charcoalImage(1,1);$copy->raiseImage(8,6,0,0,true);}
elseif($style==='relief'){$copy->edgeImage(0);$copy->embossImage(3,1);}
elseif($style==='paint'){$copy->oilPaintImage(4);$copy->raiseImage(8,6,0,0,true);}
else{throw new InvalidArgumentException('Choose sketch, relief or paint');}
return $copy;
}
$source=new Gmagick(__DIR__.'/effects.ppm');$before=$source->getImageSignature();
$sketch=catalogStyle($source,'sketch');$relief=catalogStyle($source,'relief');$paint=catalogStyle($source,'paint');
gmPng($source,'gm99-fx-style-presets-before.png');gmPng($sketch,'gm99-fx-style-presets-sketch.png');gmPng($relief,'gm99-fx-style-presets-relief.png');gmPng($paint,'gm99-fx-style-presets-paint.png');
$errors=['unknown_style'=>gmTry(fn()=>catalogStyle($source,'unknown'))];
gmReport('gm99-fx-style-presets',["gmagick.charcoalimage", "gmagick.edgeimage", "gmagick.embossimage", "gmagick.oilpaintimage", "gmagick.raiseimage"],["gm99-fx-style-presets-before.png", "gm99-fx-style-presets-sketch.png", "gm99-fx-style-presets-relief.png", "gm99-fx-style-presets-paint.png"],['three_distinct_styles'=>count(array_unique([$sketch->getImageSignature(),$relief->getImageSignature(),$paint->getImageSignature()]))===3,'all_change_source'=>!in_array($before,[$sketch->getImageSignature(),$relief->getImageSignature(),$paint->getImageSignature()],true),'source_kept'=>$source->getImageSignature()===$before],$errors??[],[],['gmagick.charcoalimage'=>'applied','gmagick.edgeimage'=>'applied','gmagick.embossimage'=>'applied','gmagick.oilpaintimage'=>'applied','gmagick.raiseimage'=>'applied']);
echo "presets: sketch relief paint outputs=3 source=kept unknown=rejected\n";
Ожидаемый результат
presets: sketch relief paint outputs=3 source=kept unknown=rejected
Полная программа восстановит effects.ppm из вложенных байтов с проверкой SHA256. Запустите php example.php в распакованной папке. gmPng сохраняет копию в PNG8; gmRgb читает три нормализованных компонента через getColorValue; gmReport сохраняет реальные результаты и проверки в metrics.json. make-effects-input.py содержит самостоятельный авторский алгоритм схемы без внешних изображений. Результаты PNG появятся после выполнения.
Три файла различаются, исходный объект остаётся прежним. Упражнение: клиент прислал имя несуществующего стиля. Решение: отклонить запрос своим исключением, а не вызывать произвольное имя метода из строки. Для серии изображений храните имя пресета и параметры рядом с результатом; эффект не должен неожиданно меняться после настройки другого товара.
Синтаксис продолжения: параметры и return функции, условия и ветвление, обработка исключений.
Дальше по задаче: эскиз, фактура и край, движение и случайные эффекты, деформация и соляризация, сохранение и проверка формата.
Из реальной задачи разработчика
Creation of edge detection based image in PHP. Нужно превратить загруженное изображение в простые линии по границам и сохранить результат из PHP. Наше решение сначала сравнивает настоящий edgeImage и charcoalImage на одном входе. Карта границ не обещает внешний силуэт без внутренней фактуры; для готового стиля функция отдельно выбирает угольный эскиз или сочетание edge→emboss. Ответы не копируются, а синтаксис Gmagick проверяется по его официальным источникам.
Функции и методы этой темы
Откройте карточку, чтобы увидеть договор функции, примеры, ограничения и связанные инструменты.
Gmagick::charcoalimageУгольный эскиз с явными radius и sigma
PECL gmagick >= Unknown · gmagick
Gmagick::charcoalimage(float $radius, float $sigma): GmagickИмитирует угольный рисунок. Обязательные float radius и sigma задаются в пикселях: радиус гауссовой окрестности не включает центральный пиксель, sigma задаёт стандартное отклонение. По официальному контракту возвращает Gmagick с эффектом; в наших программах меняется копия-получатель. В текущем исходнике расширения вызов MagickCharcoalImage получает sigma,radius вместо порядка PHP radius,sigma. Примеры используют 1,1 и объясняют это явно; для неравных значений нельзя молча применять перестановку ко всем версиям. Результат — растр со штрихами по границам и фактуре, не распознавание контура предмета и не векторизация.
Gmagick::charcoalimage(float $radius, float $sigma): Gmagick| Параметр | Тип и обязательность | Смысл |
|---|---|---|
| $radius | float; обязательный | Радиус гауссовой окрестности в пикселях, без центрального пикселя. |
| $sigma | float; обязательный | Стандартное отклонение в пикселях; см. явно отмеченный порядок передачи в C. |
Официальная ошибка метода — GmagickException. Ошибка PHP-типа может быть TypeError; нарушение прикладного диапазона в наших функциях намеренно даёт InvalidArgumentException до библиотечного вызова. Эти прикладные ограничения не объявляются проверками самого расширения.
Два применения: Получить угольный эскиз упаковки; Сохранить три согласованных стиля каталога.
Отметка доступности PHP.net: PECL gmagick >= Unknown. Unknown не задаёт известную минимальную версию. Наше окружение: PHP 8.3.6, Gmagick 2.0.6RC1, GraphicsMagick 1.3.42 Q16; фактические границы указаны выше.
Gmagick::edgeimageПоказать границы свёрточным фильтром
PECL gmagick >= Unknown · gmagick
Gmagick::edgeimage(float $radius): GmagickУсиливает границы внутри изображения свёрточным фильтром заданного float radius. Ноль включает автоматический выбор. Возвращает изменённый Gmagick. На ровном фоне нашей схемы получается чёрный участок, на границах — светлые и цветные линии; это не операция выделения только внешнего силуэта. Совпадение radius 0 и 2 относится к проверенному входу и сборке, не является обещанием общего значения по умолчанию. Пустой объект в примере приводит к GmagickException.
Gmagick::edgeimage(float $radius): Gmagick| Параметр | Тип и обязательность | Смысл |
|---|---|---|
| $radius | float; обязательный | Радиус свёртки;0 просит автоматический выбор. |
Официальная ошибка метода — GmagickException. Ошибка PHP-типа может быть TypeError; нарушение прикладного диапазона в наших функциях намеренно даёт InvalidArgumentException до библиотечного вызова. Эти прикладные ограничения не объявляются проверками самого расширения.
Два применения: Отделить контуры от исходных цветов; Сохранить три согласованных стиля каталога.
Отметка доступности PHP.net: PECL gmagick >= Unknown. Unknown не задаёт известную минимальную версию. Наше окружение: PHP 8.3.6, Gmagick 2.0.6RC1, GraphicsMagick 1.3.42 Q16; фактические границы указаны выше.
Gmagick::embossimageПолучить рельеф и проверить требование серого цвета
PECL gmagick >= Unknown · gmagick
Gmagick::embossimage(float $radius, float $sigma): GmagickОфициальное описание обещает серое изображение с трёхмерным эффектом: свёртку гауссовым оператором с radius и sigma. Оба аргумента float обязательны; рекомендуется radius больше sigma, либо radius 0 для автоматического выбора. Возвращает Gmagick с рельефом. В нашем Gmagick 2.0.6RC1 / GraphicsMagick 1.3.42 на цветном входе реально сохраняются цветные оттенки. Поэтому урок показывает прямой результат и отдельный маршрут с modulateImage(100,0,100) до embossImage. Не следует объявлять произвольный результат монохромным без проверки.
Gmagick::embossimage(float $radius, float $sigma): Gmagick| Параметр | Тип и обязательность | Смысл |
|---|---|---|
| $radius | float; обязательный | Радиус эффекта; обычно больше sigma либо 0 для автоподбора. |
| $sigma | float; обязательный | Стандартное отклонение гауссова оператора. |
Официальная ошибка метода — GmagickException. Ошибка PHP-типа может быть TypeError; нарушение прикладного диапазона в наших функциях намеренно даёт InvalidArgumentException до библиотечного вызова. Эти прикладные ограничения не объявляются проверками самого расширения.
Два применения: Сравнить цветной рельеф и явное обесцвечивание; Сохранить три согласованных стиля каталога.
Отметка доступности PHP.net: PECL gmagick >= Unknown. Unknown не задаёт известную минимальную версию. Наше окружение: PHP 8.3.6, Gmagick 2.0.6RC1, GraphicsMagick 1.3.42 Q16; фактические границы указаны выше.
Gmagick::oilpaintimageУкрупнить локальные пятна цвета
PECL gmagick >= Unknown · gmagick
Gmagick::oilpaintimage(float $radius): GmagickИмитирует масляную живопись. Единственный обязательный float radius задаёт круговую окрестность; по официальному описанию пиксель заменяется самым частым цветом этой области. Возвращает Gmagick при успехе. На фактуре этот локальный фильтр укрупняет пятна и может уничтожать тонкие детали. Радиус измеряется относительно пикселей обрабатываемого растра, поэтому макеты разного размера требуют отдельного выбора. Число цветов в примере читается из заново открытого сохранённого PNG, а не из возможной кешированной статистики изменённого объекта.
Gmagick::oilpaintimage(float $radius): Gmagick| Параметр | Тип и обязательность | Смысл |
|---|---|---|
| $radius | float; обязательный | Радиус круговой окрестности выбора частого цвета. |
Официальная ошибка метода — GmagickException. Ошибка PHP-типа может быть TypeError; нарушение прикладного диапазона в наших функциях намеренно даёт InvalidArgumentException до библиотечного вызова. Эти прикладные ограничения не объявляются проверками самого расширения.
Два применения: Укрупнить фактуру, сравнить два радиуса; Сохранить три согласованных стиля каталога.
Отметка доступности PHP.net: PECL gmagick >= Unknown. Unknown не задаёт известную минимальную версию. Наше окружение: PHP 8.3.6, Gmagick 2.0.6RC1, GraphicsMagick 1.3.42 Q16; фактические границы указаны выше.
Gmagick::raiseimageОсветлить и затемнить существующий край
PECL gmagick >= Unknown · gmagick
Gmagick::raiseimage(int $width, int $height, int $x, int $y, bool $raise): GmagickСоздаёт подобие объёмной кнопки осветлением и затемнением краёв текущего изображения. Пять обязательных аргументов: int width и height задают вертикальную и горизонтальную толщину края, int x и y документированы как координаты, bool raise выбирает выпуклый(true) или вдавленный(false) эффект. Возвращается Gmagick. На проверенной 1.3.42 x/y не изменили результат: варианты 0,0 и 20,10 пиксельно совпали. Поэтому произвольную область этим API здесь не выбираем. В отличие от borderImage/frameImage, фаска рисуется в существующих крайних пикселях, размер холста не увеличивается.
Gmagick::raiseimage(int $width, int $height, int $x, int $y, bool $raise): Gmagick| Параметр | Тип и обязательность | Смысл |
|---|---|---|
| $width | int; обязательный | Толщина вертикального края эффекта. |
| $height | int; обязательный | Толщина горизонтального края эффекта. |
| $x | int; обязательный | Документированная координатаX; в текущем сравнении смещение не повлияло. |
| $y | int; обязательный | Документированная координатаY; в текущем сравнении смещение не повлияло. |
| $raise | bool; обязательный | true — выпуклый, false — вдавленный эффект. |
Официальная ошибка метода — GmagickException. Ошибка PHP-типа может быть TypeError; нарушение прикладного диапазона в наших функциях намеренно даёт InvalidArgumentException до библиотечного вызова. Эти прикладные ограничения не объявляются проверками самого расширения.
Два применения: Добавить выпуклый или вдавленный край; Сохранить три согласованных стиля каталога.
Отметка доступности PHP.net: PECL gmagick >= Unknown. Unknown не задаёт известную минимальную версию. Наше окружение: PHP 8.3.6, Gmagick 2.0.6RC1, GraphicsMagick 1.3.42 Q16; фактические границы указаны выше.
Код и руководство с собой
Скачайте самостоятельные примеры с исходными данными, инструкциями и ожидаемыми результатами. Примеры HTTP и фрагменты для проекта помечены отдельно: им нужно указанное окружение.
Код не исполняется на сайте. Скачайте нужный пример и запускайте его в своём локальном окружении.
Материалы сверены 2026-10-12. Примеры и объяснения написаны для этого руководства; источники и обсуждения доступны в каждой главе.


