ImageMagick: Как я могу работать с результатом гистограммы?

Я получаю большинство существующих цветов изображения и отображаю его с помощью функции "гистограмма"

convert image.jpg  -scale 100x100 -gravity \
center -crop 50% -dither None -remap color_map.gif \
-format %c histogram:info:

    22: (  0,  0,  0) #000000 black
   881: (119,133,142) #77858E rgb(119,133,142)
   268: (186, 84, 29) #BA541D rgb(186,84,29)
   662: (212,212,212) #D4D4D4 grey83
    20: (244,203, 98) #F4CB62 rgb(244,203,98)
   647: (255,255,255) #FFFFFF white

Как я могу работать сейчас с этим выходом? Я хочу сохранить самый существующий цвет в моей базе данных, но я не знаю, как теперь получить только цвет с номером 881. Может ли кто-нибудь мне помочь?

1 ответ

Если вы хотите сделать это исключительно из оболочки (при условии, что Bash-подобная среда Unix), что-то вроде этого будет работать:

convert image.jpg -scale 100x100 -gravity center \
  -crop 50% -dither None -remap color_map.gif \
  -format %c histogram:info: | sort | tail -n1 | \
  sed -e 's/.*\(#[0-9A-F]\+\).*/\1/'

Это берет вывод из ImageMagick, сортирует его так, что наибольшее количество цветов находится внизу, берет только эту строку, а затем извлекает шестнадцатеричный цвет из линии. Вы можете настроить регулярное выражение sed, если ваша цель - получить десятичные значения rgb вместо гекса.

Так что для вашего примера изображения вывод должен быть просто:

#77858E
Другие вопросы по тегам