使用 Imagick::compositeImage 获得精确的颜色匹配

Get exact color match using Imagick::compositeImage

我想合并两张图片,一张是图案图片,另一张是彩色蒙版。

我的问题是收到的颜色与我想要收到的颜色不匹配。

这是我的 "pattern image" $image:

然后我用

$image->compositeImage($ribbon, Imagick::COMPOSITE_COLORBURN, 0, 0);

将其与 'color' 图片合并

我期待类似这样的输出:

但我得到的是:

较亮和较暗的区域来自图案图像,但总的来说,这种颜色与我预期的不同。我还尝试了所有其他选项,包括 Imagick::COMPOSITE_HARDLIGHTImagick::COMPOSITE_OVERLAY

我在这里想念什么?也许我需要先为 $image 做一些准备?或者使用不同的方法将图像合并在一起?

更新: 如果我使用 COMPOSITE_COLORIZE 我也没有得到我需要的颜色,而是更浅

抱歉,我对 Imagick 的编码不是很好。但是您可以在 Imagemagick 中尝试以下操作(unix 语法)。首先,我制作图像,使白色变得透明。然后我 trim 将图案图像的白色关闭并将其平铺。然后我提取图像的 alpha 通道。然后我使用所有 3 个图像进行合成乘法,其中 Alpha 通道用作遮罩。

convert \( image.png -alpha off -colorspace gray \
-fuzz 2% -transparent white \) \
\( pattern.png -fuzz 20% -trim +repage -write mpr:pattern \
+delete -size 200x152 tile:mpr:pattern \) \
\( -clone 0 -alpha extract \) \
-alpha off -compose multiply -composite result.png

或者,分别执行每个步骤并保存结果,这可能更容易转换为 Imagick,您可以这样做:

convert image.png -alpha off -colorspace gray grayimage.png
convert pattern.png -fuzz 20% -trim +repage trimpattern.png 
convert -size 200x152 tile:trimpattern.png tiledpattern.png
convert grayimage.png tiledpattern.png -compose multiply -composite multipliedimage.png
convert grayimage.png -fuzz 2% -transparent white -alpha extract alphaimage.png
convert multipliedimage.png alphaimage.png -alpha off -compose copy_opacity -composite -compose over -background white -flatten result2.png