canvas绘图API详解

1.context的状态

  • 矩阵变换属性

  • 当前剪辑区域

  • context的其他状态属性:

strokeStyle, fillStyle, globalAlpha,
lineWidth,lineCap, lineJoin,
miterLimit,shadowOffsetX, shadowOffsetY,
shadowBlur, shadowColor,
globalCompositeOperation,font,
textAlign, textBaseline.
  • 相关方法

    • save() 保存当前绘图对象状态,

    • restore() 恢复之前保存的绘图对象的状态

2.路径规划

路径规划函数在使用的时候,都要保证存在一个子路径,比如调用过moveTo(), 因为要指定了起点才能绘制。

  • moveTo(x,y) : 用给定的点创建一个新的子路径。将画笔移动到某一个位置

  • closePath() : 标记为当前路径结束

  • lineTo(x,y) 将画笔移动到某一个点,与上一个点相连接

  • quadraticCurveTo(cpx, cpy, x, y) 规划贝塞尔二次曲线,前两个点是控制点x、y坐标,后两个是终点的x、y坐标

  • bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) 规划贝塞尔三次曲线,与二次曲线不同的是,有两个控制点,绘制曲线更加灵活

  • arcTo(x1, y1, x2, y2, radius) 给出一个控制点和终点,画一个与 用起点与控制点、控制点与终点形成的折线相切的圆弧。开始绘制的点不一定是起点,结束绘制的点也不一定是终点

  • arc(x, y, radius, startAngle, endAngle [, counterclockwise ] ) 指定圆心、其实弧度、结束弧度以及半径,绘制一点圆弧,最后一个可选参数为绘制方向,表示顺时针绘制还是逆时针绘制

  • rect(x, y, w, h) 绘制一个矩形

3.路径绘制

  • beginPath() :重置路径,开始一段新路径

      设置了绘制路径,context都会保持context的状态,只能通过beginPath方法来重置路径。
  • fill() :定义好绘制路径后,使用指定的fillStyle来填充闭合路径

  • stroke() :定义好绘制路径后,使用指定的strokeStyle来画线绘制

  • drawFocusIfNeeded(element) :如果给定的元素获取到了焦点,则给当前的路径绘制焦点

  • clip() :把当前路径限制到剪辑区域中。

      与路径规划函数等配合使用,将路径剪辑为特定的绘制区域,在clip之后绘制的图形只会显示在这个区域中。
  • isPointInPath(x, y) :判断某一个点是否在当前路径中。

4.填充和绘制样式

  • fillStyle 可以返回或者设置填充的样式

这里的样式可以是一个cssstyle字符串,渐变色对象,canvasPattern(图片、视频或者canvasElement),无效的参数值将被忽略。

  • strokeStyle 可以返回或者设置画线的样式

这里的样式可以是一个cssstyle字符串,渐变色对象,canvasPattern(图片、视频或者canvasElement),无效的参数值将被忽略。

  • gradient

  • gradient = context.createLinearGradient(x0, y0, x1, y1) 创建一个线性渐变,参数为起止点的坐标

  • gradient.addColorStop(offset, color) 添加一个渐变转折点,可以添加多个

  • gradient = context.createRadialGradient(x0, y0, r0, x1, y1, r1) 创建一个径向渐变,参数为内圆和外圆的圆心坐标和半径

  • context.fillStyle=gradient 设置填充样式为指定的渐变样式

  • pattern

  • pattern = context.createPattern(image, repetition) 创建一个图像pattern,第二个参数为repeat方式,可选值与css背景repeat类似。

  • context.fillStyle=pattern 设置填充样式为指定的pattern

