Saya ingin membuat fungsi yang akan menerima string lama (biasanya akan menjadi satu kata) dan dari yang entah bagaimana menghasilkan nilai heksadesimal antara #000000
dan #FFFFFF
, jadi saya bisa menggunakannya sebagai warna untuk elemen HTML.
Mungkin bahkan nilai hex steno (misalnya:) #FFF
jika itu kurang rumit. Bahkan, warna dari palet 'web-safe' akan ideal.
javascript
string
colors
hex
Darragh Enright
sumber
sumber
parseInt(hexstr, 10)
. Untuk mengonversi bilangan bulat menjadi heksadesimal, gunakann.toString(16)
, di mana n adalah bilangan bulat.Jawaban:
Cukup porting di atas Java dari Compute hex color code untuk string arbitrer ke Javascript:
Untuk mengkonversi Anda akan lakukan:
sumber
("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"
Dan saya meningkatkan kode Anda dengan menambahkan perkalian untuk nilai hash akhir:return 100 * hash;
Berikut ini adalah adaptasi dari jawaban CD Sanchez yang secara konsisten mengembalikan kode warna 6 digit:
Pemakaian:
Contoh:
http://jsfiddle.net/sUK45/
(Solusi alternatif / sederhana mungkin melibatkan pengembalian kode warna gaya 'rgb (...)'.)
sumber
Saya ingin kekayaan warna yang serupa untuk elemen HTML, saya terkejut menemukan bahwa CSS sekarang mendukung warna hsl (), jadi solusi lengkap untuk saya adalah di bawah ini:
Lihat juga Cara membuat warna N "berbeda" secara otomatis? untuk lebih banyak alternatif lebih mirip dengan ini.
Dalam HSL, Hue, Saturation, Lightness. Jadi rona antara 0-359 akan mendapatkan semua warna, saturasi adalah seberapa kaya warna yang Anda inginkan, 100% bekerja untuk saya. Dan Lightness menentukan kedalaman, 50% normal, 25% warna gelap, 75% pastel. Saya memiliki 30% karena paling sesuai dengan skema warna saya.
sumber
Saya menemukan bahwa menghasilkan warna acak cenderung membuat warna yang tidak memiliki kontras yang cukup untuk seleraku. Cara termudah yang saya temukan untuk menyiasatinya adalah dengan mempopulasikan daftar warna yang sangat berbeda. Untuk setiap string baru , tetapkan warna berikutnya dalam daftar:
Meskipun ini memiliki batas hanya 64 warna, saya menemukan kebanyakan manusia tidak bisa membedakannya setelah itu. Saya kira Anda selalu bisa menambahkan lebih banyak warna.
Walaupun kode ini menggunakan warna-warna yang dikodekan, Anda setidaknya dijamin mengetahui selama pengembangan dengan tepat seberapa besar kontras yang akan Anda lihat di antara warna-warna yang diproduksi.
Daftar warna telah diangkat dari jawaban SO ini , ada daftar lain dengan lebih banyak warna.
sumber
Saya telah membuka permintaan tarik ke Please.js yang memungkinkan menghasilkan warna dari hash.
Anda dapat memetakan string ke warna seperti ini:
Misalnya,
"any string goes here"
akan kembali sebagai"#47291b"
dan
"another!"
mengembalikan sebagai"#1f0c3d"
sumber
Jika input Anda tidak cukup berbeda untuk hash sederhana untuk menggunakan seluruh spektrum warna, Anda dapat menggunakan generator nomor acak yang diunggah alih-alih fungsi hash.
Saya menggunakan kode warna dari jawaban Joe Freeman, dan pembuat nomor acak unggulan David Bau .
sumber
Solusi lain untuk warna acak:
Ini adalah campuran dari hal-hal yang bermanfaat bagi saya. Saya menggunakan fungsi JFreeman Hash (juga jawaban di utas ini) dan fungsi acak pseudo Asykäri dari sini dan beberapa padding dan matematika dari diri saya.
Saya ragu fungsi menghasilkan warna yang terdistribusi secara merata, meskipun terlihat bagus dan melakukan apa yang seharusnya dilakukan.
sumber
'0'.repeat(...)
tidak valid javascriptDengan menggunakan
hashCode
seperti pada jawaban Cristian Sanchez denganhsl
dan javascript modern, Anda dapat membuat pemilih warna dengan kontras yang baik seperti ini:Karena ini hsl, Anda dapat mengukur pencahayaan untuk mendapatkan kontras yang Anda cari.
sumber
Inilah solusi yang saya buat untuk menghasilkan warna pastel yang estetis berdasarkan string input. Ia menggunakan dua karakter pertama dari string sebagai seed acak, kemudian menghasilkan R / G / B berdasarkan pada seed itu.
Ini bisa dengan mudah diperpanjang sehingga seed adalah XOR dari semua karakter dalam string, bukan hanya dua yang pertama.
Terinspirasi oleh jawaban David Crow di sini: Algoritma untuk secara acak menghasilkan palet warna yang menyenangkan secara estetika
GIST ada di sini: https://gist.github.com/ro-sharp/49fd46a071a267d9e5dd
sumber
Ini adalah percobaan lain:
sumber
Yang Anda butuhkan adalah fungsi hash yang baik. Pada node, saya hanya menggunakan
sumber
Saya mengonversi ini untuk Java.
Tank untuk semua.
sumber
Fungsi ini berfungsi. Ini adaptasi dari ini, implementasi yang cukup lama dari repo ini ..
sumber