Closed paulkoegel closed 10 years ago
x=('AA'..'ZZ').each_with_index.map{|el, idx| {el => idx}}.inject({}){|memo, el| memo[el.keys.first] = el.values.first; memo}
x['JH']
=> 241
x['ZZ']
=> 675
x['AA']
=> 0
damit hat man schon mal die zahlen, jetzt muss man das noch auf den sRGB farbraum strecken:
factor = 16777215.0/ 675.0 # sRGB hat 16777216 verschiedene Farben
(x['PW'] * factor).floor.to_s(16)
=> "9c413a"
(x['SP'] * factor).floor.to_s(16)
=> "b72ea5"
(x['JH'] * factor).floor.to_s(16)
=> "5b66c7"
(x['AA']*factor).floor.to_s(16)
=> "0"
mit zero padding:
(x['AA']*factor).floor.to_s(16).rjust(6, '0')
=> "000000"
(x['SP'] * factor).floor.to_s(16).rjust(6, '0')
=> "b72ea5"
Railslove in farbe:
%w(LB MB JK TS JH LK TL PW PB IS MS SP PB SH).map{|el| (x[el]*factor).floor.to_s(16).rjust(6, '0')
[
"#6cd8ef",
"#76b548",
"#5c8a0c",
"#c22e44",
"#5b66c7",
"#7042bf",
"#bf86a2",
"#9c413a",
"#944a55",
"#55b66c",
"#7d27d2",
"#b72ea5",
"#944a55",
"#b425ec"
]
umlaute müssten noch durch transliterate
initialen der deutschen nationalmannschaft:
gelb kriegt man übrigens mit den initialien "ZO". sollten vielleicht noch das mapping ändern, wenn's zu braunlastig wird.
invertiert auf "streck"/mapping ebene:
(16777215.0 - x['PW'] * factor).floor.to_s(16)
ist vielleicht n bisschen fröhlicher!?
require 'digest/md5'
"#" + Digest::MD5.hexdigest("TS")[1..6]
=> "#ba89ab"
Aber wahrscheinlich ist Pauls ein bisschen farbenfroher.
Railslove:
nationalelf:
mir eigenltich wumpe, dein code is einfacher. mappt zwar streng genommen nicht so schön (mit homogenen abständen) auf den sRGB farbraum, aber das is bei den resultaten ja egal.
Ist zwar von der Implementierung her völlig ohne Bezug zu einem Farbraum, aber: geht :)
Jep, aber ich mag auch die Einfachheit von deinem Ansatz. Bau es mal so ein
nur ne idee: standardavatar-SVG so manipulieren, dass aus den initialen die trikotfarbe gebaut wird, dann sind die unterscheidbarer da wir das SVG eh in den DOM serialisieren, sollten wir das leicht machen können.