1.什么是canvas

  canvas也被叫做画布,是在JavaScript中完成网页图像制作的一个重要的途径,画布是一个矩形区域,在这个矩形区域中你可以利用好这里的每一个像素。同样在canvas中也有着别样的,快捷的,多种多样的绘制路径、矩形、圆形、字符以及添加图像的方法。

2.如何创建一个canvas元素

  在HTML5中创建一个canvas元素,你可以设置它的id名,同时也可以设置canvas的宽度和宽度、当然如果我们要绘制的话还要获取一下,canvas的context。

var canvas = document.getElementById("canvas");
var ctx = canvas.getContext("2d");

3.如何在canvas中绘制图形

  在canvas中提供了很多简单绘制图形的方法、现在我们开始介绍

  3.1如何绘制一个矩形、矩形可以说是我们在绘制图形中比较常用的基础图形之一了,在绘制一个举行的时候,最基本的四个要素无非就是,矩形开始的时候的水平位置 x ,开始为垂直位置 y ,矩形的宽度 width , 矩形的高度 height、

    3.1.1 最基础的矩形, rect()来绘制矩形       

ctx.rect(20,20,150,100); // rect(x,y,width,height)
ctx.stroke();

    3.1.2 fillRect():有填充色的矩形(默认的填充色是黑色)

ctx.fillRect(20,20,150,100); // fillRect(x,y,width,height)

    3.1.3 strokeRect() : 未填充的矩形也可以理解为一个矩形边框

ctx.strokeRect(20,20,150,100); // strokeRect(x,y,width,height)

    3.1.4 clearRect () :清除一个矩形区域

ctx.fillRect(0,0,300,150); // 原来画的矩形区域
ctx.clearRect(20,20,100,50); // 清除的矩形区域 (可以看到在清除区域内没有填充色、证明该区域已经被清除)

  3.2如何绘制一个圆形。在canvas中圆形也是比较常用的工具,同时圆和弧线的区别就是,弧线是圆的一部分,所以说我们可以根据角度来绘制我们需要的弧线

    3.1.1 arc():绘制一个圆和部分圆:绘制一个圆有五个要素:1.圆心的横坐标、2.圆心的纵坐标、3.圆的半径、4.圆的起始角度、5.圆的结束角度 (Math.PI =π=180度)

ctx.arc(250,250,100,0,Math.PI*2); // 圆心坐标为(250,250),半径为100的圆
ctx.stroke();

    3.1.2画一个圆弧

ctx.arc(250,250,100,0,Math.PI,false); //  半圆 //前面的参数是一样的 最后的false是默认值
ctx.stroke(); ctx.arc(250,250,100,0,Math.PI,true); // 一个圆减去所画的部分,的剩余部分;(也可以理解为互补的部分)

  3.3 如何通过利用点来绘制线条,在构图中线条是极其重要的,现在我们来说一下如何通过点来构建线条

ctx.beginPath(); // 开始绘图
ctx.moveTo(250,250); // moveTo(x,y) 开始绘图的点的坐标
ctx.lineTo(500,500); // lineTo(x,y) 定义结束点的坐标
ctx.closePath(); // 关闭路径
ctx.stroke(); // 将两个点用线连接

  3.3.1如何利用点绘制一个三角形

ctx.beginPath(); // 开始绘图 (会将图形进行一个自动连接,形成一个封闭的图形)
ctx.moveTo(100,100); // 开始点的位置
ctx.lineTo(250,250); //
ctx.lineTo(400,400); //
ctx.closePath(); // 关闭路径(作为一个封闭图形存在)
ctx.stroke(); // 用线连接

4.canvas中的一些简单的效果

  4.1 fillStyle : 更改用于填充绘画的样式:

ctx.fillStyle = "red" ; // 更改填充颜色为红色

  4.2 strokeStyle:官方解释为更改用于笔触的颜色;也可以简单理解为更改连接线的颜色

ctx.strokeStyle = "red"; // 更改笔触颜色为红色

  4.3 shadowColor:设置阴影颜色、 shadowBlur:后面加数值:表示阴影模糊的程度,默认值是0

ctx.shadowBlur=20; //设置模糊的级别
ctx.shadowColor="black"; // 设置阴影颜色为black;
ctx.fillStyle="red";
ctx.fillRect(20,20,100,80); // 在矩形周围会产生一个黑色的阴影

  4.4 shadowOffsetX: 设置阴影与原图形的水平距离

