Javascript实现Canvas绘图 —— 2D绘图之填充、描边及绘制矩形
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绘图之填充、描边及绘制矩形的更多相关文章
- 如何使用canvas进行2d绘图
canvas 的 2D context 可以绘制简单的 2D 图形.它的 2D context 坐标开始于 <canvas> 元素的左上角,原点坐标是(0,0).所有的坐标值都基于这个原点 ...
- HTML5 Canvas 2D绘图
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/ShiJiaqi. http://www.cnblogs.com/shijiaqi1066/p/4851774. ...
- 绘图——Android绘图基础:Canvas、Paint等
Android的绘图应该继承View组件,并重写它的onDraw(Canvas canvas)方法即可. 重写onDraw(Canvas canvas)方法时涉及一个绘图API:Canvas,Canv ...
- Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形
来源:http://www.ido321.com/968.html 一.Canvas的基础知识 Canvas是HTML 5中新增的元素,专门用于绘制图形.canvas元素就相当于一块“画布”,一块无色 ...
- 《JAVASCRIPT高级程序设计》Canvas绘图-2D上下文
Canvas是HTML5添加的新元素,这个元素负责在页面中设定一个区域,然后通过JavaScript动态的在这个区域绘制图形.<canvas>由几组API组成,除了具备基本绘图能力的2D上 ...
- javascript的canvas绘图的基本用法
<canvas>是HTML里面非常强大的元素,利用它结合js可以实现很多动画效果,大大增强交互性.下面,我想用图文并茂的方式阐述一下canvas的绘图机制的基础内容,话不多说,先上代码: ...
- 每天一个JavaScript实例-canvas绘图
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- Qt中2D绘图问题总结(一)----------基本的绘制与填充
刚刚开始学习Qt不久,才开始渐渐地熟悉基础内容,学习过程中的一些知识的总结和感悟希望通过博客记录下来,与大家分享学习的同时,也是对自己坚持下去的鞭策,废话不多说了,开始第一次的小总结吧. Qt提供了强 ...
- Qt 2D绘图之一:基本图形绘制和渐变填充
Qt中提供了强大的2D绘图系统,可以使用相同的API在屏幕和绘图设备上进行绘制,它主要基于QPainter.QPaintDevice和QPaintEngine这三个类.它们三者的关系如下图所示: QP ...
- Qt 2D绘图 渐变填充(三种渐变方式)
在qt中提供了三种渐变方式,分别是线性渐变,圆形渐变和圆锥渐变.如果能熟练应用它们,就能设计出炫目的填充效果. 线性渐变: 1.更改函数如下: void Dialog::paintEvent(QPai ...
随机推荐
- 数据库重构之路,以 OrientDB 到 NebulaGraph 为例
"本文由社区用户 @阿七从第一视角讲述其团队重构图数据库的过程,首发于阿七公众号「浅谈架构」" 原文出处:https://mp.weixin.qq.com/s/WIJNq-nuuA ...
- 实用工具、01 效率篇 | 几个操作快速提升 Typora 使用体验
本篇文章旨在提高大家记笔记的效率,分享的工具请按个人需求安装 Typora-plugins 为 Typora 添加更多新功能,我最喜欢的是多标签页管理 obgnail/typora_plugin: T ...
- ionic4请求skynet服务器的资源跨域问题
最近在做一个后台接口, 顺便用ionic4写了个简单的管理后台, 本来skynet管理后台监听的端口是6666, 但是发现chrome默认对一些接口不友善, 虽然可以通过设置启动参数来解决, 但是还是 ...
- DB2---创建返回结果集的函数
在数据验证中,经常遇到需返回结果集的操作,故整理一个返回结果集的DB2函数,便于后期查阅 1.准备测试表 /*创建测试表:设置结果集的属性为表字段*/ CREATE TABLE Test_EXWAST ...
- 算法2:寻找吸血鬼数(JS)
任务二:寻找吸血鬼数 打印所有4位吸血鬼数和它们的獠牙 提示:一共有7个: 吸血鬼数: -该鬼的位数为偶数: -该数的所有位中.是0的位少一半: -该数每一位上的数字重新组合为两个位数相等的数,乘 ...
- Oracle11g安装教程(带安装包)
找了半天没在官网上找到Oracle11g的安装包下载,又找了半天,终于在网上的一个教程里找到安装包的网盘链接.现在在这记一下防止以后重新找麻烦. 网盘链接 百度云盘链接:[https://pan.ba ...
- 探索CPU的黑盒子:解密指令执行的秘密
引言 在我们之前的章节中,我们着重讲解了CPU内部的处理过程,以及与之密切相关的数据总线知识.在这个基础上,我们今天将继续深入探讨CPU执行指令的相关知识,这对于我们理解计算机的工作原理至关重要. C ...
- Vue之事件冒泡
1. 原生事件冒泡 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- Kubernetes跨StorageClass迁移,切换Rainbond默认SC
基于主机安装或基于Kubernetes安装的 Rainbond 集群(均使用默认参数安装),默认使用的共享文件存储是 NFS ,以 Pod 方式运行在 Kubernetes 中,但这种方式也有一些无法 ...
- ElectronReactAdmin跨平台管理系统|electron27+react18后台模板EXE
基于electron27+react18+arco电脑端后台管理程序EXE实例ElectronRAdmin. electron27-react18-admin 基于跨平台技术Electron集成Vit ...