颜色的RGB转HSV以及HSV转RGB的JavaScript方法
最近在为 Discuz! 后台的界面风格制作自动生成配色的脚本,原理是根据用户输入的一种颜色值,生成很多种颜色,然后将这些颜色自动添加到相应的设置中去。自己在配色的时候往往通过 Photoshop 或者 Fireworks 等工具调整颜色,依据基本上是根据 HSV 来调整,所以这次配色也会先将颜色值转化为 HSV,而后再设置 HSV 来生成各种需要的配色。其实关键还是 RGB 与 HSV 的相互转化,以前并不熟悉二者的转化关系,百度、Google 了很多也没找到完整的 JavaScript 转化算法,参考了很多个算法、程序,经过几天的研究得到了比较完整的算法,虽然这个需求并不是很多,但是我还是希望和大家一起分享,如有不当之处,欢迎指正哈。
RGB to HSV 的算法:
//RGB to HSVfunction setRGBToHSV(r1,r2,r3) { var maxJ = Math.max(r1,r2,r3); var minJ = Math.min(r1,r2,r3); var _max = maxJ-minJ; if(r1 == r2 && r2 == r3) { H = 0; S = 0; } else { switch(maxJ) { case r1: H = (r2-r3)/_max; case r2: H = 2 + (r3-r1)/_max; case r3: H = 4 + (r1-r2)/_max; } H = 60; if(H < 0) H += 360; H = Math.round(H); S = Math.round(100(maxJ - minJ)/maxJ); } V = Math.round(100*maxJ/255); }
HSV to RGB 的算法:
//HSV to RGBfunction setHSVToRGB(_l,_m,_n) { if(_m == 0) { _l = _m = _n = Math.round(255_n/100); newR = _l; newG = _m; newB = _n; } else { _m = _m/100; _n = _n/100; p = Math.floor(_l/60)%6; f = _l/60 - p; a = _n(1-_m); b = _n(1-_mf); c = _n(1-_m(1-f)); switch(p) { case 0: newR = _n; newG = c; newB = a; break; case 1: newR = b; newG = _n; newB = a; break; case 2: newR = a; newG = _n; newB = c; break; case 3: newR = a; newG = b; newB = _n; break; case 4: newR = c; newG = a; newB = _n; break; case 5: newR = _n; newG = a; newB = b; break; } newR = Math.round(255newR); newG = Math.round(255newG); newB = Math.round(255*newB); } }
Discuz! 6.1.0 版本的插件请到这里下载:http://www.discuz.net/thread-1083257-1-1.html
这篇文章发布于 2008年10月12日,星期日,10:35,归类于 编码。 您可以跟踪这篇文章的评论通过 RSS 2.0 feed。 您可以留下评论,或者从您的站点trackback。
颜色的RGB转HSV以及HSV转RGB的JavaScript方法…
最近在为 Discuz! 后台的界面风格制作自动生成配色的脚本,原理是根据用户输入的一种颜色值,生成很多种颜色,然后将这些颜色自动添加到相应的设置中去。 ……
颜色的RGB转HSV以及HSV转RGB的JavaScript方法…
最近在为 Discuz! 后台的界面风格制作自动生成配色的脚本,原理是根据用户输入的一种颜色值,生成很多种颜色,然后将这些颜色自动添加到相应的设置中去。 ……
原理是根据用户输入的一种颜色值,生成很多种颜色,然后将这些颜色自动添加到相应的设置中去。