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. 数据库重构之路,以 OrientDB 到 NebulaGraph 为例

    "本文由社区用户 @阿七从第一视角讲述其团队重构图数据库的过程,首发于阿七公众号「浅谈架构」" 原文出处:https://mp.weixin.qq.com/s/WIJNq-nuuA ...

  2. 实用工具、01 效率篇 | 几个操作快速提升 Typora 使用体验

    本篇文章旨在提高大家记笔记的效率,分享的工具请按个人需求安装 Typora-plugins 为 Typora 添加更多新功能,我最喜欢的是多标签页管理 obgnail/typora_plugin: T ...

  3. ionic4请求skynet服务器的资源跨域问题

    最近在做一个后台接口, 顺便用ionic4写了个简单的管理后台, 本来skynet管理后台监听的端口是6666, 但是发现chrome默认对一些接口不友善, 虽然可以通过设置启动参数来解决, 但是还是 ...

  4. DB2---创建返回结果集的函数

    在数据验证中,经常遇到需返回结果集的操作,故整理一个返回结果集的DB2函数,便于后期查阅 1.准备测试表 /*创建测试表:设置结果集的属性为表字段*/ CREATE TABLE Test_EXWAST ...

  5. 算法2:寻找吸血鬼数(JS)

    任务二:寻找吸血鬼数 打印所有4位吸血鬼数和它们的獠牙   提示:一共有7个: 吸血鬼数: -该鬼的位数为偶数: -该数的所有位中.是0的位少一半: -该数每一位上的数字重新组合为两个位数相等的数,乘 ...

  6. Oracle11g安装教程(带安装包)

    找了半天没在官网上找到Oracle11g的安装包下载,又找了半天,终于在网上的一个教程里找到安装包的网盘链接.现在在这记一下防止以后重新找麻烦. 网盘链接 百度云盘链接:[https://pan.ba ...

  7. 探索CPU的黑盒子:解密指令执行的秘密

    引言 在我们之前的章节中,我们着重讲解了CPU内部的处理过程,以及与之密切相关的数据总线知识.在这个基础上,我们今天将继续深入探讨CPU执行指令的相关知识,这对于我们理解计算机的工作原理至关重要. C ...

  8. Vue之事件冒泡

    1. 原生事件冒泡 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. Kubernetes跨StorageClass迁移,切换Rainbond默认SC

    基于主机安装或基于Kubernetes安装的 Rainbond 集群(均使用默认参数安装),默认使用的共享文件存储是 NFS ,以 Pod 方式运行在 Kubernetes 中,但这种方式也有一些无法 ...

  10. ElectronReactAdmin跨平台管理系统|electron27+react18后台模板EXE

    基于electron27+react18+arco电脑端后台管理程序EXE实例ElectronRAdmin. electron27-react18-admin 基于跨平台技术Electron集成Vit ...