【问题标题】:How to find average color of an image with ImageMagick?如何使用 ImageMagick 查找图像的平均颜色?
【发布时间】:2014-08-25 14:36:16
【问题描述】:

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

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

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

输出:

rgba(155,51,127,0.266087)

【问题讨论】:

    标签: imagemagick


    【解决方案1】:

    我的回答有两个方面:

    1. 将原始图像调整为 1 像素图像。然后,该像素将具有 ImageMagick 的 convert 看到的“平均”颜色。
    2. 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)
    

    【讨论】:

    • 比公认的答案更简单、更详细。
    • 要一次性获取十六进制代码,请尝试convert p4.png -resize 1x1 txt:- | grep -Po "#[[:xdigit:]]{6}",如果您更喜欢小写,请进一步将其传递给tr A-F a-f
    【解决方案2】:

    您可以执行以下操作来仅解析以逗号分隔的 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+

    【讨论】:

    • 使用特殊的输出格式.txt更容易:-)
    • 基于这个答案,我想获得 RGB 三元组的十六进制等效值。我仍然不擅长命令行处理,所以这可能不是最佳的,但希望它能节省一些时间:convert cat.png -scale 1x1\! -format '%[fx:int(255*r+.5)],%[fx:int(255*g+.5)],%[fx:int(255*b+.5)]' info:- | sed 's/,/\n/g' | xargs -L 1 printf "%x"
    • 当心 ImageMagick 对 gamma 问题的错误默认处理;这在缩小到 1x1 时可能尤其明显。信息丰富的页面:ericbrasseur.org/gamma.html#ImageMagick
    【解决方案3】:

    C# 方式,使用 NuGet Magick.Net 包并借​​鉴命令行示例。

    ImageMagick.IMagickColor<ushort> color;
    using (ImageMagick.MagickImage image = new ImageMagick.MagickImage(file))
    {
        // Get average color
        image.Resize(1, 1);
        color = image.GetPixels().First().ToColor();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-17
      • 1970-01-01
      • 2012-07-28
      • 2017-08-23
      • 1970-01-01
      • 2012-09-06
      • 2018-02-01
      相关资源
      最近更新 更多