Как найти средний цвет изображения с помощью ImageMagick?

Как получить значения RGB среднего цвета изображения, где каждое значение равно 0-255? Такие как "255,255,255"

Я запускаю эту команду, чтобы сжать изображение, и он возвращает значение "rgba" с альфа-каналом, а иногда дает имена цветов текста:

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

выход:

rgba(155,51,127,0.266087)

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+


в моем ответе есть два аспекта:

  1. изменять размер исходного изображения на 1 пиксель изображения. Тогда этот пиксель будет иметь "средний" цвет, как ImageMagick в convert видит его.
  2. выведите результат как специальный при поддержке convert. Этот текстовый формат перечисляет все пиксели изображения, давая сначала его координаты ($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)