Canvas绘图的实现

<canvas>元素负责在页面中设定一个区域,通过JS动态地在这个区域中绘制图形。

IE9+、Firefox1.5+、Safari2+、Opera9+、Chrome、IOS版Safari以及Android版WebKit都在一定程度上支持<canvas>元素。



1、基本用法

(1)HTML部分的代码

1 /* width和height属性,指定绘图的区域的大小 */
2 <canvas id="picture" width="200" height="200">
3 /* 标签之间的内容在浏览器不支持<canvas>元素时显示 */
4 A picture about apple.
5 </canvas>

<canvas>元素对应的DOM元素也有width和height属性,可随意修改。

可以通过CSS添加样式,如果不添加任何样式或不绘制任何图形,在页面上是看不到该元素的。



(2)JS部分的代码

1 var picture = document.getElementById("picture");
2 // 确定浏览器支持<canvas>元素
3 if(picture.getContext){
4 // 取得绘图上下文对象
5 var context = picture.getContext("2d");
6 // ......
7 }

(3)导出在<canvas>元素上绘制的图像

 1 var picture = document.getElementById("picture");
2 // 确定浏览器支持<canvas>元素
3 if(picture.getContext){
4 // 取得图像的数据URL
5 var imgURL = picture.toDataURL("image/png");
6 // 显示图像
7 // toDataURL方法接收图像的MIME类型格式作为参数,适合用来创建图像的任何上下文
8 var image = document.createElement("img");
9 image.src = imgURL;
10 document.body.appendChild(image);
11 }

默认情况下,浏览器会将图像编码为PNG格式(除非另行指定)。

Firefox和Opera也支持基于
"image/jpeg"参数的JPEG编码格式。

注:如果绘制到画布上的图像源自不同的域,toDataURL()方法会抛出错误。



2、填充和描边

使用2D绘图上下文提供的方法,可以绘制简单的2D图形,如矩形、弧形和路径。2D上下文的坐标开始于<canvas>元素的左上角,原点坐标是(0,0)。所有坐标值基于这个原点计算,x值越靠右越大,y值越靠下越大。

填充:用指定的样式(颜色、渐变或图像)填充图形。

描边:只在图形的边缘画线。

填充和描边操作的结果取决于两个属性:fillStyle 和 strokeStyle 。属性的值可以是字符串、渐变对象和模式对象,默认值都是 "#000000"。指定表示颜色的字符串值时,可以使用CSS中指定颜色值的任何格式:颜色名、十六进制码、rgb、rgba、hsl和hsla。

1 var picture = document.getElementById("picture");
2 // 确定浏览器支持<canvas>元素
3 if(picture.getContext){
4 // 取得绘图上下文对象
5 var context = picture.getContext("2d");
6 context.strokeStyle = "red"; // 边为红色
7 context.fillStyle = "#0000ff"; // 填充颜色为蓝色
8 }

3、绘制矩形

矩形是唯一一种可以直接在2D上下文中绘制的形状。

绘制矩形相关的方法:

  fillRect():在画布上绘制的矩形会用指定的颜色填充,颜色由fillStyle属性指定;

  strokeRect():在画布上绘制的矩形会用指定的颜色描边,颜色由strokeStyle属性指定;

  clearRect():清除画布上的矩形区域,把绘制上下文中的某一矩形区域变透明。

以上3个方法都接收4个参数(单位是像素):

  矩形的x坐标;

  矩形的y坐标;

  矩形的宽度;

  矩形的高度。

 1 var picture = document.getElementById("picture");
2 // 确定浏览器支持<canvas>元素
3 if(picture.getContext){
4 // 取得绘图上下文对象
5 var context = picture.getContext("2d");
6
7 // 绘制红色矩形,粉色描边,从坐标(10, 10)处开始绘制,宽和高为50像素
8 context.fillStyle = "#ff0000";
9 context.strokeStyle = "pink";
10 context.fillRect(10, 10, 50, 50);
11
12 // 绘制半透明的蓝色矩形,黄色描边,在第一个矩形上面绘制第二个矩形
13 context.fillStyle = "rgba(0,0,255,0.5)";
14 context.strokeStyle = "#00ff00";
15 context.fillRect(30, 30, 50, 50);
16
17 // 在两个矩形重叠的地方清除一个小矩形,变成透明
18 context.clearRect(40, 40, 10, 10);
19 }

设置描边相关的属性:

  lineWidth属性:控制描边线条的宽度,可以是任意整数。

  lineCap属性:控制线条末端的形状是平头、圆头还是方头( "butt"、"round"或"square")。

  lineJoin属性:控制线条相交的方式是圆交、斜交还是斜接( "round"、"bevel"或"miter")。

