Imagick:将bash命令转换成php脚本


Imagick: Convert bash command into php script

有些图片我想删除背景(或者将其设置为透明)。出于这个原因,我测试了一个bash imagick命令,如下所示:

转换test.jpg -alpha设置-通道RGBA -bordercolor白色-边界1x1 -模糊2% -填充无-泛填充+0+0白色-剃1x1 test.png

因为我需要在我的php脚本中使用这个,我现在需要翻译这个。我想到的是:

$imagick->readImage($path);
$imagick->setImageAlphaChannel(Imagick::ALPHACHANNEL_SET);
$imagick->borderImage('white', 1, 1);
$imagick->floodFillPaintImage('transparent', 20, 'white', 0, 0, false);
$imagick->shaveImage(1, 1);
$imagick->writeImage(str_replace('.jpg', '.png', $path));

据我所知,它生成图像并删除大部分背景。但是模糊设置似乎被忽略了。

这个脚本的结果总是与我在命令提示符中使用-fuzz 0%时相同,无论我传递什么模糊值。我做错了什么,还是有一个bug(这会让我寻找另一个脚本能够做到这一点)?

是我做错了什么还是有bug

我们称之为文档错误。

Imagick::floodFillPaintImage(以及大多数其他接受模糊参数的函数)需要将模糊缩放到ImageMagick编译时使用的量子范围。例如,对于使用16位深度编译的ImageMagick,量子范围将为(2^16 - 1)= 65535

有一个例子在http://phpimagick.com/Imagick/floodFillPaintImage

$imagick->floodFillPaintImage(
    $fillColor,
    $fuzz * 'Imagick::getQuantum(),
    $targetColor,
    $x, $y,
    $inverse,
    $channel
);

所以你看到输出图像的原因是相同的,如果你已经传入0模糊,是ImageMagick正在解释2的值,你传入为2/65535 ....