平均图像颜色,不包括Imagemagick的透明度

平均图像颜色,不包括Imagemagick的透明度,imagemagick,imagemagick-convert,Imagemagick,Imagemagick Convert,使用IM的CLI,我试图获得图像的平均图像颜色,不包括任何透明像素。通常使用的-resize 1x1 info:-在这种情况下不起作用,因为透明像素显然会影响结果(在某些情况下,最终会得到完全透明的像素) 我现在的退路是使用-定义直方图:唯一颜色=真-格式%c直方图:信息:-提取它们,并手动排除透明的颜色,但这对于IM可能已经提供的内容来说很复杂。在ImageMagick中,您可以通过 convert image -scale 1x1! -alpha off -format "%[pixel:u

使用IM的CLI,我试图获得图像的平均图像颜色,不包括任何透明像素。通常使用的
-resize 1x1 info:-
在这种情况下不起作用,因为透明像素显然会影响结果(在某些情况下,最终会得到完全透明的像素)


我现在的退路是使用
-定义直方图:唯一颜色=真-格式%c直方图:信息:-
提取它们,并手动排除透明的颜色,但这对于IM可能已经提供的内容来说很复杂。

在ImageMagick中,您可以通过

convert image -scale 1x1! -alpha off -format "%[pixel:u.p]" info:
例如:

convert logo: -transparent white -scale 1x1! -alpha off -format "%[pixel:u.p]\n" info:

srgb(100,81,99)

如果使用ImageMagick 7,则将convert替换为magick

另外:这是一条漫长的路。计算图像每个通道的平均值。计算alpha通道的平均值。然后分开

convert logo: -transparent white logot.png
convert logot.png -alpha extract mask.png

declare `convert logot.png -alpha remove -format "IR=%[fx:mean.r]\nIG=%[fx:mean.g]\nIB=%[fx:mean.b]\n" info:`
echo "IR=$IR; IG=$IG; IB=$IB"
IR=0.0651798; IG=0.0529989; IB=0.0641607

MM=`convert mask.png -format "%[fx:mean]\n" info:`
echo "MM=$MM"
MM=0.165872

convert xc: -format "srgb(%[fx:round(255*$IR/$MM)],%[fx:round(255*$IG/$MM)],%[fx:round(255*$IB/$MM)])\n" info:
srgb(100,81,99)


这太完美了,再次感谢您!你真的很了解自己:)