5.lineStyles

     都是以属性赋值的方式设置对应的状态,例如:context.lineWidth=5;
  • lineWidth 设置线条宽度

  • lineCap 设置线条末端样式

    默认值是butt(左一),round是圆角, square是方角

  • lineJoin 设置两线段连接处所显示的样子

    round, bevel 和 miter。默认是 miter。如图从上到下分别为round,bevel和miter

  • miterLimit 用来设定外延交点与连接点的最大距离,如果交点距离大于此值,连接效果会变成了 bevel

    所谓交接处长度(斜接长度)是指线条交接处内角顶点到外角顶点的长度

  • setLineDash(segments) 设置当前虚线样式

  • getLineDash 返回一个包含当前虚线样式,长度为非负偶数的数组。

  • lineDashOffset 设置虚线样式的起始偏移量

6.Text styles

  • font 获取或者设置字体样式,设置的值为css样式字符串。默认值是10px sans-serif

  • textAlign 设置或者获取文本的左右对齐方式

    start,end,left,right,center.默认为start

  • textBaseline 设置或者获取文本的垂直对齐方式

    "top", "hanging", "middle", "alphabetic", "ideographic", or "bottom" 默认为alphabetic

7.Transformations

  • scale(x,y) 设置x,y方向的缩放

  • rotate(angle) 设置旋转角度

  • translate(x,y) 设置x,y方向的位移

  • transform(a,b,c,d,e,f) a 水平缩放 d 垂直缩放 b 水平倾斜 c 垂直倾斜 e 水平位移 f 垂直位移

  • setTransform(a,b,c,d,e,f) 重置当前transform,并设置为新的transform变换

8.绘制文字

  • fillText(text,x,y,[maxWidth]) 使用设置好的文字填充状态绘制文字到指定的坐标 位置

  • strokeText(text,x,y,[maxWidth]) 使用设置好的文字绘制状态绘制文字到指定的坐标 位置

  • measureText(text) 测量文字实际的长度

    var width=cotext.measureText('hello').width; 目前只能获取到文字实际占用的宽度,必须使用其width属性

9.绘制图像

  • drawImage(image, dx, dy) 绘制一个图像到画布上,dx、dy为图像左上角的x、y坐标

  • drawImage(image, dx, dy, dw, dh) 绘制一个图像到画布上,dx、dy为图像左上角的x、y坐标,dw、dh为绘制到画布实际占用的宽高

  • drawImage(image, sx, sy, sw, sh, dx, dy, dw, dh) 绘制一个图像到画布上,dx、dy为图像左上角的x、y坐标,dw、dh为绘制到画布实际占用的宽高,sw、sh为原始图像的宽高,sx,sy为原始图像左上角在原图中的坐标位置。 在做图像的缩放绘制时候也要用到

10.绘制矩形

  • clearRect(x, y, w, h) 清除某一矩形区域内的内容,常用在动画制作中避免叠加,重复绘制

  • fillRect(x, y, w, h) 用context状态填充一个矩形

  • strokeRect(x, y, w, h) 用context状态绘制一个空心矩形

11.阴影

  • shadowColor 设置或者获取context阴影颜色

  • shadowOffsetX 设置或者获取阴影X方向偏移量

  • shadowOffsetY 设置或者获取阴影Y方向偏移量

  • shadowBlur 设置阴影模糊级别

如果要给多边形设置阴影,则要注意多边形或者圆环等图形的画笔绘制方向,只有多边形外部的才能增加阴影,而一个区域是否在多边形外部是与从其中引出的射线与两线相交出方向是否相反有关(数学知识)

12.Compositing 图像合成处理

  • globalAlpha 设置或者返回全局不透明度的值,介于0.0-1.0之间,这个区域外的值将被忽略

  • globalCompositeOperation 这个值定义了两个图形相交的时候怎么处理相交部分和各自单独部分。

source-over    默认。在目标图像上显示源图像。
source-atop 在目标图像顶部显示源图像。源图像位于目标图像之外的部分是不可见的。
source-in 在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。
source-out 在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。
destination-over 在源图像上方显示目标图像。
destination-atop 在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。
destination-in 在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。
destination-out 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。
lighter 显示源图像 + 目标图像。
copy 显示源图像。忽略目标图像。
xor 使用异或操作对源图像与目标图像进行组合。

