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

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

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

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

Глава 410 · После первых изображений Gmagick

Gmagick: фон, рамка и повторяемое оформление карточки

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

Передать сохранённый цвет фона в поворот

Все наклонённые карточки магазина должны иметь одинаковый фон. Цвет удобно сохранить как настройку изображения и затем передать действию, которое его использует. Показываем оба состояния: сразу после установки рисунок прежний; после поворота выбранный фон виден в новых углах.

Сохранение настройки фона не закрашивает исходный рисунок
Сохранение настройки фона не закрашивает исходный рисунок — 320 × 200 px.
Полученный GmagickPixel передан в rotateImage: углы получили выбранный фон
Полученный GmagickPixel передан в rotateImage: углы получили выбранный фон — 361 × 276 px.
<?php
$image = new Gmagick(__DIR__ . '/product.ppm');
$image->setImageBackgroundColor('#e5a74a');
$background = $image->getImageBackgroundColor();
$image->rotateImage($background, 15.0);
$image->setImageFormat('PNG');
$image->writeImage(__DIR__ . '/brand-background.png');

setImageBackgroundColor сохраняет цвет. getImageBackgroundColor() читает его и возвращает GmagickPixel — отдельный объект, представляющий цвет. Переменная $background хранит этот объект, а rotateImage принимает его первым аргументом. Это не значение углового пикселя исходника. В полной программе getColor(true) получает массив r/g/b для проверки выбранных 229,167,74; массив нужен диагностике, поворот использует сам GmagickPixel.

Передать сохранённый цвет фона в поворотСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick(__DIR__.'/product.ppm');
$result = $image->setImageBackgroundColor('#e5a74a');
$background = $image->getImageBackgroundColor();
$color = $background->getColor(true);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm97-background-setting.png');
$image->rotateImage($background,15.0);
$errors = ['color'=>gmTry(fn()=>(new Gmagick(__DIR__.'/product.ppm'))->setImageBackgroundColor('not-a-color'))];
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm97-background-rotated.png');

gmReport('gm97-background-rotate',["__construct", "setimagebackgroundcolor", "getimagebackgroundcolor", "getcolor", "setimageformat", "setimagedepth", "writeimage", "rotateimage"],["gm97-background-setting.png", "gm97-background-rotated.png"],
    ['same_object'=>$result===$image,'pixel_object'=>$background instanceof GmagickPixel,'color_rejected'=>$errors['color']['class']==='GmagickPixelException','geometry_background_setting'=>gmInspect('gm97-background-setting.png')['width']===320&&gmInspect('gm97-background-setting.png')['height']===200,'geometry_background_rotated'=>gmInspect('gm97-background-rotated.png')['width']===361&&gmInspect('gm97-background-rotated.png')['height']===276],
    $errors ?? [], ['background_color'=>$color]);
echo "gm97-background-setting.png 320x200 gm97-background-rotated.png 361x276\n";
Ожидаемый результат
gm97-background-setting.png 320x200 gm97-background-rotated.png 361x276

Скачайте все файлы примера в одну папку. php example.php восстановит собственные PPM из .b64, сохранит PNG и metrics.json. Восстановление и проверки вынесены в неизменённый gm-fixture.php; преобразования видны непосредственно в example.php. Требуется расширение Gmagick. Проверенный стенд: PHP 8.3.6 / Gmagick 2.0.6RC1 / GraphicsMagick 1.3.42 Q16.

Вывод успешного запуска
gm97-background-setting.png 320x200 gm97-background-rotated.png 361x276

Строка с неизвестным названием цвета даёт GmagickPixelException ещё до полезного преобразования. Свойство фона не является командой заливки: чтобы поменять существующие пиксели, нужна соответствующая операция. Здесь используются непрозрачные PNG и явный RGB; результат не заявляется проверкой прозрачности для произвольного JPEG или альфа-канала.

Применить сохранённый цвет плоской рамки

