有些图片我想删除背景(或者将其设置为透明)。出于这个原因,我测试了一个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 ....