2017-12-26 21 views
0

Ich schrieb ein Skript, um meinen Hintergrund auf meiner Linux-Maschine zu einem zufälligen Bild aus einer Reihe von Bildern zu ändern, die nur Volltonfarben enthalten. Was ich tun möchte, ist dieses Skript so zu erweitern, dass bestimmte Anwendungen (hauptsächlich terminale) entsprechend gestaltet werden, zumindest um die Textfarbe zu ändern, möglicherweise von dunklem zu hellem Hintergrund usw. Ich habe mich gefragt, welche Möglichkeiten ich haben muss Erhalte den Hex-Code für die Farbe im Bild. Gibt es etwas in bash, mit dem ich das machen kann? Müsste ich ein Programm in einer robusteren Sprache schreiben und den Hex-Code ausgeben lassen? Gibt es einen besseren Weg, dies vollständig zu tun? Mein bisheriges Suchen war ein wenig ergebnislos.Wie erhält man einen Hex-Farbcode aus einem Volltonbild für ein Skript?

+0

Also, wenn ich Sie richtig verstehe, wollen Sie ein Bild machen als Ein- und Ausgang der (und ein x, y-Koordinatenpaar) Farbe als Hexadezimalwert? –

+0

Ja, so etwas, wenn es einen besseren Weg gibt, einen Farbcode zu bekommen, der funktioniert. Wie gesagt, in diesem Fall handelt es sich um einfarbige Bilder. Es ist wahrscheinlich etwas ziemlich Einfaches, aber meine Suchen haben mir nicht wirklich alles gegeben, was ich in einem Skript oder einer Programmiersprache verwenden kann, und ich war nicht in der Lage, irgendwelche bereits existierenden Werkzeuge zu finden, die das tun, was ich will. –

Antwort

1

Ich würde dringend empfehlen, ImageMagick für diese Aufgabe zu verwenden. Die documentation erwähnt, wie Sie Daten aus einem Bild extrahieren.

Von „Extrahieren der durchschnittlichen Farbe“:

Die durchschnittliche Farbe eines Bildes kann durch die Verwendung „-Skala“ sehr schnell gefunden werden, um ein Bild zu einem einzelnen Pixel zu reduzieren. Hier ist zum Beispiel die durchschnittliche Farbe des eingebauten "rose:" Bildes. Ich gebe die Farbe mit dem FX-Escape-Format aus, das eine Farbzeichenfolge zurückgibt, die direkt IM ohne Änderung verwendet werden kann.

[email protected]:~$ convert rose: -scale 1x1\! -format '%[pixel:s]\n' info:- 

Will Ausgang: srgb(146,89,80)

In Ihrem Fall ersetzen rose: mit einer Image-Datei von Ihnen, wie foo.png.

Wenn Sie die Ausgabe direkt in Hex-Notation möchten, verwenden Sie diese:

convert rose: -scale 1x1\! -format '%[pixel:s]\n' info:- | awk -F '[(,)]' '{printf("#%x%x%x\n",$2,$3,$4)}' 
+0

Danke! Weißt du irgendeinen Weg, es direkt auf den Hexadezimalwert ausgeben zu lassen? Ich bin mir sicher, dass es da ist, aber wenn Sie es sofort wissen, könnte es schneller sein, als wenn ich die Dokumentation danach suche. Wenn nicht, kann ich wahrscheinlich einen Weg finden, es zu konvertieren. –

+0

Entschuldigung, ImageMagick ist eine absolute Hündin, mit der man arbeiten kann. Es ist mächtig, aber es hat 0 Dokumentation und die Tatsache, dass die gleichen Wörter in verschiedenen Kontexten verwendet werden, macht es extrem schwierig zu googeln. –

+0

@ChristopherLeggett Ich habe auch eine neue Frage [hier] (https://stackoverflow.com/questions/47983587/how-can-imagemagick-output-hex-colours-instead-of-srgb) gestellt, so dass wir versuchen und finden können eine Lösung zusammen. –

Verwandte Themen