Javascript实现Canvas绘图 —— 2D绘图之填充、描边及绘制矩形的更多相关文章

  1. 如何使用canvas进行2d绘图

    canvas 的 2D context 可以绘制简单的 2D 图形.它的 2D context 坐标开始于 <canvas> 元素的左上角,原点坐标是(0,0).所有的坐标值都基于这个原点 ...

  2. HTML5 Canvas 2D绘图

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4851774. ...

  3. 绘图——Android绘图基础:Canvas、Paint等

    Android的绘图应该继承View组件,并重写它的onDraw(Canvas canvas)方法即可. 重写onDraw(Canvas canvas)方法时涉及一个绘图API:Canvas,Canv ...

  4. Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形

    来源:http://www.ido321.com/968.html 一.Canvas的基础知识 Canvas是HTML 5中新增的元素,专门用于绘制图形.canvas元素就相当于一块“画布”,一块无色 ...

  5. 《JAVASCRIPT高级程序设计》Canvas绘图-2D上下文

    Canvas是HTML5添加的新元素,这个元素负责在页面中设定一个区域,然后通过JavaScript动态的在这个区域绘制图形.<canvas>由几组API组成,除了具备基本绘图能力的2D上 ...

  6. javascript的canvas绘图的基本用法

    <canvas>是HTML里面非常强大的元素,利用它结合js可以实现很多动画效果,大大增强交互性.下面,我想用图文并茂的方式阐述一下canvas的绘图机制的基础内容,话不多说,先上代码: ...

  7. 每天一个JavaScript实例-canvas绘图

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  8. Qt中2D绘图问题总结(一)----------基本的绘制与填充

    刚刚开始学习Qt不久,才开始渐渐地熟悉基础内容,学习过程中的一些知识的总结和感悟希望通过博客记录下来,与大家分享学习的同时,也是对自己坚持下去的鞭策,废话不多说了,开始第一次的小总结吧. Qt提供了强 ...

  9. Qt 2D绘图之一:基本图形绘制和渐变填充

    Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.它们三者的关系如下图所示: QP ...

  10. Qt 2D绘图 渐变填充(三种渐变方式)

    在qt中提供了三种渐变方式,分别是线性渐变,圆形渐变和圆锥渐变.如果能熟练应用它们,就能设计出炫目的填充效果. 线性渐变: 1.更改函数如下: void Dialog::paintEvent(QPai ...

随机推荐

  1. 全局安装oh-my-zsh保姆教程

    我的系统是CentOS 7.6,按流程走完后可以实现系统内所有用户都默认使用zsh且插件配置共享省去重复编写配置或软连接的烦恼 1 安装git yum -y install git 2 安装zsh y ...

  2. Webpack性能优化 SplitChunksPlugin的使用详解

    使用前景 在vue.react等使用webpack为项目打包工具的前端项目,在开发过程中,随着项目功能的逐渐增加,项目整体体积的不断增加,打包的时长和打包后部署的项目体积也在不停的增长,这样可能会导致 ...

  3. Haproxy搭建 Web 群集实现负载均衡

    Haproxy搭建 Web 群集实现负载均衡 1 Haproxy HAProxy是可提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,是免费.快速并且可靠的一种解决方案.HAProxy非常适用 ...

  4. Go 1.22 中的 For 循环

    原文在这里. 由 David Chase and Russ Cox 发布于2023年9月19日 Go 1.21 版本包含了对 for 循环作用域的预览更改,我们计划在 Go 1.22 中发布此更改,以 ...

  5. vue~封装一个文本框添加与删除的组件

    标签组件的效果如下 组件作用 这是一个div,包含了两个文本框,后面是添加和删除按钮 添加按钮复制出新的div,除了文本框没有内容,其它都上面一样 删除按钮将当前行div删除 组件实现 <tem ...

  6. oracle 12C提示:ORA-28001口令已经失效

    oracle 12C 提示口令已经失效,此用户是pdb用户,解决办法:1 系统管理员身份登陆 sqlplus / as sysdba 2 转到对应的pdb容器中 alter session set c ...

  7. C#堆排序算法

    前言 堆排序是一种高效的排序算法,基于二叉堆数据结构实现.它具有稳定性.时间复杂度为O(nlogn)和空间复杂度为O(1)的特点. 堆排序实现原理 构建最大堆:将待排序数组构建成一个最大堆,即满足父节 ...

  8. 自学一周python做的一个小游戏《大球吃小球》

    需求 1,显示一个窗口. 2,我们要做到的功能有鼠标点击屏幕生成小球. 3,生成的小球大小随机,颜色随机,向随机方向移动,速度也随机. 4,大的球碰到小球时可以吃掉小球,吃掉后会变大. 5,球碰到边界 ...

  9. oracle命令7 -rman命令

    $ rman targer /RMAN> show all; #查看rman中所有的配置RMAN configuration parameters for database with db_un ...

  10. 用go封装和实现扫码登录

    用go封装和实现扫码登录 本篇为用go设计开发一个自己的轻量级登录库/框架吧 - 秋玻 - 博客园 (cnblogs.com)的扫码登录业务篇,会讲讲扫码登录的实现,给库/框架增加新的功能,最后说明使 ...