Ich suche etwas wie das, was Windows 8+ für "automatische" Färbung verwendet, oder die neue YouTube-Android-App, die für die Navigationsleisten der Benutzerseite verwendet wird, wo die App automatisch das Bild betrachtet und eine Palette von Haupt- und Komplementärfarben zurückgibt.
Gibt es ein solches Programm oder eine solche API, die ebenfalls Open Source ist?
Mir ist nicht bekannt, was Windows 8 oder die neue YouTube-App tut, da ich beides nicht verwende, aber wenn Sie eine nach Häufigkeit sortierte N-Farben-Palette erhalten möchten, dh Sie suchen, wie Sie von image.png
:
ein palette.png
:
oder palette.txt
:
#D2615E
#B24953
#DE8D75
#5D133B
#65214C
#D36F6D
#EECAAA
#DCA295
#C78E79
#8F283D
#CEB3B6
#99364B
#A36A90
#A95D6B
#7B4886
#75416E
dann ist es eine ziemlich grundlegende Aufgabe für jedes Bildverarbeitungstool.
So könnte es mit ImageMagick (plus ein bisschen GNU Bash, Coreutils und AWK) gemacht werden:
$ convert "image.png" -colors 16 -depth 8 -format '%c' histogram:info:- \
| sort --reverse --numeric-sort \
| gawk 'match ($0, /^ *[0-9]+: \([^)]+\) (#[0-9A-F]+) .+$/, a) { print a[1] }' \
| tee "palette.txt" \
| while read colour; do convert -size 20x20 "xc:$colour" +depth miff:-; done \
| montage - -geometry +0+0 "palette.png"
Das ist natürlich ein Beispiel; Sie müssen Ihr Programm nicht ausführen convert
und monage
per system(3)
Aufruf aufrufen – Schnittstellen für ImageMagick sind für alle gängigen Sprachen verfügbar: C, C++, Perl, Python, Ruby, Java usw. Und es ist eine kostenlose/libre -Software (abgedeckt durch die Apache v2-Lizenz , um genau zu sein).
Es gibt viele - wahrscheinlich eine der einfachsten ist die ImageMagik- Konvertierung, zB:
convert rose: \
-define histogram:unique-colors=false \
histogram:histogram.gif
Was in diesem Fall für das Rosenbild ergibt:
Sie können ähnliche Dinge in einer Reihe von FOSS-Bildverarbeitungsprogrammen wie GIMP, G'IMIC, Darktable ...
Sie können diese Art von Dingen auch mit Python-Tools usw.