<canvas> 元素本身并没有绘制能力(它仅仅是图形的容器) - 必须使用脚本来完成实际的绘图任务。

getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性。 

 <canvas id="myCanvas">您的浏览器版本不支持Canvas标签</canvas>
<script>
window.onload = function(){
var my_canvas = document.getElementById("myCanvas");
var ctx = my_canvas.getContext("2d");
alert(ctx);
}
</script>

填充样式fillStyle和笔触样式strokeStyle

  属性值有:

  

  • 颜色
  • 渐变对象gradient又可以分为线性渐变对象linearGradient反射性渐变对象radialGradient,他们通过getContext()返回的对象进行创建。
        var my_gradient = ctx.createLinearGradient(0,0,150,0);   //创建一个线性渐变对象,参数表示开始点坐标和结束点坐标
      my_gradient.addColorStop(0, "black"); //0位置时颜色
      my_gradient.addColorStop(0.5, "green"); //0.5位置时颜色
      my_gradient.addColorStop(1, "white"); //1位置时颜色   var my_radial = ctx.createRadialGradient(100,70,5,100,70,100);//创建一个反射状渐变对象,开始圆坐标,开始圆半径,结束圆坐标,结束圆半径
      my_radial.addColorStop(0,"white");
      my_radial.addColorStop(1,"red");   ctx.fillRect(0,0,500,500);

  

  • pattern
     var img = document.getElementById("search");
var my_pattern = ctx.createPattern(img, "repeat"); //创建patter对象,规定要使用的模式的图片、画布或视频元素。
ctx.fillStyle = my_pattern; cxt.fillRect(0,0,500,500);

  

阴影样式

     <canvas id="myCanvas" width="400" height="400">您的浏览器版本不支持canvas标签</canvas>
<!--
总结:阴影样式属性有
shadowColor 阴影颜色
shadowBlur 阴影模糊程度
shadowOffsetX 阴影x轴偏移
shadowOffsetY 阴影y轴偏移
-->
<script>
window.onload = function(){
var my_canvas = document.getElementById("myCanvas"); var ctx = my_canvas.getContext("2d"); ctx.shadowColor = "#000000"; //阴影颜色
ctx.shadowBlur = "30"; //模糊级别,默认为0,即设置shadowColor同时也必须设置shadowBlur,否则不显示阴影,值越小颜色越深,值越大颜色越模糊
ctx.shadowOffsetX = "20" //阴影沿x轴偏移距离,可正可负
ctx.shadowOffsetY = "20"; //阴影沿y轴偏移距离 ctx.fillStyle = "#00FF00"; //填充样式 green绿色
ctx.fillRect(50,50,200,100); //填充矩形
};
</script>

线条样式

  

图形

  • 矩形(在fill和stroke之前设置fillStyle和strokeStyle显示不同的样式)

         var cxt = my_canvas.getContext("2d");
    
         cxt.fillRect(100,100,200,200);    //填充矩形
    
         cxt.strokeRect(0,0,400,400);    //画矩形
    //等同于
    cxt.rect(20,20,40,40);     //创建rect对象
    cxt.stroke();

  •      var cxt = my_canvas.getContext("2d");
    
         cxt.arc(100,100,50,0,2*Math.PI);      //创建一个圆,参数:圆心坐标,圆半径,起始角度,结束角度(角度以PI为单位)
    cxt.stroke(); //绘制

 矩形和圆的绘制都属于线条的绘制,当然也可以使用strokeStyle和线条样式了。

线条

  • 直线

         var cxt = canvas.getContext("2d");
    // 直线
    cxt.moveTo(200,120);
    cxt.lineTo(200,50); //线尾坐标
    cxt.stroke();
  • 曲线,贝塞尔曲线和弧线 
     cxt.beginPath();
cxt.moveTo(20,20);
cxt.quadraticCurveTo(20,100,200,20); //二次贝塞尔曲线
cxt.stroke(); cxt.beginPath();
cxt.moveTo(100,100);
cxt.bezierCurveTo(100,400,200,100,400,100); //三次贝塞尔曲线
cxt.stroke();

  

     // 弧线(其实画圆就是画弧)