ctx.shadowOffsetX //  属性设置或返回阴影与形状的水平距离。
ctx.shadowOffsetX=0 // 指示阴影位于形状的正下方。
ctx.shadowOffsetX=20 // 指示阴影位于形状 left 位置右侧的 20 像素处。
ctx.shadowOffsetX=-20 // 指示阴影位于形状 left 位置左侧的 20 像素处。

  4.5 shadowOffsetY:设置阴影与原图形的垂直距离

ctx.shadowOffsetY  // 属性设置或返回阴影与形状的垂直距离。
ctx.shadowOffsety=0 // 指示阴影位于形状的正下方。
ctx.shadowOffsetY=20 // 指示阴影位于形状 top 位置下方的 20 像素处。
ctx.shadowOffsetY=-20 // 指示阴影位于形状 top 位置上方的 20 像素处。

  4.6 createLinearGradient(): 创建线性渐变 createLinearGradient(x0,y0,x1,y1)

    x0(渐变开始的横坐标)、y0(渐变开始的纵坐标)、x1(渐变结束的横坐标)、y1(渐变结束的纵坐标)

var my_gradient=ctx.createLinearGradient(0,0,0,170);
my_gradient.addColorStop(0,"black"); // 设置渐变开始颜色
my_gradient.addColorStop(1,"white"); // 设置渐变结束颜色
ctx.fillStyle=my_gradient;
ctx.fillRect(20,20,150,100);

  4.7 creatPattern():在指定方向内重复指定的元素 (指定元素可以是图片、画布元素、视频元素)

    //方式:repeat(默认、水平和垂直方向上都重复)repeat-x(水平)repeat-y(垂直) no-repeat(不重复)

var img=document.getElementById("lamp"); // 获取img对象
var pat=ctx.createPattern(img,"repeat"); // 指定元素、重复的方式
ctx.rect(0,0,150,100);
ctx.fillStyle=pat;
ctx.fill();

  4.8 createRadialGradient():创建径向渐变;createRadialGradient(x0,y0,r0,x1,y1,r1)

    //x0(渐变开始圆的横坐标),y0(渐变开始圆的纵坐标),r0(渐变开始圆的半径)

       x1(渐变结束圆的横坐标),y1(渐变结束圆的纵坐标),r1(渐变结束圆的半径)

var grd=ctx.createRadialGradient(75,50,5,90,60,100);
grd.addColorStop(0,"red");
grd.addColorStop(1,"white");
ctx.fillStyle=grd;
ctx.fillRect(10,10,150,100);

  4.9 addColorStop():规定渐变对象中的颜色和位置,在渐变过程中,该语句至少定义一次

    addColorStop(stop,color):stop是介于0~1之间的数,表示到开始到结束之间的位置

  4.10 lineCap :设置线条末端的样式

ctx.beginPath();
ctx.lineCap="butt"; // 默认,向每个线条的末端添加平直的边缘
ctx.lineCap="round";// 向线条的末端添加一个圆形线帽
ctx.lineCap="square"; // 向线条末端添加一个方形的线帽
ctx.moveTo(20,20);
ctx.lineTo(20,200);
ctx.stroke();

  4.11 lineJoin:创建边角的类型  

ctx.beginPath();
ctx.lineJoin="miter"; // 默认创建尖角
ctx.lineJoin="round"; // 创建圆角
ctx.lineJoin="bevel"; // 创建斜角
ctx.moveTo(20,20);
ctx.lineTo(100,50);
ctx.lineTo(20,100);
ctx.stroke();

  4.12 lineWidth:设置当前线条宽度

ctx.lineWidth = 10; // 直接加Number就可以,默认值是0

  4.13 clip():从原始画布中剪切任意形状和尺寸

ctx.clip();

  4.14 arcTo():arcTo(x1,y1,x2,y2); x1(弧的起点的x坐标),y1(弧的起点的y坐标),x2(弧的终点的x坐标),y2(弧的终点的y坐标)

