如何在 Imagick 中设置修剪颜色?
Posted
技术标签:
【中文标题】如何在 Imagick 中设置修剪颜色?【英文标题】:How to set the trimming color in Imagick? 【发布时间】:2012-03-05 13:55:07 【问题描述】:我正在尝试使用 imagick 使用 php 删除图像的透明区域。
Image Magick 提供了trim
方法:
Imagick::trimImage
从图像中移除作为背景颜色的边缘。如果 Imagick 已针对 ImageMagick 版本 6.2.9 或更高版本进行编译,则此方法可用。
如何设置 Imagick 可以修剪的颜色?
以下脚本将背景颜色设置为灰色。 但是,修剪会移除蓝色背景颜色,如下所示。
$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');
有没有办法限制修剪颜色?
imagick 模块版本 => 2.1.1-rc1
【问题讨论】:
我怀疑文档使用的“背景颜色”定义可能比您预期的要宽松。我相信,ImageMagick 中的 Trim 本身通过获取图像的 角像素 的颜色并从那里开始工作来移除背景。这似乎就是你的情况。要确认这一点,请尝试使用manual 中的三色示例——创建一个连续三个纯色正方形的图像,运行修剪,看看是否只剩下中间的正方形。跨度> 在这个例子中,生成的图像是正方形的,很好......我要确保它是正方形的。有没有可以做到这一点的功能....如果图像是矩形并且“删除”或周围的背景生成一个矩形图像,我应该将它强制为正方形...... 【参考方案1】:Matt Gibsons Hint 引导我找到了正确的解决方案: http://www.imagemagick.org/Usage/crop/#trim_color
正如马特已经解释的那样,修剪方法采用角落颜色来修剪 图片。 文档中给定的解决方案是一种解决方法: 他们在调用 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");'
【讨论】:
【参考方案2】:您是否尝试过将背景颜色指定为十六进制代码,而不是为其实例化 ImagickPixel?
$im->setImageBackgroundColor( #D5D5D5 );
【讨论】:
感谢 Karl,但结果保持不变。 setImageBackgroundColor: "现在允许用一个字符串表示颜色作为参数。以前的版本只允许一个 ImagickPixel 对象。"以上是关于如何在 Imagick 中设置修剪颜色?的主要内容,如果未能解决你的问题,请参考以下文章