Я использую 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), если вы хотите использовать цвет фона.
Я думаю, что вы должны использовать первый вариант экстента, используя экстент, вы также можете выбрать цвет фона для области «позади», а затем обрезать расширенное изображение.
Других решений пока нет …