ctx.beginPath();
ctx.moveTo(20,20); // 创建一个开始点
ctx.lineTo(100,20); // 创建一个连接点
ctx.arcTo(150,20,150,70,50); // 创建一个弧线
ctx.lineTo(150,120); //再创建一个连接点
ctx.stroke(); // 勾画

  4.15 scale():缩放当前图像更大或者是更小  注意:在这里放大或缩小的不仅仅是原图像的宽度和高度还有定位也放大或者缩小了

      scale(width,height);第一个参数是改变宽度的大小,第二个参数代表是改变高度的大小

ctx.strokeRect(5,5,25,15); //先创建一个对比图,以便于观察大小的变化
ctx.strokeRect(10,10,30,20);//再创建一个对比图,观察定位的变化
ctx.scale(2,2); // 宽度放大200%,高度方法200%;
ctx.strokeRect(5,5,25,15);//创建矩形

  4.16 rotate():旋转当前绘图

ctx.rotate(20*Math.PI/180); // 旋转20度
// num*Math.PI/180 旋转num度

  4.17 重新映射画布上的(0,0)位置

ctx.fillRect(10,10,100,50);
ctx.translate(70,70); // 将新的(0,0)位置设置为(70,70)
ctx.fillRect(10,10,100,50);

  4.18 transform()方法替换当前的变换矩阵。transform(a,b,c,d,e,f)

      a:水平缩放绘图、b:水平倾斜绘图、c:垂直倾斜绘图、d:垂直缩放绘图、e:水平移动绘图、f:垂直移动绘图

ctx.fillStyle="yellow";
ctx.fillRect(0,0,250,100);
ctx.transform(1,0.5,-0.5,1,30,10);
ctx.fillStyle="red";
ctx.fillRect(0,0,250,100);

  4.19 fillText() 在画布上绘制填色的文本。文本的默认颜色是黑色

      fillText(text,x,y):text:要绘制的文本、x:开始绘制文本的横坐标、y:开始绘制文本的纵坐标

ctx.fillText("Hello World!",10,50);

  4.20 strokeText()在画布上绘制无填充文本

      strokeText(text,x,y):text:要绘制的文本、x:开始绘制文本的横坐标、y:开始绘制文本的纵坐标

ctx.fillText("Hello World!",10,50);

  4.21 font():设置当前画布上的字体的属性

ctx.font="30px Arial"; // 字体大小  字体样式
ctx.fillText("Hello World",10,50);

  4.22 textAlign 文本内容的对齐方式

ctx.strokeStyle="red";
ctx.moveTo(150,20);
ctx.lineTo(150,170); // 绘制一条竖线从而更加清晰的看出效果
ctx.stroke();
ctx.font="15px Arial";
ctx.textAlign="start"; // 文本在指定的位置开始
ctx.fillText("textAlign=start",150,60);
ctx.textAlign="end"; // 文本在指定的位置结束
ctx.fillText("textAlign=end",150,80);
ctx.textAlign="left"; // 文本在指定的位置开始
ctx.fillText("textAlign=left",150,100);
ctx.textAlign="center"; // 文本的中心放置在指定位置
ctx.fillText("textAlign=center",150,120);
ctx.textAlign="right"; // 文本在指定的位置结束
ctx.fillText("textAlign=right",150,140);

  

 

  

 

  

  

     

         

