Canvas制作取色板

在线效果:查看

附件是源代码,如果需要打开但不能上网,请手动修改Jquery等库

步骤:

1、首先制作一张取色板,作为img标签内容。可以使用PS制作。这里介绍使用html5的canvas来制作

制作后的canvas可以保存为图片。

var pixel = 4;

var canvas = document.getElementById("color_container");

var cxt=canvas.getContext("2d");

for(j=0; j<250; j++){

if(j%pixel == 0){

for(i=0; i<360; i++){

if(i%pixel == 0){

var s = getHSL(i, j);

cxt.fillStyle= s;

cxt.fillRect(i,j,4,4);

}

}

}

}

2、监听img标签的onclick时间,根据鼠标位置换算出点击的颜色值

$("#color_container").click(function(a){

var target = a.target;

var parent = target.parentElement;

var left = parent.offsetLeft;

var top = parent.offsetTop;

var i = a.clientX - left;

var j = a.clientY - top;

//获取偏移值i、j做后处理

});

3、RGB、HSL、hex(例如#FFFFFF)之间的转换

hex2rgb = function(hex){

var h = [];

h[0] = hex.substring(1,3);

h[1] = hex.substring(3,5);

h[2] = hex.substring(5,7);

var r, g, b;

r = parseInt(h[0], 16);

g = parseInt(h[1], 16);

b = parseInt(h[2], 16);

return [r, g, b];

}

rgb2hex = function(r, g, b){

r = r.toString(16);

if(r.length == 1){

r = "0" + r;

}

g = g.toString(16);

if(g.length == 1){

g = "0" + g;

}

b = b.toString(16);

if(b.length == 1){

b = "0" + b;

}

return "#" + r + g + b;

}

hsl2rgb = function(h, s, l){

var r, g, b;

if(s == 0){

r = g = b = 255;

}

else{

var q = (l<0.5)?(l * (1.0+s)):(l+s - (l*s));

var p = (2.0 * l) - q;

var Hk = h/360.0;

var T = [];

T[0] = Hk + 0.3333333;

T[1] = Hk;

T[2] = Hk - 0.3333333;

for(var i=0; i<3; i++){

if(T[i] < 0) T[i] += 1.0;

if(T[i] > 1) T[i] -= 1.0;

if((T[i]*6) < 1){

T[i] = p + ((q-p)*6.0*T[i]);

}

else if((T[i]*2.0) < 1){

T[i] = q;

}

else if((T[i]*3.0) < 2){

T[i] = p + (q-p) * ((2.0/3.0) - T[i]) * 6.0;

}

else{

T[i] = p;

}

}

r = T[0]*255.0;

g = T[1]*255.0;

b = T[2]*255.0;

r = Math.round(r);

b = Math.round(b);

g = Math.round(g);

r = (r>255)? 255 : ((r<0)?0 : r);

g = (g>255)? 255 : ((g<0)?0 : g);

b = (b>255)? 255 : ((b<0)?0 : b);

}

return [r, g, b];

}

rgb2hsl = function(r, g, b){

r = r/255;

g = g/255;

b = b/255;

var max, min, diff, r_dist, g_dist, b_dist;

max = Math.max(Math.max(r, g), b);

min = Math.min(Math.min(r, g), b);

diff = max - min;

var h, s, l;

l = (max + min)/2;

if(diff == 0){

s = 0;

l = 0;

}

else if(l < 0.5){

s = diff/(max + min);

}

else{

s = diff/(2 - max - min);

}

r_dist = (max - r)/diff;

g_dist = (max - g)/diff;

b_dist = (max - b)/diff;

if(r == max){

h = b_dist - g_dist;

}

else if(g == max){

h = 2 + r_dist - b_dist;

}

else {

h = 4 + g_dist - r_dist;

}

h = h * 60;

h = Math.round(h);

if(h < 0){

h += 360;

}

else if(h >= 360){

h -= 360;

}

return [h, s, l];

}

html中在线取色器,在线取色器(ColorPicker)的制造方式相关推荐

  1. 句子改写器在线转换v.1.2.3

    对于AI,你们第一时间会想到啥~ 而我认为:人工智能不是人的智能,但能像人那样思考.也可能超过人的智能! 如今AI应用在生活中太普遍了,甚至都能够帮助我们写文档,做句子改写器在线转换等, 今天就小编就 ...

  2. 水面垃圾收集器在线监测项目案例

    一.行业背景 随着城市的快速发展,城市内河产生大量生活垃圾和生活污水,大量污水导致水质不断恶化.生活垃圾随意处置,导致河水浊度增加,水中悬浮物增多,导致水中鱼藻类生态破坏. 无锡漫途科技与苏州某环保企 ...

  3. linux(ubuntu)下基于java的在线音乐仿qq播放器,

    linux下基于java的在线音乐仿qq播放器,界面挺漂亮,界面全都是本人自己用java来画的,主要是我自己喜欢用ubuntu,但是由于没有人去做它的播放器,就自己来了,可以在线,有专辑图片,播放列表 ...

  4. 炎黄在线MSCD个人资料转移器 For 2K/XP/2003 V0.92

    炎黄在线MSCD个人资料转移器 For 2K/XP/2003 V0.92 PS:最近想发一些办公可能会用到的工具. 转载于:https://blog.51cto.com/netlin/32694

  5. cJSON_译(C中的超轻量级JSON解析器)

    cJSON ANSI C中的超轻量级JSON解析器. 通行证 执照 版权所有(c)2009-2017 Dave Gamble和cJSON贡献者 特此免费授予获得此软件和相关文档文件("软件& ...

  6. Java中Filter、Listener,拦截器的学习,listener、 filter、servlet 加载顺序及其详解

    Filter filter可认为是Servlet的一种"变种",它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链.它与Se ...

  7. c++ vs2015 播放音乐_Linux 中的十大开源视频播放器

    (给Linux爱好者加星标,提升Linux技能) 编译:linux中国-lujun9972,作者:Stella Aldridge https://linux.cn/article-11481-1.ht ...

  8. Java中apple导入那个包_在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是()。A.java.appletB.java.awtC.j...

    在Java中,由Java编泽器自动导入而无需在程序中用import导入的包是().A.java.appletB.java.awtC.j 更多相关问题 问卷星是一个专业.无限制的免费在线问卷调查.测评. ...

  9. springmvc java中转发_Springmvc中的转发重定向和拦截器的示例

    本文介绍了Springmvc中的转发重定向和拦截器的示例,分享给大家,具体如下: 可变参数在设计方法时,使用 数据类型...来声明参数类型,例如: public static void functio ...

  10. thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法)

    thinkphp模型中的获取器和修改器(根据字段名自动调用模型中的方法) 一.总结 记得看下面 1.获取器的作用是在获取数据的字段值后自动进行处理 2.修改器的作用是可以在数据赋值的时候自动进行转换处 ...

最新文章

  1. python生成一段时间
  2. 数据挖掘导论读书笔记3--分类
  3. 前端学习(1496):watch使用场景
  4. Spring Boot(5)---常用注解总结
  5. 死锁与活锁的原因 与解决方法(附加“饿死”)
  6. 掌握这个套路,让你的可视化大屏万里挑一
  7. python常用代码总结-python个人总结
  8. 转盘抽奖脚本html,转盘抽奖脚本自己撸
  9. 一文了解通用行为识别ActionRecognition
  10. Hazelcast IMDG参考中文版手册-第三章-概述
  11. 清越科技将开启申购:预计募资约8亿元,高裕弟为实际控制人
  12. Android 原生锁屏页面音乐控制
  13. 万能检测数据类型的方法
  14. 过滤器(Filter)的实现方式
  15. java毕业生设计紫陶文化传播与学习交流网站计算机源码+系统+mysql+调试部署+lw
  16. 9、攻守兼备的投资利器--可转债基金
  17. ​内嵌物理知识神经网络(PINN)是个坑吗?
  18. 3-4 harbor 2.6.2 的安装使用及高可用方案
  19. 罗素:自由主义的十诫
  20. 运维企业实战——RHCS集群套件 实现高可用

热门文章

  1. bzoj 1171 大sz的游戏 2892 强袭作战 (线段树+单调队列+永久性flag)
  2. 电脑html动态桌面壁纸制作,动态桌面软件《Wallpaper Engine》 让你的电脑桌面动起来!...
  3. Intl.NumberFormat 设置数字格式
  4. ping命令使用集合
  5. IMX6Q获取序列号方法
  6. arduino 有源 蜂鸣器_Arduino入门教程--第八课--用蜂鸣器模拟警报器
  7. 如何用php开发oa系统,oa系统怎么使用
  8. 基于基本面因子的量化交易模型解析
  9. 视觉slam十四讲 pdf_视觉SLAM十四讲——第三章 李群与李代数 课后作业amp;手推...
  10. 深入浅出mysql数据开发_深入浅出MySQL数据库开发、优化与管理维护 PDF扫描版[513KB]...