2017-04-15 254 views
0

我使用Imagemagick來處理php中的圖像。我在ImageMagick不明智,所以不能這樣做。我有2張圖片,1張是背景,另外1張是背景。最上面的那個是灰色的png。而背景圖像可以是任何圖像。我想設置頂部圖像的顏色以匹配背景圖像的最多顏色。設置圖像顏色以匹配背景顏色php

對於實施例,這是一個有米色/粉作爲其主要顏色

enter image description here

隨機背景圖像,這是我的頂部圖像

enter image description here

我想我的上述頂部圖像以改變其顏色以匹配最多顏色的背景圖像,如在上面的圖像中,它應該是類似於

enter image description here

這可能嗎?

回答

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

+0

@ fmw42感謝您分享您的見解和經驗,解決它自己。你知道圖像右側發生了什麼嗎?或者爲什麼我需要再次複製原始圖像的不透明度? –

+0

對不起,我在上面Mark的評論之前意外刪除了我的評論。我剛纔說的是我推薦使用-colorspace sRGB來獲得正常(非線性)的顏色,而不是使用-colorspace RGB來獲得線性(和較暗)的顏色。 – fmw42

+0

馬克,你簡單的色調命令(在result.png結尾)爲我工作得很好。我使用IM 6.9.8.3 Q16 Mac OSX在右側看不到任何條紋。也許是上傳過程更改圖像格式或刪除透明度。如果我刪除透明度,它會顯示條紋。請注意,您也應該始終在-compose copy_opacity之前添加-alpha off。但那是在你的處理中。 – fmw42

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');