13.imageData处理

  • imagedata = context . createImageData(sw, sh) 创建一个imagedata,参数为宽高值

  • imagedata = context . createImageData(imagedata) 创建一个imagedata,参数为已创建的一个imagedata

  • imagedata = context . getImageData(sx, sy, sw, sh) 获取某一点处指定宽高的像素信息

     imagedata中包含width、height和data属性,data中保存着像素信息,是一个一位数组,每四个元素是一个像素的信息,四个元素分别保存这r、g、b、a的值。可以对imagedata中的像素值做处理,以实现对图片进行像素级的处理来实现各种滤镜或者其他的效果
  • context . putImageData(imagedata, dx, dy [, dirtyX, dirtyY, dirtyWidth, dirtyHeight ]) 使用给定的imagedata来将imagedata的全部像素信息绘制在画布上形成一个图像。

    • dx
      源图像数据在目标画布中的位置偏移量(x 轴方向的偏移量)。

    • dy
      源图像数据在目标画布中的位置偏移量(y 轴方向的偏移量)。

    • dirtyX [可选]
      在源图像数据中,矩形区域左上角X方向的位置。默认是整个图像数据的左上角(x 坐标)。

    • dirtyY [可选]
      在源图像数据中,矩形区域左上角Y方向的位置。默认是整个图像数据的左上角(y 坐标)。

    • dirtyWidth [可选]
      在源图像数据中,矩形区域的宽度。默认是图像数据的宽度。

    • dirtyHeight [可选]
      在源图像数据中,矩形区域的高度。默认是图像数据的高度。

14.点击区域

  • 在当前路径下添加一个点击区域

  • 如果添加了点击区域,可以给canvas添加一个dom事件监听,在事件处理函数的event参数中可以获取到event.region属性。

  • 这个api目前没有得到良好支持不能在生产环境使用。

  • (1)addHitRegion(options) 给位图添加点击区域。它允许你很容易地实现一个点击区域,让你触发DOM元素的事件。options 参数是可选的。 当赋值时, Object 包含以下属性:

    • pathPath2D 对象: 描述点击区的区域范围。 如果不给此属性赋值, 则会使用当前的路径。

    • fillRule:
      遵循的填充规则(默认是“nonzero”)。

    • id 点击区的ID,在事件中可以引用此ID,就像示例中那样。

    • parentID 父区域的ID,为了光标回退或者辅助工具导航 。

    • cursor 鼠标移动到点击区时的 cursor (默认是 "inherit")。 继承父点击区域的光标,或者canvas元素的光标。

    • control 触发事件的元素(canvas的子孙元素)。 默认为 null。

    • label 如果没有control属性,文本标签作为辅助工具,用作点击区域的描述。 默认为 null。

    • role 如果没有control属性,ARIA role 作为辅助工具,决定如何表示点击区域。 默认为 null.

  • (2)removeHitRegion(id) 移除点击区域,参数为addHitRegon时传入的id

  • (3)clearHitRegions() 清除画布上的所有点击区域

