GraphicsMagick 的彩色像素数

color pixel count with GraphicsMagick

我需要计算图像中不是背景颜色的像素。 我从 PHP 调用它(它来自 ImageMagick):

gm convert test.png -fill black +opaque "rgb(255,255,255)" -fill white -opaque "rgb(255,255,255)" -print "pixels = %[fx:w*h*mean]\n"

但是没有给出任何结果,什么都没有。 我尝试改用直方图:

gm convert test.png -define histogram:unique-colors=true -format %c histogram:info.txt

有效,但给出了每种颜色的值和更多细节,我只需要一个数字。

您遇到了一些问题。您似乎在尝试将 GraphicsMagick 与 ImageMagick 混合使用,但它们不是一回事。

首先,GraphicsMagick 没有 ImageMagick 拥有的 +opaque 运算符。

其次,它没有 ImageMagick 用于计算的 -fx 运算符。

我建议您转向更强大的 ImageMagick。然后它将如您所愿地工作:

# Create a test image
convert -size 200x200 xc:black xc:white xc:red +append image.png

# Count the white pixels
convert image.png -fill black +opaque "rgb(255,255,255)" -print "pixels = %[fx:w*h*mean]\n" nul:
pixels = 40000

如果你真的,真的必须用 GraphicsMagick 来做,我只能建议以下 - 这在很大程度上基于@GlennRanders-Pehrson 的回答 here:

gm convert image.png +matte -matte -transparent white -operator matte negate 1 result.png

gm identify -verbose result.png | grep -EA5 "Opacity:|Geometry:" | grep -E "Mean|Geometry"
  Geometry: 600x200
  Mean:                    43690.00 (0.6667)
  Mean:                    43690.00 (0.6667)

你的答案是:

600 * 200 * (1 - 0.667)