Chuyển mã hex sang RGB

Dán mã màu hex như #ff6347 hay #f00 để lấy ngay giá trị rgb() tương ứng, kèm luôn màu đó ở dạng HSL, HSV và CMYK nếu bạn cần.

File không bao giờ rời khỏi thiết bị của bạn
rgbrgb(255, 99, 71)
hex#ff6347
hslhsl(9, 100%, 64%)
hsvhsv(9, 72%, 100%)
cmykcmyk(0%, 61%, 72%, 0%)

Mã hex thật ra mã hóa điều gì

Một mã hex sáu chữ số là ba byte viết liền nhau, mỗi byte một kênh, theo thứ tự đỏ, xanh lá, xanh dương. Mỗi byte được viết bằng hai chữ số hệ 16 thay vì số hệ 10, vì hai chữ số hex khớp đúng với một byte: khoảng 00ff phủ trọn 0–255, không thừa không thiếu. RGB chính là ba con số đó viết lại bằng hệ 10 — nên chuyển hex sang RGB không hẳn là một phép "biến đổi màu", mà chỉ là đổi hệ đếm, từng cặp chữ số một.

Đọc từng cặp bằng tay

Lấy #ff6347 làm ví dụ. Tách thành ff, 6347. Mỗi chữ số hex có giá trị theo lũy thừa của 16, nên một cặp đọc theo công thức (chữ số đầu × 16) + chữ số sau. Với ff(15 × 16) + 15 = 255. Với 63(6 × 16) + 3 = 99, và 47(4 × 16) + 7 = 71. Ghép ba số lại được rgb(255, 99, 71) — một màu đỏ cam ấm.

Làm y hệt với #1e90ff: 1e = 30, 90 = 144, ff = 255, ra rgb(30, 144, 255), một màu xanh dương đậm. Để ý quy luật: ff luôn là 255 và 00 luôn là 0, vì f là chữ số hex lớn nhất (15) và hai chữ số đó ghép lại là giá trị tối đa của một byte.

Mẹo: Không cần bấm máy tính mỗi lần cần đổi — công cụ phía trên làm sẵn phép tính cặp-đôi này, đồng thời hiện luôn HSL, HSV và CMYK cùng lúc, nên bạn chỉ cần đổi một lần cho mọi định dạng.

Viết tắt và kênh alpha

CSS cho phép viết tắt 3 chữ số khi mỗi cặp có hai chữ số trùng nhau. #333 giải ra #333333, tức rgb(51, 51, 51) — một màu xám trung tính khá tối. #08f giải ra #0088ff, tức rgb(0, 136, 255). Quy tắc này máy móc: mỗi chữ số được lặp lại đúng hai lần, nên #08f chỉ có thể là một màu cụ thể duy nhất, không phải một phiên bản gần đúng.

Mã hex 8 ký tự thêm một cặp thứ tư cho alpha. #ff634780 là màu đỏ cam ở trên cộng thêm 8080 trong hex là 128 trong hệ 10, mà 128 trên 255 là hơn một nửa một chút, nên trình duyệt hiển thị ở độ đục xấp xỉ 50%: rgba(255, 99, 71, 0.5). Mã hex 6 ký tự thường không mang cặp alpha nào và luôn được xem là đục hoàn toàn.

Mẹo: Hex 8 ký tự là kiểu hex duy nhất có sẵn độ trong suốt. Nếu bạn dán một mã từ công cụ thiết kế mà RGB ra lại đục trong khi bạn chờ nó trong suốt, hãy kiểm tra xem hai chữ số cuối có bị cắt mất không.

Hex, RGB và HSL đặt cạnh nhau

Cả ba đều mô tả cùng một không gian màu, chỉ khác ở chỗ mỗi cái làm nổi bật thông tin gì.

Định dạngTrông nhưDễ đọc nhất ở
Hex#ff6347Chuỗi ngắn để dán vào CSS hay công cụ thiết kế
RGBrgb(255, 99, 71)Cường độ từng kênh, 0–255 mỗi kênh
HSLhsl(9, 100%, 64%)Tông màu, và độ sáng hay độ bão hòa

Khi nào bạn thật sự cần RGB

Hex là thứ bạn dán vào CSS; RGB là thứ code thường cần để tính toán. Một API canvas, một uniform trong shader, hay một hàm trộn màu thường nhận vào ba con số chứ không phải một chuỗi sáu ký tự, nên chuyển đổi là bước đầu tiên trước khi màu có thể dùng được trong chương trình chứ không chỉ trong stylesheet. Các công cụ thiết kế cũng hay hiển thị RGB trong bảng thuộc tính dù màu được chọn bằng hex, nên phép chuyển này là thứ bạn sẽ làm theo cả hai chiều liên tục một khi làm việc xuyên suốt giữa CSS và code.

Câu hỏi thường gặp

Cách chuyển mã màu hex sang RGB bằng tay thế nào?
Tách sáu chữ số thành ba cặp rồi đọc mỗi cặp như một số hệ 16. Với #ff6347, ba cặp là ff, 63 và 47, tương ứng 255, 99 và 71 trong hệ 10, vậy màu đó là rgb(255, 99, 71). Mỗi cặp phụ trách một kênh và luôn nằm trong khoảng 0 đến 255.
Mã hex 3 ký tự như #08f giải ra thành gì?
Mỗi chữ số được nhân đôi thành một cặp: 0 thành 00, 8 thành 88, f thành ff, ra #0088ff — tức rgb(0, 136, 255). Kiểu viết tắt này chỉ dùng được khi cả hai chữ số của mỗi cặp trùng nhau, nên nó chỉ phủ được một phần rất nhỏ trong 16,7 triệu màu mà hex đầy đủ có thể biểu diễn.
Hex 8 ký tự khác gì hex 6 ký tự?
Hai chữ số thêm vào cuối là kênh alpha, tức độ trong suốt. #ff634780 là màu đỏ cam ở trên cộng thêm 80 — 80 trong hệ 16 là 128 trong hệ 10, xấp xỉ nửa độ đục. Hex 6 ký tự không có kênh alpha, mặc định luôn là màu đục hoàn toàn.
Mã hex có phân biệt chữ hoa chữ thường không?
Không. #FF6347, #ff6347 hay #Ff6347 đều ra cùng một rgb(255, 99, 71). Các chữ a đến f (hay A đến F) chỉ đại diện cho số 10 đến 15, cách viết hoa hay thường không ảnh hưởng gì đến giá trị.
Một cặp hex có thể vượt ra ngoài 00–ff không?
Không — chính vì vậy hex là định dạng an toàn để lưu một màu. Hai chữ số hex chỉ phủ đúng khoảng 0 đến 255, không hơn không kém, nên một kênh không bao giờ tràn số như khi ai đó gõ tay một giá trị RGB.
Công cụ này có đọc được hex không có dấu # ở đầu không?
Có. ff6347 và #ff6347 cho ra kết quả giống hệt nhau; dấu # chỉ là quy ước của CSS chứ không phải yêu cầu bắt buộc. Cả ba kiểu hex 3, 6 và 8 ký tự đều đọc được dù có hay không có dấu #.
Vì sao kết quả RGB của tôi hơi khác một công cụ khác?
Với hex chuẩn thì không nên khác — phép chuyển này là chính xác tuyệt đối, không có làm tròn, nên hai công cụ đúng luôn cho ra cùng số nguyên. Nếu khác, khả năng cao công cụ kia đang đọc theo hệ màu khác hoặc làm tròn phần trăm alpha thay vì đọc thẳng giá trị byte.