canvas绘图API详解的更多相关文章

  1. Android中Canvas绘图基础详解(附源码下载) (转)

    Android中Canvas绘图基础详解(附源码下载) 原文链接  http://blog.csdn.net/iispring/article/details/49770651   AndroidCa ...

  2. Java 8 Stream API详解--转

    原文地址:http://blog.csdn.net/chszs/article/details/47038607 Java 8 Stream API详解 一.Stream API介绍 Java8引入了 ...

  3. jqGrid APi 详解

    jqGrid APi 详解 jqGrid皮肤 从3.5版本开始,jqGrid完全支持jquery UI的theme.我们可以从http://jqueryui.com/themeroller/下载我们所 ...

  4. hibernate学习(2)——api详解对象

    1   Configuration 配置对象 /详解Configuration对象 public class Configuration_test { @Test //Configuration 用户 ...

  5. Html5 学习系列(五)Canvas绘图API快速入门(2)

    Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来.接下里我会在本文中给各位介绍Canvas的其他API:绘制线条.绘制椭圆.绘制图片 ...

  6. Html5 学习系列(五)Canvas绘图API快速入门(1)

    引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...

  7. 网络编程socket基本API详解(转)

    网络编程socket基本API详解   socket socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket ...

  8. 转】Mahout推荐算法API详解

    原博文出自于: http://blog.fens.me/mahout-recommendation-api/ 感谢! Posted: Oct 21, 2013 Tags: itemCFknnMahou ...

  9. dom4j api 详解--XPath 节点详解

    dom4j api 详解 http://871421448.iteye.com/blog/1546955 XPath 节点 http://www.w3school.com.cn/xpath/xpath ...

随机推荐

  1. vue项目npm run dev 报错error in ./src/main.js Module build failed: Error: Cannot find module 'babel-plugin-syntax-jsx'

    问题: vue 项目npm run dev运行时报错,如下图:  原因: 缺少相应的组件 解决办法: 安装相应组件: npm install babel-plugin-syntax-jsx --sav ...

  2. C#中?和:?和??代表什么

    ?代表可空类型修饰符    引用类型可以使用空引用表示一个不存在的值,而值类型通常不能表示为空.为了使值类型也可为空,就可以使用可空类型?:带便三元表达式    int a=b>c?b:c 如果 ...

  3. python hex转flaot

    在使用树莓派 modbus-tk 读取寄存器值后,得到的4byte值存为了元组,想将该数据转化为float,习惯了c的用法,转到python时,数据转换这一块一头雾水,经过多次尝试最终实现.记录一下: ...

  4. 『德不孤』Pytest框架 — 9、Pytest测试报告

    目录 1.pytest-html插件 2.Allure测试报告 (1)Allure框架说明 (2)Allure框架的使用 1.pytest-html插件 Pytest可以通过命令行方式,生成xml/h ...

  5. VUE3 之 多个元素之间的过渡 - 这个系列的教程通俗易懂,适合新手

    1. 概述 老话说的好:过去不等于未来,过去成功了不代表将来也会成功,过去失败了也不代表将来也会失败. 言归正传,今天我们聊聊多个元素之间的过渡. 2. 多个元素之间的过渡 2.1 两个元素交替显示 ...

  6. LGP3702题解

    很容易想到容斥,计算不包含质数的方案数和总方案数. 设 \(f[n][i]\) 表示长度为 \(n\) 的序列,每个元素的和对 \(p\) 取模的结果. 容易有 \(f[n][i]=\sum_{j=0 ...

  7. 拉普拉斯特征映射(Laplacian Eigenmaps)

    1 介绍 拉普拉斯特征映射(Laplacian Eigenmaps)是一种不太常见的降维算法,它看问题的角度和常见的降维算法不太相同,是从局部的角度去构建数据之间的关系.也许这样讲有些抽象,具体来讲, ...

  8. 分布式 PostgreSQL 集群(Citus),分布式表中的分布列选择最佳实践

    确定应用程序类型 在 Citus 集群上运行高效查询要求数据在机器之间正确分布.这因应用程序类型及其查询模式而异. 大致上有两种应用程序在 Citus 上运行良好.数据建模的第一步是确定哪些应用程序类 ...

  9. PF4J使用

    PF4J是一个Java轻量级的插件框架,可以实现动态加载,执行,卸载外部插件(支持jar以及zip),具体可以看官网:https://pf4j.org/. 本文例子基于Github地址:https:/ ...

  10. php——字符串的""和null,empty的关系

    public function test(){ $test = ""; if($test==null){ echo "test==null <hr>" ...