如何在Imagick中设置裁剪颜色?

6
我正在尝试使用imagick和php来移除图像的透明区域。
Image Magick提供了trim方法: Imagick::trimImage 引用如下:
删除图像中背景颜色的边缘。 如果Imagick已经编译为ImageMagick版本6.2.9或更高版本,则可以使用此方法。 我该如何设置Imagick可能裁剪的颜色? 以下脚本将背景颜色设置为灰色。 但是,正如您下面所看到的那样,trim会删除蓝色背景颜色。
$im = new Imagick( "1.png" );
// Set background color to grey
$im->setImageBackgroundColor( new ImagickPixel( "rgb(213,213,213)" ) );
$im->trimImage( 0 );
$im->writeImage('2.png');

enter image description here

有没有办法限制裁剪颜色?

imagick模块版本 => 2.1.1-rc1


1
我怀疑文档使用的“背景颜色”定义可能比您预期的要宽松。在ImageMagick中,修剪本身通过取图像的角像素的颜色并从那里开始工作来去除背景,我相信是这样的。在您的情况下似乎确实是这种情况。为了确认这一点,请尝试使用手册中的三色示例--创建一个带有三个实心彩色正方形的图像,运行修剪操作,看看是否只剩下中间的正方形。 - Matt Gibson
在这个例子中,生成的图像是正方形,很好。我想确保它是正方形。是否有一个可以做到这一点的函数...如果图像是矩形并且“移除”或背景周围产生了一个矩形图像,我想强制它成为正方形... - menardmam
2个回答

10

Matt Gibsons的提示引导我找到了正确的解决方案:http://www.imagemagick.org/Usage/crop/#trim_color

正如Matt已经解释过的,trim方法需要使用角落颜色来调整图像大小。 而文档中提供的解决方案是一个变通方法: 在调用trim方法之前,先在图像周围绘制一个边框。

$img = new Imagick("stripes.gif"); 
// Set the color to trim:
$img->borderImage("#FF0000", 1, 1); 
$img->trimImage(0); 
$img->setImagePage(0, 0, 0, 0);
$img->writeImage("test.jpg");'

演示


-1
你尝试过将背景颜色指定为十六进制代码,而不是实例化 ImagickPixel 吗?
$im->setImageBackgroundColor( #D5D5D5 );

谢谢卡尔,但结果仍然没有变化。 - jantimon
setImageBackgroundColor: "现在允许使用表示颜色的字符串作为参数。之前的版本只允许使用ImagickPixel对象。" - jantimon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接