设置图像颜色以匹配背景颜色php

时间:2017-04-15 12:37:42

标签: php html image image-processing imagemagick

我正在使用Imagemagick处理php中的图片。我ImageMagick不明智,所以不能这样做。我有2张图片,1张是背景,另一张在它上面。顶部的那个是灰色的png。而背景图像可以是任何图像。我想设置我的顶部图像的颜色以匹配背景图像的最大颜色。

例如,这是一个随机背景图像,其主色为米色/粉红色

enter image description here

这是我的头像

enter image description here

我希望我的上方顶部图像更改其颜色以匹配背景图像的最大颜色,如上图所示,它应该类似

enter image description here

有可能吗?

2 个答案:

答案 0 :(得分:1)

我现在不想编写和调试大量的PHP,但可以在命令行上向您展示一些您应该能够转换为PHP的技术。

您可以通过将背景图像调整为单个1x1像素,然后以RGB术语打印其值来获取背景图像的平均值:

convert background.jpg -scale 1x1 -format "%[pixel:p{0,0}]" info:
srgb(219,199,164)

如果我拿出那个值并用它制作一个实心正方形,你可以看到它是一个像你建议的米色:

convert -size 100x100 xc:"srgb(219,199,164)" mean.png

enter image description here

您可以使用getImageChannelStatistics() 在PHP中。

如果我现在采用这种颜色,并使其成为着色的填充颜色并应用色调,我明白了:

convert top.png -fill "srgb(219,199,164)" -tint 100% result.png

enter image description here

在PHP中,您正在查看tintImage()

右侧发生了一些可怕的事情 - 我不明白这一点,但如果我从您的顶部图像中提取不透明度并将其重新应用于结果图像,它就会消失:

convert top.png -alpha extract alpha.pgm
convert top.png -fill "srgb(219,199,164)" -tint 100% alpha.pgm -compose copyopacity -composite result.png

enter image description here

答案 1 :(得分:0)

我已经通过这两行代码解决了这个问题

exec("convert fabric.jpg -scale 1x1\! -format '%[pixel:u]' info:-", $a);
exec('convert arm-shadow.png -fuzz 10% -fill "'.$a[0].'" +opaque black -fill "'.$a[0].'" -opaque black foo.png');