Seite 1 von 1

Automatischer Farbnamen für Web Farben (#00000 -> black)

Verfasst: Freitag 19. Juni 2009, 17:09
von jens
In Adobe Afereffects gibt es eine Routine die automatisch passende Farbnamen generiert, wenn man eine Farbfläche erstellt.
Das klappt nicht nur für Vollton Farben, sondern es kommt auch sowas wie: "Mittel-Limonengrüne Farbfläche1"

Sowas hätte ich gern in Python, für Web-Farben. (Genauer gesagt, für PyLucid, mehr Infos dazu im Forums Thread: v0.9 - CSS ColorScheme {{ color1 }} ?)

Kennt jemand was fertiges? Jemand Lust sowas zu machen?

Verfasst: Freitag 19. Juni 2009, 22:07
von apollo13
Kannst du vergessen, der Html standard definiert nur 16 Farbnamen, die von allen Browsern implementiert werden müssen, der Rest ist nach Lust und Laune (und Websafe sind ja 256 iirc, also fehlen dir noch 256-16 Namen^^)…

Verfasst: Freitag 19. Juni 2009, 22:39
von Leonidas
Naja, aber wenn man die Farben in Hex-Schreibweise angibt, wie das so ziemlich jeder macht, sind die Websafe-Farben meiner Erfahrung nach von keinerlei Bedeutung.

Verfasst: Samstag 20. Juni 2009, 08:35
von apollo13
In Hex ja, aber er will ja die Farbnamen verwenden, soweit ich das verstanden habe und hier schaut es wirklich eher matt aus…

Verfasst: Samstag 20. Juni 2009, 09:56
von sma
Ich halte die Farbnamen ja für total überflüssig. Unter LavenderBlush kann ich mir noch weniger vorstellen als unter #FFF0F5, wo ich zumindest sehe, dass es etwas hellrosaness sein muss. Schaut man sich "gefällige" Farbschemata z.B. auf kuler.adobe.com an, sieht man zudem ganz schnell, dass die Farbabstufungen viel feiner sind und die doch recht kräftigen Grundfarben mit Name zusammen nie (oder selten) ein stimmiges Farbschema ergeben. Daher denke ich nicht, dass man sie je brauchen wird.

Doch wenn man unbedingt will, so schwer ist es ja wohl nicht, die Tabelle von w3school in eine Python-Klasse zu verwandeln. Ich tippe, man ist damit in 4 Minuten durch:

Code: Alles auswählen

class Colors(dict):
    def __getattr__(self, name):
        return self[name]

colors = """
    AliceBlue 	#F0F8FF	 
    AntiqueWhite 	#FAEBD7	 
    Aqua 	#00FFFF	 
    Aquamarine 	#7FFFD4	 
    Azure 	#F0FFFF	 
    Beige 	#F5F5DC	 
    Bisque 	#FFE4C4	 
    Black 	#000000	 
    BlanchedAlmond 	#FFEBCD	 
    Blue 	#0000FF	 
    BlueViolet 	#8A2BE2
    """.split()

Colors = Colors(zip(colors[::2], colors[1::2]))

print Colors['Aqua']
print Colors.Bisque
Damit's nicht zu lang wird, habe ich nicht alle Faben aus der HTML-Tabelle kopiert, aber mehr als ein Copy&Paste ist das nicht.

Stefan

Verfasst: Montag 22. Juni 2009, 12:23
von jens
Sorry, ihr habt mich da anscheinend falsch verstanden. Es geht mit nicht darum hex Farbwerte in "offizielle Web-Farbnamen" zu konvertieren. Es sollen aus gegebenen hex Farbwerte, halbwegs sinnvolle Namen erzeugt werden (Die nichts mit offiziellen Namen zu tun haben müßen).

Sowas wie "Hell orange", "dunkel grau" usw...

Verfasst: Montag 22. Juni 2009, 13:31
von cofi
sma hat das Grundproblem doch aber erfasst: Wenn man den Farbwerten willkürliche Namen zuweist, kann der normale Benutzer damit noch weniger anfangen als mit der Hex-Kodierung, bei der man wenigstens die Anteile abschätzen kann.

Verfasst: Montag 22. Juni 2009, 13:32
von veers

Code: Alles auswählen

colors = [
        ('Red', 1.0, 0.0, 0.0),
        ('Green', 0.0, 1.0, 0.0),
        ('Blue', 0.0, 0.0, 1.0),
        ('Yellow', 1.0, 1.0, 0.0),
]

def find_name(color):
    r1, g1, b1 = color
    return min(
                (((r1-r2)**2+(g1-g2)**2+(b1-b2)**2)**0.5, name)
                for name, r2, g2, b2 in colors)[1]

print find_name((0.8, 0.8, 0.0)) # Yellow
print find_name((0.8, 0.0, 0.0) # Red 
Cofi, frag mal deine Grossmutter ob ihr #fe1234 oder Rot mehr sagt ;)

Gruss,
Jonas

Verfasst: Montag 22. Juni 2009, 15:01
von jens
cofi hat geschrieben:Wenn man den Farbwerten willkürliche Namen zuweist, kann der normale Benutzer damit noch weniger anfangen als mit der Hex-Kodierung, bei der man wenigstens die Anteile abschätzen kann.
Nein. Ich möchte natürlich keine "willkürlichen" Namen, sondern passende Namen. Also genau das was du meinst, der Name soll die Farbe gut beschreiben ;)

Ich denke man müßte es so machen: Erstmal die Hellingkeit nehmen, wenn sehr dunke oder sehr hell. Dann die Farbe ansich, also rot, lila, gelb, grün usw.

So das man Namen erhält, wie "Hell gelb" oder "dunkel türkis", aber dann auch noch "Sonderfälle", wenn es fast rot ist, dann nur "rot" usw.

EDIT: Ich brauche so ein Tool nicht mehr. Besser ist es in meinem Fall die Namen auf Basis der CSS Selektoren zu generieren und nicht nach der Farbe...

Verfasst: Mittwoch 6. Januar 2010, 09:43
von jens
Hab nun was gefunden, das JavaScript "Name that Color". Man kann eine Farbe vorgeben und erhält dazu einen Farbnamen (in Englisch).

Homepage: http://chir.ag/projects/ntc/

Demo: http://chir.ag/projects/name-that-color/

Verfasst: Mittwoch 6. Januar 2010, 09:57
von snafu
Naja, gerade deskriptiven Charakter haben die Namen ja nicht...

Verfasst: Mittwoch 6. Januar 2010, 10:12
von DasIch
Jetzt weiß auch auch wie Nepal aussieht :lol: Da musste ich doch schon spontan im Wörterbuch nachgucken ob ich nicht was verpasst hab - anscheinend nicht.

Verfasst: Mittwoch 6. Januar 2010, 10:16
von Defnull
Du könntest die echten Namen nehmen und die jeweils die Farbe heraus suchen, die deiner am ähnlichsten ist. So macht es 'Name that Color' ja auch.

Für Farbnamen hab ich hier noch was: http://github.com/defnull/Lucullus/blob ... r/color.py (spart vielleicht etwas Tipp Arbeit)

Re: Automatischer Farbnamen für Web Farben (#00000 -> black)

Verfasst: Freitag 28. Mai 2010, 10:32
von jens
Hab noch ein Python Skript gefunden: http://code.foosel.org/colorname
sieht so aus:
Bild