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. 【译】在 Visual Studio 2022 中安全地在 HTTP 请求中使用机密

    在 Visual Studio 2022 的17.8 Preview 1版本中,我们更新了 HTTP 文件编辑器,使您能够外部化变量,从而使跨不同环境的 Web API 测试更容易.此更新还包括以安全 ...

  2. 一文搞懂 OTP 双因素认证

    GitHub 在 2023 年 3 月推出了双因素认证(two-factor authentication)简称 2FA,并且承诺所有在 GitHub 上贡献的开发者在 2023 年底前启用双因素认证 ...

  3. 解决Promise的多并发问题

    提起控制并发,大家应该不陌生,我们可以先来看看多并发,再去聊聊为什么要去控制它 多并发一般是指多个异步操作同时进行,而运行的环境中资源是有限的,短时间内过多的并发,会对所运行的环境造成很大的压力,比如 ...

  4. SpringBoot整合XXLJob

    目录 XXLJob简介 特性 模块 安装调度中心 初始化数据库 配置 启动 整合执行器 pom yml XxlJobConfig 启动执行器 实践 简单的定时任务 在执行器创建任务 在调度中心创建执行 ...

  5. Go 复合类型之字典类型介绍

    Go 复合类型之字典类型介绍 目录 Go 复合类型之字典类型介绍 一.map类型介绍 1.1 什么是 map 类型? 1.2 map 类型特性 二.map 变量的声明和初始化 2.1 方法一:使用 m ...

  6. 2020 5 17 codeforces

    cf还没结束,就开始写总结了.cf确实是个好东西,能够直接暴露出弱点和增加刷题量.以后还是要多打打的.这次我发现自己的码力还是不行.一个二分都要调好久.唉T1sb题,就是入门用的.题目看不懂...写了 ...

  7. 微信小程序image图片自适应宽度比例显示的方法

    我们都知道微信小程序的组件image是用来显示图片的,它有一下几个属性:1.src              图片资源地址2.mode          图片裁剪.缩放的模式3.binderror   ...

  8. Rustlings通关记录与题解

    2023年6月19日决定对rust做一个重新的梳理,整理今年4月份做完的rustlings,根据自己的理解来写一份题解,记录在此. 周折很久,因为中途经历了推免的各种麻烦事,以及选择数据库作为未来研究 ...

  9. My Code Style

    大家都在写,跟风. 头文件 万能头.因为我刚学 OI 的时候怎么都背不住 algorithm 怎么拼( 变量 数组开全局,一些前后重名/只在某一部分用的变量开局部. 尽量不使用指针/ stl 迭代器等 ...

  10. CSP-2023 初赛游记

    9.16 上午 今天就不早读了. 去前做了个 2019 的题,60 多分,感觉挺危. 去比赛前 30min 发现没带身份证,去宿舍拿的. 前 10min 发现没有笔,借了一些,但是发现还有一个小时才开 ...