Каталогу нужны стабильные поля вокруг фотографии: по 12 пикселей с боков и по 8 сверху и снизу. Сохранённый цвет рамки можно переиспользовать, а светлую альтернативу сделать явным строковым аргументом. Оба результата показывают, как толщина каждой стороны влияет на итоговые размеры.

Исходная карточка: 320 × 200 пикселей
Исходная карточка: 320 × 200 пикселей — 320 × 200 px.
По 12 пикселей слева/справа и по 8 сверху/снизу: 344 × 216
По 12 пикселей слева/справа и по 8 сверху/снизу: 344 × 216 — 344 × 216 px.
Белая альтернатива: по 6 и 10 пикселей, всего 332 × 220
Белая альтернатива: по 6 и 10 пикселей, всего 332 × 220 — 332 × 220 px.
<?php
$image = new Gmagick(__DIR__ . '/product.ppm');
$image->setImageBorderColor(new GmagickPixel('#244f65'));
$border = $image->getImageBorderColor();
$image->borderImage($border, 12, 8);
$image->setImageFormat('PNG');
$image->writeImage(__DIR__ . '/bordered.png');

new GmagickPixel создаёт объект цвета, который передаётся setter. Getter возвращает GmagickPixel, затем borderImage добавляет настоящий растр рамки. 12 означает толщину каждой из двух вертикальных сторон, 8 — каждой горизонтальной. Поэтому 320+12+12=344, 200+8+8=216. Вызов setImageBorderColor сам по себе не создаёт рамку; её делает следующая операция.

Применить сохранённый цвет плоской рамкиСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick(__DIR__.'/product.ppm');
$result = $image->setImageBorderColor(new GmagickPixel('#244f65'));
$border = $image->getImageBorderColor();
$color = $border->getColor(true);
$image->borderImage($border,12,8);
$light = new Gmagick(__DIR__.'/product.ppm');
$light->borderImage('#ffffff',6,10);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm97-border-blue.png');
$light->setImageFormat('PNG');
$light->setImageDepth(8);
$light->writeImage(__DIR__.'/gm97-border-light.png');

gmReport('gm97-border-style',["__construct", "setimagebordercolor", "getimagebordercolor", "getcolor", "borderimage", "setimageformat", "setimagedepth", "writeimage"],["gm97-border-blue.png", "gm97-border-light.png"],
    ['same_object'=>$result===$image,'pixel_object'=>$border instanceof GmagickPixel,'geometry_border_blue'=>gmInspect('gm97-border-blue.png')['width']===344&&gmInspect('gm97-border-blue.png')['height']===216,'geometry_border_light'=>gmInspect('gm97-border-light.png')['width']===332&&gmInspect('gm97-border-light.png')['height']===220],
    $errors ?? [], ['border_color'=>$color]);
echo "gm97-border-blue.png 344x216 gm97-border-light.png 332x220\n";
Ожидаемый результат
gm97-border-blue.png 344x216 gm97-border-light.png 332x220

Скачайте все файлы примера в одну папку. php example.php восстановит собственные PPM из .b64, сохранит PNG и metrics.json. Восстановление и проверки вынесены в неизменённый gm-fixture.php; преобразования видны непосредственно в example.php. Требуется расширение Gmagick. Проверенный стенд: PHP 8.3.6 / Gmagick 2.0.6RC1 / GraphicsMagick 1.3.42 Q16.

Вывод успешного запуска
gm97-border-blue.png 344x216 gm97-border-light.png 332x220

Если рамка нужна лишь на текущей веб-странице, CSS может оставить исходный файл без дополнительных пикселей. Если рамка должна попасть в скачиваемое изображение, она должна быть частью растра. Getter читает настройку, а не ищет цвет уже нарисованного края стороннего снимка.

Для галерейного вида требуется не однотонное поле, а светлая и тёмная фаски. frameImage создаёт такую имитацию объёма. На увеличенном холсте видны внутренний и внешний переходы; толщина рамки и толщина фасок — разные параметры.

