Canvas学习总结

Canvas学习总结

一. 什么是Canvas

Canvas属于HTML5新特性API,主要增强在浏览器绘制图像功能;当然一些简单的矢量图我们可以通过html标签进行拼接组装,也可以绘制SVG图像;但是对于位图(.jpg/.png)等格式的图片处理canvas有着不可比拟的优势;

 

二.canvas的基本实现

1.怎样定义canvas

canvas的实现其实是通过<canvas>标签和HTML5提供的JS API进行操作的,在html文件中定义canvas标签,其实表示定义了一块画布了;接下来就可以通过JS获取画布的上下文并进行操作;

代码如下:

<!doctype html>
<html>
<head>
<title>canvas基本实现</title>
</head>

<body>
<canvas id="my_canvas"></canvas>
</body>
<script language="javascript">
    var cvs=document.getElementById("my_canvas"); //获取canvas画布
    var ctx=cvs.getContext("2d"); //获取canvas画布2D执行环境
    //dosometing
</script>
</html>

 

上述代码所示,通过DOM选择器获取相应的canvas标签,然后通过getContext()方法获取到canvas 画布的绘画上下文环境,其中”2d”表示提供2D渲染来绘制图像;

 2.canvas兼容性如何

canvas兼容性问题,如下图所示:

如果浏览器不支持canvas,可能会导致canvas JSAPI会报错,由于JS属于自上 而下执行,遇到错误会退出执行(在没有处理错误的情况下);所以在使用cavas JS时可 以先判断getContext存不存在;或者通过try catch进行错误处理;代码如下:

<script language="javascript">
    var cvs=document.getElementById("my_canvas"); //获取canvas画布
    var ctx=null;
    try{
        ctx=cvs.getContext("2d"); //获取canvas画布2D执行环境
    }catch(e){
        console.error("该浏览器不支持Canvas画布功能");
    }
    //dosometing
</script>

3.怎样设置canvas画布的宽度和高度呢?

这里为什么要单独讲,因为有些人可能会用CSS设置宽高;对于canvas的宽高,可以在canvas标签中定义width/height属性或者通过获取到canvas标签DOM再进行相应的设置;

例如:<canvas id="canvas" width="150" height="150"></canvas>

<body>
<canvas id="my_canvas"></canvas>
</body>
<script language="javascript">
    var cvs=document.getElementById("my_canvas"); //获取canvas画布
        cvs.width="150";
        cvs.height="150";
    var ctx=null;
    try{
        ctx=cvs.getContext("2d"); //获取canvas画布2D执行环境
    }catch(e){
         console.error("该浏览器不支持Canvas画布功能");
    }
    //dosometing
</script>

其中width/height默认单位是像素(也只能是像素);注意不能通过CSS中的width/height属性进行设置,因为在CSS中设置width/height,会拉升画布的大小,相当于放大/缩小的实现,也就会模糊canvas画布内容;效果如下:

总结:canvas画布宽度/高度一定不能通过CSS来设置,设置宽度/高度单位只能是像素,若想自适应画布需要通过JS进行控制;

 

4. Canvas图片绘制:

我们可以通过drawImage方法在canvas标签上绘制图片;图片来源可以是通过new Image(),img标签等方式获得;以下通过new Image()来获取图片;

drawImage(img,sx,sy,sw,sh,dx,dy,dw,dh)方法,img表示图像源;其中sx,sy,sw,sh表示显示的位置和大小;dx,dy,dw,dh表示裁剪的位置和大小;其中sw,sh可以控制图片的缩放,但sw/sh超过图片自身的宽度/高度就会有放大效果,小于自身的宽度/高度就会产生缩小的效果;效果图如下:

代码如下:

<body>
<canvas id="my_canvas"></canvas>
</body>
<script language="javascript">
    var cvs=document.getElementById("my_canvas"); //获取canvas画布
        cvs.width="150";
        cvs.height="150";
    var ctx=null;
    try{
        ctx=cvs.getContext("2d"); //获取canvas画布2D执行环境
        var img=new Image();
        img.src="./test.jpg";
        img.onload=function(){
            ctx.drawImage(img,0,0,150,200);
        }
    }catch(e){
         console.error("该浏览器不支持Canvas画布功能");
    }
    //dosometing
</script>

注意img.src=”./test.jpg”;在这里单纯的显示不会有任何问题或报错;

但是如果要对图像进行操作,比如像素级操作,获取图像像素的信息数据就会跨域的报错;也就是说,如果要对canvas绘制的图片进行像素级的操作时,需要将html文件和图片文件放置服务器上,并且同源(同协议,同IP,同端口);同时对于图片的引入,也不能按照上诉方式引入,引入方式改成如下所示:

img.src="http://localhost:8080/test.jpg";

例如在服务器的根目录下,并且地址为:http://localhost:8080

 

5. 像素级操作:

Canvas属于位图画布,它是以像素为单位拼接而成的图像;说白了canvas画布的内容都是通过许多个像素拼接而成的;所以我们可以通过ImageData对象获取canvas画布像素信息;

ImageData有width,height,data这3个属性,前两个属性就不解释了,data属性是Uint8ClampedArray类型的一维数组,包含着RGBA格式的整型数据,范围在0至255之间,虽然是一维数组,但是数据确实4个一组为一个像素信息数据;例如一个像素的数据,data就只有4个值(RGBA)的数组,如果是100个像素的数据,那data就有4*100个值的数组;

获取ImageData的方法:

createImageData(w,h);
getImageData(left,top,width,height);

createImageData()方法创建个空的ImageData对象,所有像素默认是透明黑;getImageData()获取对象像素信息,是实际canvas画布图片的像素信息;在canvas中写入像素数据putImageData(newImageData,dx,dy);newImageData为新像素对象数据,dx,dy属于canvas左上角位置;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Canvas中,可以使用三种方法来绘制矩形。第一种方法是使用fillRect(x, y, width, height)来绘制一个填充的矩形,其中x和y是矩形左上角的坐标,width和height是矩形的宽度和高度。这个方法会填充矩形内部的颜色,默认为黑色。\[1\] 第二种方法是使用strokeRect(x, y, width, height)来绘制一个矩形的边框,其中x和y是矩形左上角的坐标,width和height是矩形的宽度和高度。这个方法会绘制矩形的边框,默认为一像素实心黑色。\[1\] 第三种方法是使用clearRect(x, y, width, height)来清除指定矩形区域,使清除部分完全透明。这个方法可以用来擦除之前绘制的内容。\[1\] 在示例代码中,可以看到如何在Canvas中绘制矩形。首先,通过获取Canvas的上下文对象ctx,然后使用ctx.fillRect()方法绘制填充的矩形,使用ctx.strokeRect()方法绘制矩形的边框,使用ctx.clearRect()方法清除指定矩形区域。\[2\] 例如,可以使用ctx.fillRect(0,0,50,50)来绘制一个填充的矩形,左上角坐标为(0,0),宽度为50,高度为50。\[2\] 总结起来,Canvas提供了三种方法来绘制矩形:fillRect()用于绘制填充的矩形,strokeRect()用于绘制矩形的边框,clearRect()用于清除指定矩形区域。可以根据需要选择合适的方法来绘制矩形。\[1\] #### 引用[.reference_title] - *1* *3* [26 canvas绘制矩形](https://blog.csdn.net/u014331138/article/details/109344813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [学习Canvas基础-绘制矩形](https://blog.csdn.net/qq_67983277/article/details/127872447)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值