2011-11-03 36 views
8

Tôi đang tìm một thuật toán để có được màu văn bản tốt nhất (dễ chịu nhất cho mắt) từ một màu nền nhất định.Thuật toán để nhận màu văn bản tốt nhất

Bất kỳ ý tưởng nào?

+6

Sẽ không giảm xuống vì nó thú vị và hữu ích, nhưng bạn có thể muốn giải thích "màu sắc tốt nhất" rõ ràng hơn một chút cho mọi người. – Widor

+0

Widor's có một điểm rất tốt. Xin vui lòng viết lại để mở rộng trên những gì bạn có nghĩa là bởi "màu sắc tốt nhất" (nhất lòng mắt, độ tương phản cao nhất, màu mù thân thiện, bất cứ điều gì). – NPE

+0

"làm hài lòng nhất mắt" – user954469

Trả lời

12

"Màu sắc tốt nhất" rất chủ quan và phụ thuộc vào ngữ cảnh. Nó phụ thuộc vào hiệu ứng bạn muốn: Nếu bạn muốn có độ tương phản cao nhất có thể, hãy tìm các màu bổ sung (có thể cho bạn màu đỏ trên màu xanh lục, màu vàng trên màu xanh dương, v.v.). Nếu bạn muốn màu sắc "tương tự", hãy tìm các hài hòa tương tự. Nếu bạn muốn quyết định chỉ có màu đen và trắng, hãy đo độ sáng (hamstergene đã đăng một công thức rất tốt cho nó).

Bất cứ nơi nào bạn đến, mô hình màu HSV là chìa khóa.

Nhận các màu bổ sung hoặc tương tự là tầm thường (ví dụ: hue_text = (hue_bg + 180) % 360 HOẶC hue_text = (hue_bg + 30) % 360).

Bạn cũng có thể thử nghiệm với giá trị (độ sáng) và độ bão hòa để có độ tương phản tốt hơn. Ví dụ: v_text = 1 - v_bg có thể cung cấp cho bạn văn bản tối trên nền sáng và ngược lại (xem ra ở giữa tông màu!). Nó không phải là tuyến tính - bạn cũng có thể thực hiện chức năng bước như: if v_bg < 0.5 then v_text = 1 else v_text = 0 hoặc if s_bg < 0.5 then s_text = 1 else s_text = 0 (sống động trên màu nhạt).

Đó chỉ là một số gợi ý. Trong một từ: Nó phụ thuộc!

Google cho lý thuyết màu sắc và hài hòa màu sắc. Một số liên kết:

http://www.tigercolor.com/color-lab/color-theory/color-harmonies.htm

http://www.colormatters.com/color-and-design/basic-color-theory

6

Không có tốt nhất cho tất cả mọi người.

Giả sử nếu bạn cần phải chắc chắn rằng văn bản sẽ dễ dàng có thể đọc được, công thức đơn giản sau đây làm việc tốt cho tôi:

textColor = brightness(backColor) > 0.5 ? black : white; 

nơi sáng được định nghĩa là

brightness(R,G,B) = 0.299*R + 0.587*G + 0.114*B 

(có một số định nghĩa cho "độ sáng", tôi đã sử dụng cái này nhưng tôi nghĩ bất kỳ ai sẽ làm việc).

+0

Tôi đã trở lại tìm kiếm nó và ghi nhớ một người nào đó đưa ra một câu trả lời tốt hơn, và ở đây bạn đang có. :-) –

Các vấn đề liên quan