Исходная карточка: 320 × 200 пикселей
Исходная карточка: 320 × 200 пикселей — 320 × 200 px.
Рамка 16 × 12 с внутренней фаской 2 и внешней 4: 352 × 224
Рамка 16 × 12 с внутренней фаской 2 и внешней 4: 352 × 224 — 352 × 224 px.
<?php
$image = new Gmagick(__DIR__ . '/product.ppm');
$color = new GmagickPixel('#244f65');
$image->frameImage($color, 16, 12, 2, 4);
$image->setImageFormat('PNG');
$image->writeImage(__DIR__ . '/framed.png');

После объекта цвета идут 16 пикселей вертикальной стороны, 12 горизонтальной, 2 внутренней фаски и 4 внешней. Получается 352×224. Метод строит свет и тень на основе цвета, поэтому пиксели фасок отличаются от #244f65. Возвращённый Gmagick — тот же объект с изменённым изображением, а не имя готового файла.

Оформить объёмную рамку с двумя фаскамиСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick(__DIR__.'/product.ppm');
$result = $image->frameImage(new GmagickPixel('#244f65'),16,12,2,4);
$errors = ['bevel'=>gmTry(fn()=>(new Gmagick(__DIR__.'/product.ppm'))->frameImage('#244f65',2,2,4,4))];
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm97-frame.png');

gmReport('gm97-frame-gallery',["__construct", "frameimage", "setimageformat", "setimagedepth", "writeimage"],["gm97-frame.png"],
    ['same_object'=>$result===$image,'bevel_rejected'=>$errors['bevel']['class']==='GmagickException','geometry_frame'=>gmInspect('gm97-frame.png')['width']===352&&gmInspect('gm97-frame.png')['height']===224],
    $errors ?? [], []);
echo "gm97-frame.png 352x224\n";
Ожидаемый результат
gm97-frame.png 352x224

Скачайте все файлы примера в одну папку. php example.php восстановит собственные PPM из .b64, сохранит PNG и metrics.json. Восстановление и проверки вынесены в неизменённый gm-fixture.php; преобразования видны непосредственно в example.php. Требуется расширение Gmagick. Проверенный стенд: PHP 8.3.6 / Gmagick 2.0.6RC1 / GraphicsMagick 1.3.42 Q16.

Вывод успешного запуска
gm97-frame.png 352x224

Фаскам требуется место. Проверенный ошибочный вызов с рамкой 2×2 и фасками 4 и 4 дал GmagickException. Следующий пример делает правило явным до вызова библиотеки. Для обычного однотонного поля без эффекта объёма проще borderImage.

Собрать стиль карточки в возвращающую копию функцию

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

Исходная карточка: 320 × 200 пикселей
Исходная карточка: 320 × 200 пикселей — 320 × 200 px.
Наклон X + синяя рамка 12 пикселей с фасками: единая функция стиля
Наклон X + синяя рамка 12 пикселей с фасками: единая функция стиля — 365 × 224 px.
<?php
$image = new Gmagick(__DIR__ . '/product.ppm');
$card = clone $image;
$card->shearImage('#ffffff', 12.0, 0.0);
$card->frameImage('#244f65', 12, 12, 2, 4);
$card->setImageFormat('PNG');
$card->writeImage(__DIR__ . '/styled.png');

Сначала наклон создаёт 341×200, затем рамка прибавляет по 12 с каждой стороны: 365×224. В полной функции параметры background и border становятся GmagickPixel. Фон устанавливается перед наклоном; цвет рамки — после shearImage, непосредственно перед frameImage. Это существенно: в проверенной сборке наклон заменил прежнюю настройку рамки своим цветом фона. Поэтому настройка, нужная следующему действию, задаётся уже на результате наклона. Проверка padding<6 сравнивает толщину с суммой фасок 2+4. return возвращает копию в $card, исходный $image остаётся 320×200.

