Halo sobat Skilvul!
Kali ini ada kasus tentang perbedaan format warna
Desainer web saya memberi saya theme dengan warna-warna dalam format rgb (red, green, blue), sedangkan saya lebih nyaman dengan format hex. Apa ada cara untuk melakukan konversi di antara dua format itu?
RGB dan Hex itu intinya sama
Mereka berdua sama-sama mewakili 3 warna primer (merah, hijau, dan biru), hanya saja mereka berbeda basis bilangan.
- RGB menggunakan sistem desimal (basis 10). Ini sistem bilangan yang umum digunakan. Jadi kalau berhitung ya 0,1,2,3,4,5,6,7,8,9,10,11,12…dst.
- Hex menggunakan sistem heksadesimal (basis 16). Sistem bilangan ini lebih mudah mewakili bilangan yang berjumlah besar. Kalau berhitung dengan sistem ini, urutannya adalah 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10,11,12…dst.
“Kok ada huruf di dalam bilangan?”
Karena basis 16 membutuhkan 16 simbol untuk mewakili bilangan; jadi kita “meminjam” beberapa huruf abjad untuk dijadikan simbol. Jadi 10 (desimal) sama dengan a (heksadesimal).
Konversi RGB ke Hex
Untuk melakukan konversi, kita hanya perlu mengubah tiap komponen dalam RGB ke dalam basis 16 dan menggabungkannya. Bagaimana caranya? Dengan JavaScript kita bisa menulis bilangan.toString(16)
yang artinya “Ubah nilai ‘bilangan’ ke dalam basis 16”.
Misal. Warna merah logo Skilvul adalah rgb(236, 84, 83).
(236).toString(16) // output ec
(84).toString(16) // output 54
(83).toString(16) // output 53
Tinggal digabungkan dan diberi tanda pagar # didepannya.
Jadi rgb(236, 84, 83) sama dengan #ec5453
Fungsi untuk Konversi
Seperti biasa, developer harus bisa menyederhanakan masalah, dalam kasus ini kita ingin membuat fungsi agar kita cukup memanggilnya saat butuh.
//fungsi utama untuk konversi rgb ke hex
function rgbToHex(r,g,b) {
//isi fungsi
}
//fungsi untuk untuk konversi desimal ke heksadesimal
function getHexValueOf(num) {
return num.toString(16);
}
Dalam fungsi rgbToHex
, kita perlu
- memanggil fungsi
getHexValueOf
3 kali (untuk parameter r, g, dan b). - menggabungkan hasilnya,
- menambahkan tanda pagar #.
Untuk poin pertama kita bisa membungkus mereka dalam sebuah array dan menggunakan map. Lalu berikan fungsi getHexValueOf sebagai parameternya.
[r, g, b].map(getHexValueOf)
Untuk poin kedua, kita bisa menggunakan method .join()
yang kita beri argumen “” (string kosong).
[r, g, b].map(getHexValueOf).join("")
Untuk poin ketiga, kita bisa menggunakan string concatenation biasa.
"#" + [r, g, b].map(getHexValueOf).join("")
Jadi fungsi lengkapnya adalah
function rgbToHex(r,g,b) {
return "#" + [r, g, b].map(getHexValueOf).join("")
}
Tes
Mari kita coba fungsi kita terhadap warna merah Skilvul di awal (yaitu rgb(236, 84, 83))
> console.log(rgbToHex(236, 84, 83))
output: #ec5453
Selesai. Jadi begitulah langkah-langkah pembuatan fungsi untuk mengubah warna dari format rgb ke hex.