2015-03-31 138 views
2

我使用imagemagick裁剪图像(使用PHP界面,但我不认为这太重要)。ImageMagick裁剪图像与周围的背景

我希望裁剪图像,但如果裁剪部分超过图像,我希望它显示背景颜色。

下面是代码我迄今为止:

$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是较大比原始图像的宽度和高度,它将其压入图像的视图)。

例如 Cropping Image using a front end tool. As you can see the crop tool is over the imageThe result for the cropped image pushes the image back into view. I dont want this! I want a background

我希望它使得如果x和y是超出图像部分,它显示了一个背景颜色来代替。谢谢!

UPDATE

感谢namelivia建议,我决定使用“范围” tool.However我无法设置使用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

好像如果你希望使用的背景颜色,你应该使用extentImage(NOT setImageExtent)。

+0

为什么downvote?我认为这是一个措辞很好的问题,在 – 2015-03-31 19:54:05

回答

2

我认为你应该使用the extent option first,使用范围,你也可以选择背后的区域的背景颜色,然后你可以裁剪扩展图像。

+0

之前没有重复谢谢!不知道是否与该功能相关,但是如何通过PHP设置背景颜色。我更新的代码不起作用。看问题。 – 2015-03-31 19:53:54

+0

管理修复它。感谢您的帮助 – 2015-03-31 20:04:15

+0

对于任何有此问题的人,我建议使用命令行工具而不是PHP API,因为我相信现在已被弃用。 – 2016-08-15 20:24:29