Собрать стиль карточки в возвращающую копию функциюСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick(__DIR__.'/product.ppm');
function styledCatalogCard(Gmagick $source,string $background,string $border,int $padding): Gmagick {
    if ($padding<6) { throw new InvalidArgumentException('Padding must allow both bevels'); }
    $card = clone $source;
    $card->setImageBackgroundColor(new GmagickPixel($background));
    $card->shearImage($card->getImageBackgroundColor(),12.0,0.0);
    $card->setImageBorderColor(new GmagickPixel($border));
    $card->frameImage($card->getImageBorderColor(),$padding,$padding,2,4);
    return $card;
}
$card = styledCatalogCard($image,'#ffffff','#244f65',12);
$errors = ['padding'=>gmTry(fn()=>styledCatalogCard($image,'#ffffff','#244f65',2))];
$card->setImageFormat('PNG');
$card->setImageDepth(8);
$card->writeImage(__DIR__.'/gm97-styled-card.png');
// Проверяем сохранённую плоскую часть рамки, а не только настройку объекта.
$frameSample = new Gmagick(__DIR__.'/gm97-styled-card.png');
$frameSample->cropImage(1,1,182,8);
$framePixel = $frameSample->getImageHistogram()[0];
$frameRgb = $framePixel->getColor(true);

gmReport('gm97-style-function',["__construct", "setimagebackgroundcolor", "shearimage", "getimagebackgroundcolor", "setimagebordercolor", "frameimage", "getimagebordercolor", "setimageformat", "setimagedepth", "writeimage", "cropimage", "getimagehistogram", "getcolor"],["gm97-styled-card.png"],
    ['source_unchanged'=>$image->getImageWidth()===320&&$image->getImageHeight()===200,'new_object'=>$card!==$image,'padding_rejected'=>$errors['padding']['class']==='InvalidArgumentException','saved_frame_rgb'=>$frameRgb['r']===36&&$frameRgb['g']===79&&$frameRgb['b']===101,'geometry_styled_card'=>gmInspect('gm97-styled-card.png')['width']===365&&gmInspect('gm97-styled-card.png')['height']===224],
    $errors ?? [], ['frame_sample'=>['x'=>182,'y'=>8,'rgb'=>$frameRgb]]);
echo "gm97-styled-card.png 365x224\n";
Ожидаемый результат
gm97-styled-card.png 365x224

Скачайте все файлы примера в одну папку. php example.php восстановит собственные PPM из .b64, сохранит PNG и metrics.json. Восстановление и проверки вынесены в неизменённый gm-fixture.php; преобразования видны непосредственно в example.php. Требуется расширение Gmagick. Проверенный стенд: PHP 8.3.6 / Gmagick 2.0.6RC1 / GraphicsMagick 1.3.42 Q16.

Вывод успешного запуска
gm97-styled-card.png 365x224

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

Подготовить вариант узора, убрать полосы и добавить поля

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

Исходная карточка: 320 × 200 пикселей
Исходная карточка: 320 × 200 пикселей — 320 × 200 px.
Порядок: roll → chop 288 × 180 → scale 160 × 100 → border 176 × 112
Порядок: roll → chop 288 × 180 → scale 160 × 100 → border 176 × 112 — 176 × 112 px.
<?php
$image = new Gmagick(__DIR__ . '/product.ppm');
$image->rollImage(48, -20);
$image->chopImage(32, 20, 48, 20);
$image->scaleImage(160, 0);
$image->borderImage('#244f65', 8, 6);
$image->setImageFormat('PNG');
$image->writeImage(__DIR__ . '/catalog-strip.png');

roll сохраняет 320×200, chop уменьшает до 288×180, scale даёт 160×100, border добавляет 16 по ширине и 12 по высоте: 176×112. В полном примере цвет хранится через setImageBorderColor и читается getImageBorderColor. Все эффекты вызываются непосредственно в программе; помощник только восстанавливает вход и записывает проверку результата.

