2011-11-05 55 views
17

Có ai biết chức năng trong javascript chuyển đổi màu RGB sang định dạng màu HSV không?RGB đến HSV màu trong javascript?

(hoặc jQuery)

+1

Kết quả quan trọng đầu tiên tại một tìm kiếm của Google: http://www.kourbatov.com/faq/rgb2hsv.htm –

+0

Tôi không chắc chắn nếu có một cách dễ dàng, nhưng hãy xem [ở đây] (http://www.csgnetwork.com/csgcolorsel4.html) và mã nguồn của nó. Nó có thể hữu ích cho bạn – genesis

+0

@RobW, đây là kết quả quan trọng đầu tiên trên Google. – Petah

Trả lời

46

Đây là một chức năng độc lập:

function rgb2hsv() { 
    var rr, gg, bb, 
     r = arguments[0]/255, 
     g = arguments[1]/255, 
     b = arguments[2]/255, 
     h, s, 
     v = Math.max(r, g, b), 
     diff = v - Math.min(r, g, b), 
     diffc = function(c){ 
      return (v - c)/6/diff + 1/2; 
     }; 

    if (diff == 0) { 
     h = s = 0; 
    } else { 
     s = diff/v; 
     rr = diffc(r); 
     gg = diffc(g); 
     bb = diffc(b); 

     if (r === v) { 
      h = bb - gg; 
     }else if (g === v) { 
      h = (1/3) + rr - bb; 
     }else if (b === v) { 
      h = (2/3) + gg - rr; 
     } 
     if (h < 0) { 
      h += 1; 
     }else if (h > 1) { 
      h -= 1; 
     } 
    } 
    return { 
     h: Math.round(h * 360), 
     s: Math.round(s * 100), 
     v: Math.round(v * 100) 
    }; 
} 

Và làm thế nào để sử dụng nó:

console.log(rgb2hsv(60, 120, 180)); 
1

Với sự phổ biến ngày càng tăng NPM Tôi nghĩ rằng đó là giá trị để đề cập đến một gói chứa tất cả các chức năng này thông qua một API đơn giản:

NPM cài đặt colorsys

var colorsys = require('colorsys') 
colorsys.rgb_to_hsv({ r: 255, g: 255, b: 255 }) 
// { h: 0 , s: 0 , v: 100 } 

Đối với trình duyệt: <script src="http://netbeast.github.io/colorsys/browser.js"></script>

colorsys.rgb_to_hex(h, s, v) 
// #hexcolor 

Như tôi đã trả lời trong Javascript convert HSB/HSV color to RGB accurately