Canvas

## 功能

 在网页中实时生成图像,并操作图像内容(通俗就是在网页中画画)

1.canvas画布可以制作在线绘图工具,

2.canvas画布可以制作动态数据图纸.常用于网站后台的数据统计功能.

3.canvas画布可以用于制作HTML5游戏

4.canvas画布可以制作app应用.....

## 格式

 < canvas id=“myCanvas” width=“500” height=“300”>

注意:

1.IE9+浏览器支持

2.默认300宽度,150高度

3.不要使用css给canvas设置宽度和高度-导致绘制的图形被缩放

使用:

1.获取Canvas对象(即画布)

var obj = document.querySelector('canvas');

obj.width:画布宽度

obj.height:画布高度

2.获取绘图环境:所有的绘图都以此为基础

var ctx = obj.getContext('2d');

# Canvas绘图图形

## 直线

方法:

moveTo(x,y):将鼠标移动到指定的点

lineTo(x,y):将画笔移动到指定x,y点,形成一条直线

stroke():将点绘制成直线

属性:

lineWidth:直线的厚度

strokeStyle:直线(边框)的颜色

lineCap:直线头尾的样式(不占据原来直线的长度)

butt:默认

round:圆形

square:方形(多出宽度一半的值)

lineJoin:两条直线的夹角的样式

miter:默认尖角

round:圆形

bevel:斜角

## 虚线

moveTo(100,100)

lineTo(400,100)

setLineDash([5,10])        5:线段的长度    10:线段的间距

setLineDash([5,10,15])        复制一份数组元素,循环绘制

setLineDash([5,10,15,20])    奇数线段长度,偶数线段间距

## 矩形

属性:

fillStyle : 填充颜色

strokeStyle : 矩形边框颜色

方法:

fillRect(x,y,w,h) : 绘制矩形框并填充颜色

strokeRect(x,y,w,h) : 绘制矩形框设置边框的颜色

clearRect(x,y,w,h) : 清空指定矩形内容

## 圆弧(圆形)

arc(x,y,radius,start,end,逆true|顺false) : 绘制圆

x,y:圆心横坐标

radisu:圆半径

start:开始弧度

end:结束弧度

逆|顺:顺时针绘制|逆时针绘制

canvas很多都是利用弧度进行计算的

角度和弧度计算公式:弧度 = 角度*Math.PI/180

全圆:2PI(360)

半圆:PI(180)

1/4圆:PI/2(90)

## 曲线

moveTo(移动到指定位置的横坐标,指定位置的纵坐标)

arcTo(第一组控制点的横坐标,纵坐标,第二组控制点的横坐标,纵坐标,圆弧的半径)

二次贝塞尔曲线

quadraticCurveTo(第一组控制点横坐标,第一组控制点纵坐标,第二组控制点横坐标,第二组控制点纵坐标)

context.moveTo(100,200);

context.quadraticCurveTo(200,100,400,300);

三次贝塞尔曲线

bezierCurveTo(第一组控制点横坐标,纵坐标,第二组控制点横坐标,纵坐标,第三组控制点横坐标,纵坐标):三组控制点来掌控曲线方向

context.moveTo(100,200);

context.bezierCurveTo(150,150,300,300,400,100);

## 文本

方法

fillText(text, x, y, [maxWidth]):填充方式绘制文本

strokeText(text, x, y, [maxWidth]):绘制文字边框颜色

文本属性

font属性:跟CSS一样

textAlign属性:设置文字水平对齐方式

start(默认) end left right center

textBaseline属性:文本垂直方式

top hanging middle alphabetic(默认) ideographic bottom

悬挂             字母排序    思想的

measureText():获取文本的宽度

## Canvas全局方法

beginPath():开启路径

closePath():关闭路径

Canvas坐标系统:默认坐标原点是元素的左上角位置(0,0)

translate():平移(横坐标,纵坐标)

注意:将坐标原点移动到指定位置

scale(水平缩放倍数,垂直缩放倍数):缩放

rotate(弧度):旋转的弧度

注意:如果要旋转,默认是以坐标原点旋转的,所以如果要旋转,必须确认坐标原点在哪里

save():保存之前的状态

restore():恢复保存之前的样式

将这两个方法之间的代码独立,里面的样式设置不会带外面的绘制产生影响

剪辑区域

clip() 用于设定剪辑的区域

注意:使用clip进行了路径剪辑之后所有操作只能在剪辑区域之内进行操作。

使用剪辑区域一般都会在save和restore之间进行操作。

toDataURL():返回当前canvas图像的URLdata信息

## Canvas全局属性

属性:

globalAlpha:设置全局的透明度

globalCompositeOperation:图片合成:

source-over 默认。在目标图像上显示源图像。

source-atop 在目标图像顶部显示源图像。源图像位于目标图像之外的部分是不可见的。

source-in 在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。

source-out  在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。

destination-over  在源图像上方显示目标图像。

destination-atop  在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。

destination-in  在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。

destination-out 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。

lighter 显示源图像 + 目标图像。

copy  显示源图像。忽略目标图像。

线性渐变:指定区间的颜色过渡

var color = context.createLinearGradient(起始点横坐标,起始点纵坐标,宽度,高度)

color.addColorStop(偏移值,颜色)

径向渐变(两个圆心的连线进行颜色过渡,两个圆的切线的焦点处进行颜色的扩散)

var color = context.createRadialGradient(开始圆心横坐标,圆心纵坐标,半径,结束圆圆心横坐标,结束圆圆心纵坐标,结束圆的半径);

color.addColorStop(偏移值,颜色)

阴影

阴影颜色

context.shadowColor = 'red';

阴影偏移值

context.shadowOffsetX = 20;

context.shadowOffsetY = 20;

设置模糊值

context.shadowBlur = 4;

## 图片对象

将图片绘制到canvas画布中

drawImage(obj,起始横坐标,纵坐标,[固定宽度],[固定高度]);

创建图片并设置图片是否重复

var bg = createPattern(obj,'repeat|repeat-x|repeat-y|no-repeat'):指定的方向内重复指定的元素

ctx.fillStyle = bg;

像素操作

// 获取canvas画布 指定区间位置 的 像素点集合对象

var obj = ctx.getImageData(起始横坐标,起始纵坐标,宽度,高度)

obj.width:行像素个数

obj.height:列像素个数

obj.data:整体像素组的颜色组成的数组

obj.data.length:像素个数的4倍(1个像素点4个颜色值)

rgba()都是0-255的范围,透明度也是

// 将图像obj写入到指定的canvas区间内

putImageData(obj,起始横坐标,起始纵坐标)

// 创建图像

createImageData(宽度,高度)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容

  • 一、图形的组合方式 globalAlpha是一个介于0和1之间的值(包括0和1),用于指定所有绘制的透明度。默认值...
    空谷悠阅读 1,252评论 0 0
  • 本文首发于我的个人博客:http://cherryblog.site/github项目地址:https://git...
    sunshine小小倩阅读 1,973评论 1 8
  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 4,667评论 2 32
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    Looog阅读 3,938评论 3 40
  • 熟悉html5的程序员们肯定都知道 元素,该元素是用来在页面中规定一块区域,然后由js在该区域内绘制图形。canv...
    米几V阅读 2,139评论 1 5