计算图像中具有特定颜色的像素有多少?

Count how many pixels with a specific color in an image?

我想遍历一个图像文件夹并输出到控制台 #333212 有多少像素,#332211 有多少像素等等。这在 PHP 中可行吗?我发现 package 可以 操纵 图像,但不能检测每个像素的颜色。 PHP 库中是否存在这样的工具或功能?

编辑:不必在 PHP 中,我必须安装的软件包越少越好。

您可以像这样使用 ImageMagick 轻松完成此操作。假设我们要计算红色像素...

# First create a little test strip with black, white, red, green and blue parts
convert -size 50x50 xc:black xc:white xc:red xc:lime xc:blue +append out.png

现在将任何东西 non-red 转换为黑色,这样就只剩下 red 个像素

convert out.png -fill black +opaque red n.png

现在通过克隆生成的图片并使克隆全黑(通过将所有内容设置为零)来计算红色像素,然后运行比较计算有多少像素不是黑色

convert n.png                    \
    \( +clone -evaluate set 0 \) \
    -metric AE -compare          \
    -format "%[distortion]" info:
2500

2500 对我来说看起来像 50px x 50px :-)

备注

AE是绝对误差,即简单计算不同像素的数量。 -format "%[distortion]" info: 部分导致 ImageMagick 将计数 (%distortion) 输出为数字 (info:) 而不是图像。

显然,您将 red 替换为 "#333212" 来解决您的问题。

您也可以一次完成所有这些操作,如下所示:

convert input.png               \
   -fill black +opaque red      \
   \( +clone -evaluate set 0 \) \
   -metric AE -compare          \
   -format "%[distortion]" info: