颜色合成 globalCompositeOperation 属性:

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

 

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

  

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

  

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

  

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

  

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

  

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

  

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

  

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

  

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

  

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

  

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

  

颜色反转 :

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

  

阴影效果:

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

  

自定义画板:

  • 建立画板

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

    canvas.addEventListener("mousedown",dowm,false);
    canvas.addEventListener("mouseup",up,false);
    //分别定义三个事件函数
    function dowm(event) {
    onoff = true; //设置为true,用于判断
    oldx = event.pageX-10; //jQuery 事件(event)pageX 属性:
    oldy = event.pageY-10;
    }
    function up() {
    onoff = false;
    }
    function draw(event) {
    if (onoff == true) {
    var newx = event.pageX-10; //实时取得新的坐标
    var newy = event.pageY-10;
    ctx.beginPath();
    ctx.moveTo(oldx,oldy);
    ctx.lineTo(newx,newy);
    ctx.strokeStyle = linecolor;
    ctx.lineWidth = linw;
    ctx.lineCap="round";
    ctx.stroke();
    oldx = newx; //在移动的过程中上一时新坐标变为下一时老坐标
    oldy = newy;
    };
    }

      

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

      

HTML-Canvas03的更多相关文章

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

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

随机推荐

  1. HDOJ 1848 Fibonacci again and again

    Fibonacci again and again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Jav ...

  2. uchome 2.0 存在持久XSS漏洞

    发布时间:2010-09-03 影响版本:uchome 2.0 漏洞描述:看源码分析的,出错位置较敏感,而且基本没有利用限制,个人主页自定义风格时,可@import外部css文件 测试方法: 本站提供 ...

  3. Vector3.Lerp 插值

    Vector3.Lerp 插值 static function Lerp (from : Vector3, to : Vector3, t : float) : Vector3 Description ...

  4. [BZOJ1064][Noi2008]假面舞会

    [BZOJ1064][Noi2008]假面舞会 试题描述 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一 个自己喜欢 ...

  5. poj3041 二分图最小顶点覆盖

    Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17237   td>Accepted: 9375 ...

  6. Linux jstack命令详解

    jstack用于打印出给定的java进程ID或core file或远程调试服务的Java堆栈信息. 如果是在64位机器上,需要指定选项"-J-d64",Windows的jstack ...

  7. vista/win7/win8区别

    1. Vista的内核版本号是:Windows 6.0:         Windows 7的内核是:Windows 6.1:         Windows 8的内核是:Windows 6.2   ...

  8. 在Android上使用fontAwesome

    再也不用做那些讨厌的小图标了! 从网上找了些资料,总结下在android上使用fontAwesome的方法. 1.到官网上下载资源包,找到其中的字体文件fontawesome-webfont.ttf, ...

  9. 纯css3 加载loading动画特效

    最近项目中要实现当页面还没有加载完给用户提示正在加载的loading,本来是想做个图片提示的,但是图片如果放大电脑的分辨率就会感觉到很虚,体验效果很不好.于是就采用css3+js实现这个loading ...

  10. C++动态内存管理之shared_ptr、unique_ptr

    C++中的动态内存管理是通过new和delete两个操作符来完成的.new操作符,为对象分配内存并调用对象所属类的构造函数,返回一个指向该对象的指针.delete调用时,销毁对象,并释放对象所在的内存 ...