cxt.beginPath();
cxt.arc(200,200,100,0, 2*Math.PI); //圆弧
cxt.stroke(); cxt.beginPath();
cxt.arc(200,200,50, 0, Math.PI); //半圆弧
cxt.stroke(); cxt.beginPath();
cxt.arc(150,180,25,Math.PI,0); //半圆弧
cxt.stroke(); cxt.beginPath();
cxt.arc(250,180,25,Math.PI,0); //半圆弧
cxt.stroke();

  

文本 

     var cxt = my_canvas.getContext('2d');
//字体样式
cxt.font = "bold 30px 微软雅黑";
cxt.strokeText("Hello World!", 100,100); //画文本字(空心) cxt.fillText("Hello Canvas!", 100,150); //填充字体(实心)

图片绘制

 <p>图片:
<img src="./images/niurong.jpg" id="img"/>
</p>
<p>canvas:
<canvas id="myCanvas" width=360 height=360>您的浏览器版本不支持canvas标签</canvas>
</p>
<script>
// drawImage(img, x0, y0); 绘制图片到(x0,y0)坐标上
window.onload = function(){
var img = document.getElementById("img");
var my_canvas = document.getElementById("myCanvas");
var cxt = my_canvas.getContext('2d'); cxt.drawImage(img,0,0);
15     }

  

  我们把一张图片复制到canvas中,然后这张图片就任我们揉捏了,嘿嘿...  现在我们要把《被牛肉片包围的头像》中教皇的头像裁剪出来

  只需 cxt.drawImage(img,115, 155, 75, 95, 0, 0, 75, 95); 这就就ok了。需要测算出该头像位于该图片的坐标以及宽度、高度即可。

  

  注意:drawImage函数参数

    

像素操作

  假如你拥有了操作像素的能力,那么你就拥有了改变世界的能力。——LHAT语录

     var imgData = cxt.createImageData(100,100);    //创建一个100×100像素的imageData对象
for(var i=0; i<imgData.data.length; i+=4){
imgData.data[i+0] = 0; //R
imgData.data[i+1] = 255; //G
imgData.data[i+2] = 0; //B
imgData.data[i+3] = 200; //透明度,255表示不透明
}
cxt.putImageData(imgData, 300, 300); //将imageData对象添加到画布中

  

  电脑、手机上的图片都是有一个个像素组成的,这没错,假若我知道了一幅图片所有像素的位置、颜色,那么我就能完美复制该图片。

     <p>
<img src="./images/shouhui3.jpg" id="img" style="border:1px solid #aaa"/>
<canvas id="myCanvas" width="209" height="220" style="border:1px solid #aaa">您的浏览器版本不支持canvas标签</canvas>
</p>
<script>
window.onload = function(){
var img = document.getElementById("img");
var my_canvas = document.getElementById("myCanvas");
var cxt = my_canvas.getContext("2d");
cxt.drawImage(img,0,0); var imgData = cxt.getImageData(0,0,my_canvas.width,my_canvas.height);
for(var i=0; i<imgData.data.length; i+=4){
imgData.data[i+0] = 255 - imgData.data[i+0] ;
imgData.data[i+1] = 255 - imgData.data[i+1] ;
imgData.data[i+2] = 255 - imgData.data[i+2] ;
imgData.data[i+3] = 255 ;
}
cxt.putImageData(imgData,0,0);
};
</script>

  

