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

时间:2018-04-24 13:38:01

标签: php imagemagick imagick

我想要合并两个图像,其中一个是图案图像,另一个是彩色蒙版。

我的问题是我得到的颜色与我想要的颜色不符。

这是我的"模式图像" $图像:

enter image description here

然后我用

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

将其与“颜色”相结合。图像

enter image description here

我期待输出类似于:

enter image description here

但我得到的是:

enter image description here

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

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

UPD: 如果我使用COMPOSITE_COLORIZE,我也不会得到我需要的颜色,而是更轻一些 enter image description here

1 个答案:

答案 0 :(得分:1)

抱歉,我没有很好地编写Imagick代码。但您可以在Imagemagick(unix语法)中尝试以下操作。首先,我制作图像,使白色变得透明。然后我修剪了图案图像的白色并将其平铺。然后我提取图像的alpha通道。然后我使用所有3个图像进行组合乘法,其中alpha通道用作蒙版。

from operator import add

text = ['1 2 3 4 1 23 5 5 43 54']
textFile = sc.parallelize(text)
counts = textFile.flatMap(lambda x: x.split(' '))\
    .filter(lambda x: int(x) <= 5)\
    .map(lambda x: (x, 1))\
    .reduceByKey(add)

output = counts.collect()

for (word, count) in output:
    print("%s: %i" % (word, count))

4: 1
3: 1
1: 2
5: 2
2: 1

enter image description here

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

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

enter image description here