是否可以通过命令行获取图像中的主色?理想情况下,我希望将其返回为十六进制或 RGB。
我认为可以用imagemagick 的识别命令,但我在文档中没有看到执行此操作的选项。
答案1
Imagemagickidentify -verbose
提供了调色板直方图表,但仅当唯一颜色的数量低于限制时(我检查过的版本中为 1024,v6.x 至 v6.8.3)。
相反,你可以“convert
你的图像转为直方图,此输出不受独特颜色数量的限制:
convert image.jpg -format %c -depth 8 histogram:info:histogram_image.txt
sort -n histogram_image.txt | tail -1
按第一列对输出进行数字排序,按像素颜色的频率排序。(当然,特定颜色像素的频率可能与人类对主要颜色的感知不符。)
如果你要减少颜色,你可能只需要convert
相信为你而做您可以选择抖动和/或色调分离。甚至具体到网络安全 216:
convert image.png +dither -remap netscape: image_websafe.png
您可能会通过模糊、调整大小和色调分离等组合来更接近感知到的主要颜色,这不是一个容易定义和解决的问题:
- http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=16936
- https://stackoverflow.com/questions/1421863/get-dominant-colors-from-image-discarding-the-background
另请参阅以下链接dcolors
,其中有一个脚本,它使用 Imagemagick 来确定一组主要颜色在图像中,用途包括协调您的桌面配色方案与您选择的桌面图像:
http://javier.io/blog/en/2015/09/30/using-imagemagick-and-kmeans-to-find-dominant-colors-in-images.html
答案2
我在这里找到了这个优雅而简短的答案http://blog.endpoint.com/2011/04/determining-dominant-image-color.html
$ convert Waffle.jpg -scale 1x1\! -format '%[pixel:u]' info:-
rgb(219,166,94)