Подготовить вариант узора, убрать полосы и добавить поляСамостоятельный пример
<?php
declare(strict_types=1);
require __DIR__ . '/gm-fixture.php';
gmRestore();
$image = new Gmagick(__DIR__.'/product.ppm');
$image->rollImage(48,-20);
$image->chopImage(32,20,48,20);
$image->scaleImage(160,0);
$image->setImageBorderColor('#244f65');
$border = $image->getImageBorderColor();
$image->borderImage($border,8,6);
$image->setImageFormat('PNG');
$image->setImageDepth(8);
$image->writeImage(__DIR__.'/gm97-layout.png');

gmReport('gm97-catalog-layout',["__construct", "rollimage", "chopimage", "scaleimage", "setimagebordercolor", "getimagebordercolor", "borderimage", "setimageformat", "setimagedepth", "writeimage"],["gm97-layout.png"],
    ['border_object'=>$border instanceof GmagickPixel,'geometry_layout'=>gmInspect('gm97-layout.png')['width']===176&&gmInspect('gm97-layout.png')['height']===112],
    $errors ?? [], []);
echo "gm97-layout.png 176x112\n";
Ожидаемый результат
gm97-layout.png 176x112

Скачайте все файлы примера в одну папку. php example.php восстановит собственные PPM из .b64, сохранит PNG и metrics.json. Восстановление и проверки вынесены в неизменённый gm-fixture.php; преобразования видны непосредственно в example.php. Требуется расширение Gmagick. Проверенный стенд: PHP 8.3.6 / Gmagick 2.0.6RC1 / GraphicsMagick 1.3.42 Q16.

Вывод успешного запуска
gm97-layout.png 176x112

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

Упражнение: добавить к 160×100 по 4 пикселя со всех сторон. Ответ: borderImage($color,4,4) и размер 168×108. Почему setImageBackgroundColor не сделал рисунок однотонным? Ответ: он сохранил свойство, а не залил существующие пиксели. Почему getImageBorderColor не определит цвет чужого края? Ответ: он читает настройку, не измеряет растр. Следующий шаг — выбор формата и проверенное сохранение.

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

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

Trim image background but leave padding in Graphicsmagick: Нужно удалить лишний фон и затем оставить заданное поле, сохранив выбранный цвет вместо жёстко заданного белого. Разделяем чтение сохранённой настройки и определение цвета пикселя чужого файла: getImageBorderColor не выбирает цвет края автоматически. В своём каталоге цвет известен заранее, поэтому сохраняем его setter, читаем getter и явно передаём в borderImage. Толщина добавляется с обеих сторон; случайное поле во входном файле не считается свойством border color.

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

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

Gmagick::borderimageДобавить плоское цветное поле

PECL gmagick >= Unknown · gmagick

Gmagick::borderimage(GmagickPixel $color, int $width, int $height): Gmagick

Добавить плоское цветное поле. color — GmagickPixel либо строка цвета; строковый вариант прямо предусмотрен описанием PHP.net, хотя краткая сигнатура показывает GmagickPixel. width — толщина слева и справа, height — сверху и снизу. При входе W×H размер станет (W+2×width)×(H+2×height): 320×200 с 12 и 8 даёт 344×216. Вызов добавляет пиксели к растру; это не CSS-рамка и не линия, нарисованная поверх существующих пикселей. Переданный цвет используется явно; для сохранённой настройки передайте getImageBorderColor().

Gmagick::borderimage(GmagickPixel $color, int $width, int $height): Gmagick
ПараметрТип и обязательностьЗначение
colorGmagickPixel; обязательныйОбъект GmagickPixel или строка цвета согласно описанию PHP.net.
widthint; обязательныйТолщина поля на каждой вертикальной стороне.
heightint; обязательныйТолщина поля на каждой горизонтальной стороне.

Результат: Gmagick с результатом операции. Проверенные преобразования меняют текущий объект и возвращают его же; для независимого варианта сначала создайте clone.

Ошибка по официальному контракту: GmagickException. Ошибочный PHP-тип может дать TypeError до обработки изображения; при разборе некорректного цвета возможен GmagickPixelException. Не печатайте успешный результат после перехвата ошибки, если файл не получен. Требуется PECL Gmagick; PHP.net помечает нижнюю границу версии как Unknown, поэтому конкретную минимальную версию здесь не придумываем.

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

