颜色合成 globalCompositeOperation 属性:

  1. //先绘制一个图形。
  2. ctx.fillStyle = "#00ff00";
  3. ctx.fillRect(10,10,50,50);
  4. //设置 lobalCompositeOperation 属性。
  5. ctx.globalCompositeOperation = "source-over";
  6. //source-over:新图像绘制于画布已由图像上方。 //默认
  7. //绘制一个新图像。
  8. ctx.beginPath();
  9. ctx.fillStyle = "#ff0000";
  10. ctx.arc(50,50,30,0,2*Math.PI);
  11. ctx.fill();

 

  1. ctx.globalCompositeOperation = "copy";
  2. //copy:只图像绘新图像,删除其它图像。

  

  1. ctx.globalCompositeOperation = "darker";
  2. //darker:在图形重叠的地方,其颜色由两个颜色值相减之后决定。

  

  1. ctx.globalCompositeOperation = "destination-atop";
  2. //destination-atop:画布上已有的内容只会在它和新图像重叠的地方保留。

  

  1. ctx.globalCompositeOperation = "destination-in";
  2. //destination-in:画布上已有的内容和新图像重叠的地方,保留已有的内容。

  

  1. ctx.globalCompositeOperation = "destination-out";
  2. //destination-in:画布上已有的内容和新图像不重叠的地方,保留已有的内容。

  

  1. ctx.globalCompositeOperation = "destination-over";
  2. //destinationo-ver:新图像绘制在已由图像下面。

  

  1. ctx.globalCompositeOperation = "lighter";
  2. //darker:在图形重叠的地方,其颜色由两个颜色值相加之后决定。

  

  1. ctx.globalCompositeOperation = "source-atop";
  2. //source-atop:在与已有图形重叠的地方,才显示的绘制新图像。

  

  1. ctx.globalCompositeOperation = "source-ind";
  2. //source-in:在与已有图形重叠的地方,才显示的绘制新图像 ,忽略原有图像。

  

  1. ctx.globalCompositeOperation = "source-out";
  2. //source-out:在与已有图形不重叠的地方,才显示绘制的新图像。

  

  1. ctx.globalCompositeOperation = "xor";
  2. //xor:在重叠和正常绘制的其它地方的地方,图像都为透明。

  

颜色反转 :

  1. var img = new Image();
  2. img.src="face.jpg";
  3. img.onload = function() {
  4. ctx.drawImage(img,0,0);
  5. var imageData = ctx.getImageData(0,0,250,250);
  6. var pix = imageData.data;
  7. for(var i = 0 , n = pix.length;i<n;i += 4 ) {
  8. pix[i] = 255-pix[i];
  9. pix[i+1] = 255-pix[i+1];
  10. pix[i+2] = 255 -pix[i+2];
  11. }
  12. ctx.putImageData(imageData,250,0);
  13. }

  

阴影效果:

  1. ctx.shadowColor = "#f00"; //设置阴影颜色
  2. ctx.shadowBlur=10; //设置阴影的羽化量
  3. ctx.shadowOffsetX = 20; //设置阴影X 坐标移动量
  4. ctx.shadowOffsetY = 30; //设置阴影Y 坐标移动量
  5. var img = new Image();
  6. img.src= "face.jpg";
  7. img.onload = function() {
  8. ctx.drawImage(img,0,0);
  9. }

  

