ImageMagick обрезать изображение с окружающим фоном

Я использую imagemagick, чтобы обрезать изображение (используя интерфейс PHP, но я не думаю, что это имеет большое значение).

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

Вот код, который у меня есть:

$newImg = new Imagick($imgUrl);
$newImg->cropImage($cropW, $cropH, $x, $y);
$newImg->resizeImage($resizedW, $resizedH, Imagick::FILTER_CATROM, 1);
$newImg->writeImage($output_filename);

Однако по какой-то причине imagemagick отказывается показывать любую часть изображения, которая дальше, чем граница изображения (то есть, если x и y больше, чем ширина и высота исходного изображения, оно выталкивает его вниз в поле зрения изображения).

например
Обрезка изображения с помощью внешнего интерфейса. Как вы можете видеть, инструмент кадрирования находится над изображением
Результат для обрезанного изображения возвращает изображение обратно в поле зрения. Я не хочу этого! Я хочу фон

Я хочу, чтобы, если x и y выходили за пределы части изображения, вместо них отображался цвет фона. Спасибо!

ОБНОВИТЬ

Благодаря предложению namelivia я решил использовать инструмент «экстент». Однако я не могу установить цвет фона, используя этот инструмент через PHP. Например, следующее создает увеличенное изображение, но с черным фоном, а не фиолетовым.

$newImg = new Imagick($imgUrl);
$newImg->setImageBackgroundColor('#e7609a'); //Doesn't return an error  (i.e. returns true) but also does not work!
$newImg->setImageExtent(2000, 2000);
$newImg->writeImage($output_filename);

ОБНОВЛЕНИЕ 2

Похоже, вы должны использовать экстент изображения (НЕ setImageExtent), если вы хотите использовать цвет фона.

2

Решение

Я думаю, что вы должны использовать первый вариант экстента, используя экстент, вы также можете выбрать цвет фона для области «позади», а затем обрезать расширенное изображение.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]