Связанный метод: Gmagick::frameimage.

Gmagick::frameimageДобавить рамку с внутренней и внешней фасками

PECL gmagick >= Unknown · gmagick

Gmagick::frameimage(GmagickPixel $color, int $width, int $height, int $inner_bevel, int $outer_bevel): Gmagick

Добавить рамку с внутренней и внешней фасками. width и height задают толщину вертикальных и горизонтальных сторон; inner_bevel — ширину внутренней фаски, outer_bevel — внешней. Фаски имитируют свет и тень, поэтому вся рамка не обязана иметь один RGB. Сигнатура PHP.net показывает GmagickPixel, а пояснение color также упоминает float; проверенный runtime принимает GmagickPixel и строку цвета, произвольные числа здесь не обещаются. Вариант (16,12,2,4) дал 352×224. Слишком узкая рамка (2,2,4,4) вызвала GmagickException; функция стиля заранее проверяет место для суммы фасок.

Gmagick::frameimage(GmagickPixel $color, int $width, int $height, int $inner_bevel, int $outer_bevel): Gmagick
ПараметрТип и обязательностьЗначение
colorGmagickPixel; обязательныйЦвет рамки; расхождение формулировки float и сигнатуры пояснено ниже.
widthint; обязательныйТолщина вертикальных сторон.
heightint; обязательныйТолщина горизонтальных сторон.
inner_bevelint; обязательныйШирина внутренней фаски.
outer_bevelint; обязательныйШирина внешней фаски.

Результат: Gmagick с результатом операции. Проверенные преобразования меняют текущий объект и возвращают его же; для независимого варианта сначала создайте clone.

Ошибка по официальному контракту: GmagickException. Ошибочный PHP-тип может дать TypeError до обработки изображения; при разборе некорректного цвета возможен GmagickPixelException. Не печатайте успешный результат после перехвата ошибки, если файл не получен. Требуется PECL Gmagick; PHP.net помечает нижнюю границу версии как Unknown, поэтому конкретную минимальную версию здесь не придумываем.

Два разных применения: Оформить объёмную рамку с двумя фасками; Собрать стиль карточки в возвращающую копию функцию.

Связанный метод: Gmagick::borderimage.

Gmagick::getimagebackgroundcolorПрочитать настройку фона как объект цвета

PECL gmagick >= Unknown · gmagick

Gmagick::getimagebackgroundcolor(): GmagickPixel

Прочитать настройку фона как объект цвета. Аргументов нет. Возвращается GmagickPixel, настроенный на цвет фона изображения. Это объект цвета, который можно передать rotateImage или shearImage; строку или массив RGB при необходимости получают методом самого GmagickPixel. Значение свойства не является измерением углового пикселя и не вычисляет преобладающий цвет фотографии. В примере явно заданный #e5a74a прочитан как RGB 229,167,74 и использован в повороте.

Gmagick::getimagebackgroundcolor(): GmagickPixel

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

Результат: GmagickPixel с сохранённым цветом.

Ошибка по официальному контракту: GmagickException. Ошибочный PHP-тип может дать TypeError до обработки изображения; при разборе некорректного цвета возможен GmagickPixelException. Не печатайте успешный результат после перехвата ошибки, если файл не получен. Требуется PECL Gmagick; PHP.net помечает нижнюю границу версии как Unknown, поэтому конкретную минимальную версию здесь не придумываем.

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

Связанный метод: Gmagick::setimagebackgroundcolor.

Gmagick::getimagebordercolorПолучить сохранённый цвет рамки

PECL gmagick >= Unknown · gmagick

Gmagick::getimagebordercolor(): GmagickPixel