自定义画板:

  • 建立画板

    1. var canvas = document.getElementById("myCanvas")
    2. var ctx = canvas.getContext("2d");
    3. //绘制一个黑色矩形为画板
    4. ctx.fillStyle="black";
    5. ctx.fillRect(0,0,600,300);
    6. //定义一些标记
    7. var onoff = false; //变量onoff 为判断是否按下鼠标
    8. var oldx = -10; //由于鼠标是有大小的,这里减去 10.
    9. var oldy = -10;
    10. var linecolor = "white"; //线条颜色
    11. var linw =4; //线条宽度
    12. //添加鼠标事件
    13.  
    14. canvas.addEventListener("mousemove",draw,true); //注意鼠标事件是在画布“ canvas”上

    15. canvas.addEventListener("mousedown",dowm,false);
    16. canvas.addEventListener("mouseup",up,false);
    17. //分别定义三个事件函数
    18. function dowm(event) {
    19. onoff = true; //设置为true,用于判断
    20. oldx = event.pageX-10; //jQuery 事件(event)pageX 属性:
    21. oldy = event.pageY-10;
    22. }
    23. function up() {
    24. onoff = false;
    25. }
    26. function draw(event) {
    27. if (onoff == true) {
    28. var newx = event.pageX-10; //实时取得新的坐标
    29. var newy = event.pageY-10;
    30. ctx.beginPath();
    31. ctx.moveTo(oldx,oldy);
    32. ctx.lineTo(newx,newy);
    33. ctx.strokeStyle = linecolor;
    34. ctx.lineWidth = linw;
    35. ctx.lineCap="round";
    36. ctx.stroke();
    37. oldx = newx; //在移动的过程中上一时新坐标变为下一时老坐标
    38. oldy = newy;
    39. };
    40. }

      

  • 完整画板与导出功能:
    1. //添加按钮
    2. <butto style="width:80px;background-color:yellow;"
    3. onclick='linecolor="yellow";'>YELLOW</button> //注意这里 onclick 为单引号。
    4. //建立以个 <img>标签,在用 toDataURL 函数导出内容
    5. //添加代码段
    6. function copyimage(event) {
    7. var image_pgn_src = canvas.toDataURL("image/pgn");
    8. document.getElementById("image_pgn").src = image_pgn_src;
    9. }

      

HTML-Canvas03的更多相关文章

  1. HTML5 Canvas圆盘抽奖应用(适用于Vue项目)

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

随机推荐

  1. vim常用指令及快捷键(持续更新)

    (这些文章都是从我的个人主页上粘贴过来的,大家也可以访问我的主页 www.iwangzheng.com) 发现了个非常赞的网站  http://openvim.com/ 以下很多操作都是安装好vund ...

  2. [UOJ#34]多项式乘法

    [UOJ#34]多项式乘法 试题描述 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入 第一行两个整数 n 和 m,分别表示两个多项式的次数. 第二行 n+1 个整数,分别表示第一个多 ...

  3. python4delphi 安装

    环境搭建: 目前p4d已经可以支持到XE7,可惜googlecode即将关闭,不知道作者是否会在github上继续更新. 因为此开源项目历史较久远,拿到源代码后可能还需要手动修改相关的文件引用,毕竟需 ...

  4. php email邮箱正则验证

    国际域名格式如下: 域名由各国文字的特定字符集.英文字母.数字及“-”(即连字符或减号)任意组合而成, 但开头及结尾均不能含有“-”,“-”不能连续出现 . 域名中字母不分大小写.域名最长可达60个字 ...

  5. 分享一个强大的采集类,还可以模拟php多进程

    做采集的时候,可以使用file_get_contents()去获取网页源代码,但是使用file_get_contents采集,速度慢,而且超时时间,不好控制.如果采集的页面不存在,需要等待的时间很长. ...

  6. JAVA程序1,1,2,3,5,8,13,21....第30个是什么...?

    解题思路:从第3个数字开始,后一个数字是前2个数字的和public class text{ public static void main(String[] args) { int num1=1,nu ...

  7. TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议

    1.概述      ICMP是(Internet Control Message Protocol)Internet控制报文协议.它是TCP/IP协议族的一个子协议,用于在IP主机.路由器之间传递控制 ...

  8. Python OpenSource Project

    http://www.oschina.net/project/lang/25/python

  9. 2.16 最长递增子序列 LIS

    [本文链接] http://www.cnblogs.com/hellogiser/p/dp-of-LIS.html [分析] 思路一:设序列为A,对序列进行排序后得到B,那么A的最长递增子序列LIS就 ...

  10. Android PopupWindow 消失后的回掉方法

    popupwindow 会在点击屏幕其他地方消失,但是这个消失时的回掉方法一直没有找到,困扰了一个多月,差了不少百度,没有很好解决,今天偶然看到了setOnDismissListener这个方法!没想 ...