画布 canvas 的相关内容的更多相关文章

  1. 微信小程序导出当前画布指定区域的内容并生成图片保存到本地相册(canvas)

    最近在学小程序,在把当前画布指定区域的内容导出并生成图片保存到本地这个知识点上踩坑了. 这里用到的方法是: wx.canvasToTempFilePath(),该方法作用是把当前画布指定区域的内容导出 ...

  2. HTML5画布Canvas

    一.Canvas概念介绍 1.概念 Canvas : 画布 2.作用 : HTML5 Canvas 元素用于图形的绘制, 通过脚本(通常是JavaScript)来完成.它本身只是个图形容器,必须使用脚 ...

  3. PHP《将画布(canvas)图像保存成本地图片的方法》

    用PHP将网页上的Canvas图像保存到服务器上的方法 2014年6月27日 歪脖骇客 发表回复 8 在几年前HTML5还没有流行的时候,我们的项目经理曾经向我提出这样一个需求:让项目评审专家们在评审 ...

  4. 转载:将画布(canvas)图像保存成本地图片的方法

    之前我曾介绍过如何将HTML5画布(canvas)内容转变成图片形式,方法十分简单.但后来我发现只将canvas内容转变成图片输出还不够,如何能将转变后的图片保存到本地呢? 其实,这个方法也是非常简单 ...

  5. 面向画布(Canvas)的JavaScript库

    面向画布(Canvas)的JavaScript库 总结 每个库各有特色,根据需求选择   学习要点 面向画布(Canvas)的JavaScript库 EaselJS 是一个封装了 HTML5 画布(C ...

  6. linux用户权限相关内容查看

    linux用户权限相关内容查看 1   用户信息 创建用户一个名为 webuser 的账号,并填写相应的信息: root@iZ94fabhqhuZ:~# adduser webuser Adding ...

  7. HTML 5 画布(canvas)

    canvas 元素使用 JavaScript 在网页上绘制图像,本身是没有绘图能力. canvas 是一个矩形区域,可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以及添加图像的 ...

  8. SharePoint安全 - 在Goolge和Bing中查找SharePoint相关内容

    博客地址 http://blog.csdn.net/foxdave 本篇提供两个查询串字典,分别对应Google和Bing的搜索,用来查询SharePoint网站的相关内容 Google ShareP ...

  9. 韩顺平细说Servlet视频系列之tom相关内容

    韩顺平细说Servlet视频系列之tom相关内容 tomcat部署项目操作(注意:6.0版本以后的支持该操作,5.x版本需要另外配置?待验证!) 项目发布到tomcat的webapps文件下,然后启动 ...

随机推荐

  1. MindV编入微软云计算中小企业解决方案

    鹰翔MindV思维导图软件基于云计算,曾作为windows azure云计算的一个样例介绍,收入中小企业解决方案中.http://www.microsoft.com/hk/smb/cloud/azur ...

  2. C++Review6_优先队列priority_queue

    普通队列是一个先进先出的数据结构,元素在队尾添加,在队头删除. 优先队列的出队逻辑相比于普通队列发生了改变,具有最高优先级的元素先出队. 在C++中只要包含了#include<queue> ...

  3. SSL/TLS 配置

    Quick Start 下列说明将使用变量名 $CATALINA_BASE 来表示多数相对路径所基于的基本目录.如果没有为 Tomcat 多个实例设置 CATALINA_BASE 目录,则 $CATA ...

  4. win7下Oracle库imp导入dmp

    第一步:创建备份文件存储目录 create or replace directory back_file as 'F:\APP\ADMINISTRATOR\ORADATA\ORCL'; create ...

  5. NI LabVIEW 编程规范

    LabVIEW程序编写应该遵循哪些规范? 遵循这些规范有什么好处? 具体细节是什么? 针对上面三个问题一一解答: 一.LabVIEW程序编写应该遵循哪些规范? (1)前面板.后面板控件整齐,尽可能在一 ...

  6. 洛谷$P$2522 $Problem\ b\ [HAOI2011]$ 莫比乌斯反演

    正解:莫比乌斯反演 解题报告: 传送门! 首先看到这个显然就想到莫比乌斯反演$QwQ$? 就先瞎搞下呗$QwQ$ $gcd(x,y)=k$,即$gcd(\left \lfloor \frac{x}{k ...

  7. $Noip2018/Luogu5022$ 旅行

    $Luogu$ $Description$ 一个$n$个点,$m$条边的图.$m=n-1$或$m=n$.任意选取一点作为起始点,可以去往一个没去过的点,或者回到第一次到达这个点时来自的点.要求遍历整个 ...

  8. nginx优势,依赖,启动

      Nginx Nginx优势1.nginx将网络,磁盘及定时器等异步事件的驱动都做了非常好的封装,基于它开发将可以忽略这些事件处理的细节.2.Nginx封装了许多平台无关的接口,容器,适用于跨平台开 ...

  9. 【转载】解决KindEditor图片上传对话框位置异常问题(浏览器放大缩小时对话框不见了)

    今早在整理文件上传模块的时候,发现富文本编辑器 kindeditor 上传图片的对话框无法显示,其实对话框已经生成了,但是它没有top值,所以在页面上看不见. 捣鼓了一个多小时,代码看了一大串,没解决 ...

  10. ArcEngine语法笔记(VB)

    1.获取图层字段 Dim pTable As ITable = pLayer Dim pField As IField pField = pTable.Fields.Field(i) Next  2. ...