Получить сохранённый цвет рамки. Аргументов нет. Результат — GmagickPixel с цветом рамки текущего изображения. Это чтение свойства, а не поиск цвета внешней полосы среди пикселей. На нашей карточке после setImageBorderColor(#244f65) прочитан RGB 36,79,101. Передача этого объекта в borderImage или frameImage связывает настройку с действием. Для восстановления цвета уже существующего поля входного файла потребовалось бы отдельно исследовать его пиксели.

Gmagick::getimagebordercolor(): GmagickPixel

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

Результат: GmagickPixel с сохранённым цветом.

Ошибка по официальному контракту: GmagickException. Ошибочный PHP-тип может дать TypeError до обработки изображения; при разборе некорректного цвета возможен GmagickPixelException. Не печатайте успешный результат после перехвата ошибки, если файл не получен. Требуется PECL Gmagick; PHP.net помечает нижнюю границу версии как Unknown, поэтому конкретную минимальную версию здесь не придумываем.

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

Связанный метод: Gmagick::setimagebordercolor.

Gmagick::setimagebackgroundcolorСохранить цвет фона изображения

PECL gmagick >= Unknown · gmagick

Gmagick::setimagebackgroundcolor(GmagickPixel $color): Gmagick

Сохранить цвет фона изображения. color — объект GmagickPixel по краткой сигнатуре PHP.net; строка цвета также поддержана проверенной реализацией. Метод меняет свойство текущего изображения и возвращает Gmagick. Он не перекрашивает существующий растр. В уроке рисунок остаётся прежним до rotateImage, которому явно передаётся сохранённый цвет. Неверная строка цвета дала GmagickPixelException; общая страница PHP.net также указывает GmagickException при ошибке операции. Настройка цвета и выбор действия, использующего этот цвет, — два разных шага.

Gmagick::setimagebackgroundcolor(GmagickPixel $color): Gmagick
ПараметрТип и обязательностьЗначение
colorGmagickPixel; обязательныйНастройка фона; GmagickPixel либо проверенная строка цвета.

Результат: Gmagick с результатом операции. Проверенные преобразования меняют текущий объект и возвращают его же; для независимого варианта сначала создайте clone.

Ошибка по официальному контракту: GmagickException. Ошибочный PHP-тип может дать TypeError до обработки изображения; при разборе некорректного цвета возможен GmagickPixelException. Не печатайте успешный результат после перехвата ошибки, если файл не получен. Требуется PECL Gmagick; PHP.net помечает нижнюю границу версии как Unknown, поэтому конкретную минимальную версию здесь не придумываем.

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

Связанный метод: Gmagick::getimagebackgroundcolor.

Gmagick::setimagebordercolorСохранить настройку цвета рамки

PECL gmagick >= Unknown · gmagick

Gmagick::setimagebordercolor(GmagickPixel $color): Gmagick

Сохранить настройку цвета рамки. color — GmagickPixel в краткой сигнатуре; фактически проверены и объект, и строка цвета. Возвращается Gmagick. Этот вызов сохраняет свойство, но не добавляет поля. Затем getImageBorderColor() передаёт выбранный цвет в borderImage или frameImage. Так функция хранит связанные настройки на своей копии изображения, а исходный объект остаётся доступен вызывающему коду. Нельзя считать, что установка свойства сама увеличила размер растра.

Gmagick::setimagebordercolor(GmagickPixel $color): Gmagick
ПараметрТип и обязательностьЗначение
colorGmagickPixel; обязательныйНастройка рамки; GmagickPixel либо проверенная строка цвета.

Результат: Gmagick с результатом операции. Проверенные преобразования меняют текущий объект и возвращают его же; для независимого варианта сначала создайте clone.

Ошибка по официальному контракту: GmagickException. Ошибочный PHP-тип может дать TypeError до обработки изображения; при разборе некорректного цвета возможен GmagickPixelException. Не печатайте успешный результат после перехвата ошибки, если файл не получен. Требуется PECL Gmagick; PHP.net помечает нижнюю границу версии как Unknown, поэтому конкретную минимальную версию здесь не придумываем.

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

Связанный метод: Gmagick::getimagebordercolor.

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

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

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

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

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