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. 线段树hdu-4027

    Smiling & Weeping   ---- 姑娘,倘若,我双手合十的愿望里有你呢 Problem Description A lot of battleships of evil are ...

  2. Blazor前后端框架Known-V1.2.15

    V1.2.15 更新日期 2023-09-17 更新内容 修复角色不启用相关问题 RadioList组件支持平原(Plain)模式 CheckList组件支持平原(Plain)模式 DataGrid组 ...

  3. Vue源码学习(七):合并生命周期(混入Vue.Mixin)

    好家伙,   1.使用场景 现在来,来想一下,作为一个使用Vue的开发者,假设现在我们要使用created(),我们会如何使用 1.1.  .vue文件中使用 <template> < ...

  4. CF1746F Kazaee

    prologue 数组范围一定要看好了开,不然容易我一样,调试调了一页多. 还有就是不要傻乎乎地只跑一次和哈希,因为和哈希(从下面地佬的题解中才知道)它其实算作是一种 trick(类比SA(Stimu ...

  5. 将GitBash设置为VS Code的默认终端

    这个东西搞了半天,真的无语...网上的东西都太旧了 注意:"terminal.integrated.shell.windows"自2021年4月起已弃用. 1.首先打开设置 2.进 ...

  6. Oracle和达梦:连接多行查询结果

    Oracle和达梦:LISTAGG连接查询结果 LISTAGG介绍 使用LISTAGG函数,您可以将多行数据连接成一个字符串,并指定分隔符进行分隔.这在需要将多行数据合并为单个字符串的情况下非常有用, ...

  7. 使用CEF(六)— 解读CEF的cmake工程配置

    距离笔者的<使用CEF>系列的第一篇文章居然已经过去两年了,在这么长一段时间里,笔者也写了很多其它的文章,再回看<使用CEF(一)- 起步>编写的内容,文笔稚嫩,内容单薄是显而 ...

  8. 记一次 .NET某新能源检测系统 崩溃分析

    一:背景 1. 讲故事 前几天有位朋友微信上找到我,说他的程序会偶发性崩溃,一直找不到原因,让我帮忙看一下怎么回事,对于这种崩溃类的程序,最好的办法就是丢dump过来看一下便知,话不多说,上windb ...

  9. docker入门加实战—网络

    docker入门加实战-网络 我们运行了一些容器,但是这些容器是否能够进行连通呢?那我们就来试一下. 我们查看一下MySQL容器的详细信息: 主要关注,Networks.bridge.IPAddres ...

  10. VM虚拟机在添加虚拟硬盘后无法boot的解决方案

    今天本想自己配一个mini Linux系统,但是在给系统增加一块硬盘的时候,发现出现以下问题 CentOS打不开(其实经过很久也能进去,但是指令全部失效) 由于不知道原因最后就重装了系统,奇怪的是,重 ...