Chcę utworzyć funkcję, która zaakceptuje dowolny stary ciąg (zwykle będzie to pojedyncze słowo) i na tej podstawie w jakiś sposób wygeneruje wartość szesnastkową między #000000
i #FFFFFF
, więc mogę użyć jej jako koloru dla elementu HTML.
Może nawet skrócona wartość szesnastkowa (np #FFF
.:), jeśli jest to mniej skomplikowane. W rzeczywistości idealny byłby kolor z palety „bezpiecznej w Internecie”.
javascript
string
colors
hex
Darragh Enright
źródło
źródło
parseInt(hexstr, 10)
. Aby przekonwertować liczbę całkowitą na szesnastkową, użyjn.toString(16)
, gdzie n jest liczbą całkowitą.Odpowiedzi:
Po prostu przenoszę Java z szesnastkowego kodu koloru Compute dla dowolnego ciągu do Javascript:
Aby dokonać konwersji, zrobiłbyś:
źródło
("00" + ((this >> 24) & 0xFF).toString(16)).slice(-2) + ("00" + ((this >> 16) & 0xFF).toString(16)).slice(-2) + ("00" + ((this >> 8) & 0xFF).toString(16)).slice(-2) + ("00" + (this & 0xFF).toString(16)).slice(-2);
intToRGB(hashCode('hello1')) -> "3A019F"
intToRGB(hashCode('hello2')) -> "3A01A0"
I poprawiam twój kod, dodając mnożenie dla końcowej wartości skrótu:return 100 * hash;
Oto adaptacja odpowiedzi CD Sancheza, która konsekwentnie zwraca 6-cyfrowy kod koloru:
Stosowanie:
Przykład:
http://jsfiddle.net/sUK45/
(Alternatywne / prostsze rozwiązanie może obejmować zwrócenie kodu koloru w stylu „rgb (...)”).
źródło
Chciałem podobnego bogactwa kolorów dla elementów HTML, byłem zaskoczony, że CSS obsługuje teraz kolory hsl (), więc pełne rozwiązanie dla mnie jest poniżej:
Zobacz także Jak automatycznie wygenerować N „odrębnych” kolorów? więcej alternatyw bardziej podobnych do tego.
W HSL jego odcień, nasycenie, jasność. Tak więc odcień między 0-359 będzie miał wszystkie kolory, nasycenie określa, jak bogaty chcesz kolor, 100% działa dla mnie. Jasność określa głębię, 50% to norma, 25% to ciemne kolory, 75% to pastel. Mam 30%, ponieważ najlepiej pasuje do mojej kolorystyki.
źródło
Uważam, że generowanie przypadkowych kolorów ma tendencję do tworzenia kolorów, które nie mają wystarczającego kontrastu dla mojego gustu. Najłatwiejszym sposobem obejścia tego problemu jest wstępne wypełnienie listy bardzo różnych kolorów. Do każdego nowego ciągu przypisz kolejny kolor na liście:
Chociaż ma to limit tylko do 64 kolorów, uważam, że większość ludzi i tak nie jest w stanie odróżnić różnicy po tym. Przypuszczam, że zawsze możesz dodać więcej kolorów.
Podczas gdy ten kod używa kolorów zakodowanych na stałe, masz przynajmniej gwarancję, że podczas programowania dokładnie wiesz, jaki dokładnie kontrast zobaczysz między kolorami podczas produkcji.
Lista kolorów została usunięta z tej odpowiedzi SO , istnieją inne listy z większą liczbą kolorów.
źródło
Otworzyłem żądanie ściągnięcia do Please.js, które umożliwia generowanie koloru z hasha.
Możesz odwzorować ciąg na taki kolor:
Na przykład
"any string goes here"
zwróci jako"#47291b"
i
"another!"
zwróci jako"#1f0c3d"
źródło
Jeśli dane wejściowe nie są wystarczająco różne, aby prosty skrót mógł wykorzystać całe spektrum kolorów, zamiast funkcji skrótu można użyć pierwotnego generatora liczb losowych.
Używam kodera kolorów z odpowiedzi Joe Freemana i generatora liczb losowych Davida Bau .
źródło
Jeszcze jedno rozwiązanie dla losowych kolorów:
To mieszanka rzeczy, które działają za mnie. Użyłem funkcji JFreeman Hash (również odpowiedź w tym wątku) i funkcji pseudolosowej Asykäri stąd i trochę dopełnienia i matematyki ode mnie.
Wątpię, aby funkcja dawała równomiernie rozłożone kolory, chociaż ładnie wygląda i robi to, co powinna.
źródło
'0'.repeat(...)
nie jest poprawnym javascriptUżywając
hashCode
jak w odpowiedzi Cristiana Sanchezahsl
i nowoczesnego javascript, możesz stworzyć próbnik kolorów z dobrym kontrastem:Ponieważ jest to HSL, możesz skalować luminancję, aby uzyskać kontrast, którego szukasz.
źródło
Oto rozwiązanie, które wymyśliłem, aby wygenerować estetyczne pastelowe kolory na podstawie ciągu wejściowego. Wykorzystuje pierwsze dwa znaki łańcucha jako losowe ziarno, a następnie generuje R / G / B na podstawie tego ziarna.
Można go łatwo rozszerzyć, tak aby ziarno było XOR wszystkich znaków w ciągu, a nie tylko pierwszych dwóch.
Zainspirowany odpowiedzią Davida Crow'a: Algorytm do losowego generowania estetycznej palety kolorów
GIST jest tutaj: https://gist.github.com/ro-sharp/49fd46a071a267d9e5dd
źródło
Oto kolejna próba:
źródło
Wszystko, czego naprawdę potrzebujesz, to dobra funkcja skrótu. W węźle po prostu używam
źródło
Konwertuję to na Javę.
Zbiorniki dla wszystkich.
źródło
Ta funkcja załatwia sprawę. To adaptacja tego, dość dłuższego wdrożenia tego repozytorium .
źródło