html5之canvas初解的更多相关文章

  1. 用html5的canvas画布绘制贝塞尔曲线

    查看效果:http://keleyi.com/keleyi/phtml/html5/7.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHT ...

  2. HTML5在canvas中绘制复杂形状附效果截图

    HTML5在canvas中绘制复杂形状附效果截图 一.绘制复杂形状或路径 在简单的矩形不能满足需求的情况下,绘图环境提供了如下方法来绘制复杂的形状或路径. beginPath() : 开始绘制一个新路 ...

  3. HTML5之Canvas时钟(网页效果--每日一更)

    今天,带来的是使用HTML5中Canvas标签实现的动态时钟效果. 话不多说,先看效果:亲,请点击这里 众所周知,Canvas标签是HTML5中的灵魂,HTML5 Canvas是屏幕上的一个由Java ...

  4. HTML5 画布canvas元素

    HTML5的canvas元素以及随其而来的编程接口Canvas API应用前景极为广泛.简单地说,canvas元素能够在网页中创建一块矩形区域,这块矩形区域可以成为画布,这其中可以绘制各种图形.可别小 ...

  5. HTML5 之Canvas绘制太阳系

    <!DOCTYPE html> <html> <head> <title>HTML5_Canvas_SolarSystem</title> ...

  6. HTML5 中canvas支持触摸屏的签名面板

    1.前言 最近实在是太忙了,从国庆之后的辞职,在慢慢的找工作,到今天在现在的这家公司上班大半个月了,太多的心酸泪无以言表,面试过程中,见到的坑货公司是一家又一家,好几家公司自己都只是上一天班就走了,其 ...

  7. 【HTML5】Canvas画布

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  8. html5 之 canvas 相关知识(一)概念及定义

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  9. HTML5之Canvas画布

    先上代码: <canvas width="1000" height="800">浏览器不支持HTML5!</canvas> <sc ...

随机推荐

  1. POJ 3461 Oulipo KMP

    题意:统计其中一个子串的出现次数 题解:即KMP算法中j==m的次数 //作者:1085422276 #include <cstdio> #include <cmath> #i ...

  2. Servlet应用的运行流程

    其中,红色部分为我们开发人员要做的,其他部分是框架做的. 学习就要搞懂整个运行的流程!否则,不利于个人技术的积累!

  3. Android Studio 获取 sha1-wangfeng520@

    WIN+R   打开“运行”  输入  CMD 回车 2 CD C:\Program Files\Java\jdk1.7.0_71\bin     (JDK安装路径) keytool -list -v ...

  4. 概率 Gym 100502D Dice Game

    题目传送门 /* 题意:两个人各掷两个骰子,给出每个骰子的最小值和最大值,其余值连续分布 问两人投掷,胜利的概率谁大 数据小,用4个for 把所有的可能性都枚举一遍,统计每一次是谁胜利 还有更简单的做 ...

  5. 模拟 POJ 1068 Parencodings

    题目地址:http://poj.org/problem?id=1068 /* 题意:给出每个右括号前的左括号总数(P序列),输出每对括号里的(包括自身)右括号总数(W序列) 模拟题:无算法,s数组把左 ...

  6. BZOJ1103 [POI2007]大都市meg(DFS序)

    题目:一颗树,单边修改,链上查询..实际上链是根到结点的链.网上好像有其他做法,我的想法是这样的: 先不看修改,毫无疑问查询只是查询结点的深度:而修改一条边会有什么影响:影响是且只是以边上深度最深结点 ...

  7. ssh org.springframework.beans.TypeMismatchException

    这个问题我搜了一上午都木有解决 后来找到一个英文网站 It seems that some other bean (one that is not shown) has a property of t ...

  8. BZOJ3658 : Jabberwocky

    考虑将某线段下方的点取走: 将所有点从低到高排序 每扫描到一条水平线,对于上面每个点,找到它下面同色的前驱后继,统计中间点的个数 然后再把线上所有点插入数据结构中 最后再统计相邻的同色的点之间的点个数 ...

  9. 各新旧版本Java及其相关文档可以从这里下载

    http://www.oracle.com/technetwork/java/archive-139210.html

  10. [Cocos2d-x For WP8]基础知识

    一.重要概念 导演(CCDirector) 在cocos2d-x引擎中,CCDirector类是整个游戏的组织和控制核心,游戏的运行规则,游戏内的CCScene(场景).布景(CCLayer).角色( ...