Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ImageMagick查找图像的平均颜色?_Imagemagick - Fatal编程技术网

如何使用ImageMagick查找图像的平均颜色?

如何使用ImageMagick查找图像的平均颜色?,imagemagick,Imagemagick,如何获得图像平均颜色的RGB值,其中每个值为0-255?例如“255255” 我运行此命令来缩小图像,它返回带有alpha通道的“rgba”值,有时还会给出文本颜色名称: convert cat.png -resize 1x1\! -format "%[pixel:u]\n" info: 输出: rgba(155,51,127,0.266087) 您可以执行以下操作来解析出逗号分隔的RGB值。它也不会返回文本颜色名称 convert cat.png -resize 1x1\! \ -

如何获得图像平均颜色的RGB值,其中每个值为0-255?例如“255255”

我运行此命令来缩小图像,它返回带有alpha通道的“rgba”值,有时还会给出文本颜色名称:

convert cat.png -resize 1x1\! -format "%[pixel:u]\n" info:
输出:

rgba(155,51,127,0.266087)

您可以执行以下操作来解析出逗号分隔的RGB值。它也不会返回文本颜色名称

convert cat.png -resize 1x1\! \
    -format "%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)]" info:-
输出格式应如下所示:

155,51,127

这应该适用于ImageMagick 6.3.9.1+

我的答案有两个方面:

  • 将原始图像调整为1像素图像。然后,该像素将具有ImageMagick的
    convert
    看到的“平均”颜色
  • 将结果输出为
    convert
    支持的特殊
    .txt
    格式。此文本格式枚举图像的所有像素,首先给出其坐标(
    $row,$column:
    ),然后给出不同格式的RGB或CMYK值
  • 以下是一个命令,它一次涵盖了两个方面:

    convert cat.png -resize 1x1 out.txt
    cat out.txt
    
    要直接在终端窗口中获取输出,可以使用:

    convert cat.png -resize 1x1 txt:-
    
    示例输出:

    convert p4.png -resize 1x1 txt:-
      # ImageMagick pixel enumeration: 1,1,255,srgb
      0,0: (189,185,184)  #BDB9B8  srgb(189,185,184)
    

    更容易使用特殊的输出格式
    .txt
    :-)基于这个答案,我想得到RGB三元组的十六进制等价物。我在命令行处理方面还不在行,所以这可能不是最好的,但希望它能节省一些时间:
    convert cat.png-scale 1x1\-格式“%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)]信息:-sed's/,/\n/g'| xargs-L 1 printf“%x”
    小心ImageMagick对gamma问题的错误默认处理;当缩小到1x1时,这可能特别明显。一个有好信息的页面:比公认的答案简单得多,也更详细。如果你喜欢小写,可以尝试
    convert p4.png-resize 1x1 txt:-|grep-Po“#[:xdigit:]{6}”
    ,并进一步将其导入
    tr A-F A-F