HTML5 Canvas绘图基本使用方法, H5使用Canvas绘图

站长手记 作者: 2024-08-28 13:00:02
Canvas 是H5的一部分,允许脚本语言动态渲染图像。Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的绘图功能(API),在网页上渲染动态效果图。
Canvas 是H5的一部分,允许脚本语言动态渲染图像。Canvas 定义一个区域,可以由html属性定义该区域的宽高,javascript代码可以访问该区域,通过一整套完整的绘图功能(API),在网页上渲染动态效果图。


二、Canvas 能做什么

三、Canvas基本用法

<canvas id='draw' width='200px' height='200px'></canvas>
var draw = document.getElementById('draw');
//确认浏览器是否支持<canvas>元素
if(draw.getContext){    
    var context = draw.getContext('2d');
    //给context绘制红色的边框
    context.strokeStyle = '#f00';    
    //内部填充大草原的颜色
    context.fillStyle = '#0f0';
}
var draw = document.getElementById('draw');
if(draw.getContext){    
    //显示图像,toDataURL()获取到的是一串base64的字符串
    var drawURL = draw.toDataURL('image/png');
    var image = document.createElement('img');
    image.src = drawURL;
    document.body.appendChild(image);           
}
var draw = document.getElementById('draw');
//确认浏览器是否支持<canvas>元素
if(draw.getContext){    
    var context = draw.getContext('2d');
    
    //绘制红色矩形,绿色描边
    context.fillStyle = '#f00';
    context.strokeStyle = '#0f0';
    context.strokeRect(10,10,50,50);
    context.fillRect(10,10,50,50);
    
    //绘制绿色矩形,红色描边
    context.fillStyle = '#0f0';
    context.strokeStyle = '#f00';
    context.strokeRect(10,10,50,50);
    context.fillRect(10,10,50,50);
    
    //在两个矩形重叠的地方清除一个小矩形
    context.clearRect(40,40,10,10);
}
arc(x,y,radius,startAngle,endAngle,conterclockwise)
(x,y)圆心坐标、radius半径、(startAngle,endAngle)起始角度和终止角度、conterclockwise顺时针(false)/逆时针(true)

moveTo(x,y) 将游标移动到(x,y),不画线。可以用来修改所谓的上一点坐标*

arcTo(x1,y1,x2,y2,radius)
从上一点开始绘制一条曲线到(x2,y2),并且以给定的radius穿过(x1,y1)

lineTo(x,y) 从上一点开始绘制一条直线,到(x,y)

rect(x,y,width,height)
从(x,y)开始绘制一个矩形,宽高为width、height。这个方法绘制的是矩形路径,而非strokeRect()和fillRect()所绘制的独立的形状

//接下来绘制一个不带数字的时钟  
var draw = document.getElementById('draw');
if(draw.getContext){
    var context = draw.getContext('2d');
    //开始路径
    context.beginPath();
    //绘制外圆
    context.arc(100,100,99,0,2*Math.PI,false);
    //绘制内圆
    context.moveTo(194,100);
    context.arc(100,100,94,0,2*Math.PI,false);
    //绘制分针
    context.moveTo(100,100);
    context.lineTo(100,15);
    //绘制时针
    context.moveTo(100,100);
    context.lineTo(35,100);
    //描边路径
    context.stroke();
    context.strokeStyle = '#f00';            
}
 font文字样式,大小,字体等
 textAlign 文本对其方式|start|end|left|right|center|
 textBaseline 文本的基线|top|hanging|middle|alphabetic|ideographic|bottom|      
 
 //在表盘绘制12点
 context.font = 'bold 12px Arial';
 context.textAlign = 'center';
 context.textBaseline = 'middle';
 context.fillText('12',100,20);  
 rotate(angel) 围绕原点旋转图像angle弧度
 scale(scaleX,scaleY) 缩放图像,x*scaleX,y*scaleY  默认1
 translate(x,y) 将坐标原点移动到(x,y)
 
 var draw = document.getElementById('draw');
 if(draw.getContext){
    var context = draw.getContext('2d');
    //开始路径
    context.beginPath();
    //绘制外圆
    context.arc(100,100,99,0,2*Math.PI,false);
    //绘制内圆
    context.moveTo(194,100);
    context.arc(100,100,94,0,2*Math.PI,false);
    //变换原点
    context.translate(100,100);
    //旋转表针
    context.rotate(1)
    //绘制分针
    context.moveTo(0,0);
    context.lineTo(0,-85);
    //绘制时针
    context.moveTo(0,0);
    context.lineTo(-65,0);
    //描边路径
    context.stroke();
    context.strokeStyle = '#f00';            
}    
 var img = document.getElementByTagNames('image')[0];
 context.drawImage(img,0,10,50,50,0,100,40,60);
 9个参数: 要绘制的图像 原图像|x|y|w|h|  目标图像|x|y|w|h|
 阴影主要是以下几个属性值
 shadowColor
 shadowOffsetX : X轴阴影偏移量
 shadowOffsetY : Y轴阴影偏移量
 shadowBlur : 模糊像素数,默认0,不模糊
 
 var context = draw.getContext('2d');
 //设置阴影
 context.shadowColor = 'rgba(210,210,210,.5)';
 context.shadowOffersetX = '5';
 
 渐变 创建一个新的线性渐变 createLinearGradient()方法,有四个参数|x1|y1|x2|y2|分别为起点的坐标和终点的坐标
 var gradient = context.createLinearGradient(30,30,70,70);
 gradient.addColorStop(0,'#fff');    //0表示开始
 gradient.addColorStop(1,'#000');    //1表示结束
 //使用定义好的渐变属性
 context.fillStyle = gradient;    //填充的时候放入渐变
 context.fillRect(30,30,50,50);
 
 创建一个放射渐变 createRadialGradient(),六个参数|x1|y2|radius1|x2|y2|radius2|分别为第一个圆心和半径第二个圆心和半径,用法和线性渐变相同
 var imgdata = context.getImageData(0,0,100,100);
 var data = imgdata.data,
     red = data[0],
     green = data[1],
     blue = data[2],
     alpha = data[3];
  
//实现一个灰色过滤器
var draw = document.getElementById('draw');
if(draw.getContext){
    var context = draw.getContext('2d');
    var img = document.getElementsByTagName('image')[0],
        imageData,data,
        i,len,average,
        red,green,blue,alpha;
    //绘制原始图像
    context.drawImage(img,0,0,100,100);
    //获取图像数据
    imageData = context.getImageData(0,0,img.width,img.height);
    data = imageData.data;
    for(i=0,len=data.length;i<len;i+=4){
        red = data[i];
        green = data[i+1];
        blue = data[i+2];
        alpha = data[i+3];
        //计算rgb的平均值
        average = Math.floor((red+green+blue)/3);
        //设置颜色值
        data[i] = average;
        data[i+1] = average;
        data[i+2] = average;
    }   
    imageData.data = data;
    //把数据绘制在画布
    context.putImageData(imageData,0,0)
}
原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_70134.html
HTML5 Canvas Canvas绘图