您现在的位置是:网站首页> 编程资料编程资料
深入解析HTML5 Canvas控制图形矩阵变换的方法调用HTML5的Canvas API绘制图形的快速入门指南实例讲解利用HTML5 Canvas API操作图形旋转的方法HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvahtml5的画布canvas——画出弧线、旋转的图形实例代码+效果图html5-Canvas可以在web中绘制各种图形H5最强接口之canvas实现动态图形功能
2021-08-31
1098人已围观
简介 这篇文章主要介绍了HTML5 Canvas控制图形矩阵变换的方法,重点讲解了利用transform()方法来控制CSS像素坐标的用法,非常给力,需要的朋友可以参考下
在介绍矩阵变换transform()前,我们来说一说什么是变换矩阵。
以上是Canvas中transform()方法所对应的变换矩阵。而此方法正是传入图中所示的六个参数,具体为context.transform(a,b,c,d,e,f)。
各参数意义对应如下表:
| 参数 | 意义 |
|---|---|
| a | 水平缩放(1) |
| b | 水平倾斜(0) |
| c | 垂直倾斜(0) |
| d | 垂直缩放(1) |
| e | 水平位移(0) |
| f | 垂直位移(0) |
当我们把对应的0或1代入进矩阵,可以发现这是一个单位矩阵(水平和垂直缩放默认值是1,代表缩放1倍,即不缩放)。该方法使用一个新的变化矩阵与当前变换矩阵进行乘法运算,然后得到各种变化的效果。
这里简单说一下,当我们想对一个图形进行变换的时候,只要对变换矩阵相应的参数进行操作,操作之后,对图形的各个定点的坐标分别乘以这个矩阵,就能得到新的定点的坐标。
transform()方法
而Canvas绘图中,就给咱们提供了一个方法来改变这个变换矩阵,那就是transform()。
默认坐标系是以画布最左上角为坐标原点(0,0)。越往右X轴数值越大,越往下Y轴的数值越大。在默认坐标系中,每一个点的坐标都是直接映射到一个CSS像素上。画布上一些特定的操作和属性的设置都使用默认坐标系。然而除了默认坐标系之外,每个画布还有一个还有一个“当前变换距阵”,作为图形状态的一部分。该矩阵定义了画布的当前坐标系。当指定了一个点的坐标后,画布的大部分操作都将该点映射到当前的坐标系中,而不是默认的坐标系。当前变换矩阵是用来指定的坐标转换成为默认坐标系中的等价坐标。坐标的变换还影响了文本和线段的绘制。
调用translate()方法只是简单地将坐标原点进行上、下、左、右移动。
rotate()方法会将坐标轴根据指定角度里进行顺时针旋转。
scale()方法实现对x轴或由y轴上的距离进行延长和缩短。传递负值会实现
scale以坐标原点做参照点将坐标轴进行翻转。就好像镜子中的镜像。
translate用来将坐标原点移动到画布最左下角,然后scale方法用于实现将y轴进行翻转,这样的就变成了越往上y轴越大。
从数学角度来理解坐标系变换:
translate、rotate和scale方法想象成对坐标轴的变换,就很容易理解了。从代数角度很容易理解坐标变换,就是把变换想像成一个变换后坐标系中的点(x,y),到原来的坐标系统变成了(x`,y`)。
调用 c.translate(dx,dy)。的方法等效如下表达式
x` = x+dx; //新系统中的x轴的0,在原系统中就是dx
y` = y+dy;
c.scale(sx,sy);
x` = sx*x;
y` = sy*y;
c.rotate()
x` =x*cos(a)-y*sin(a);
y` = y*cos(a)+x*sin(a);
建议使用transform()的时候,可以在如下几个情况下使用:
1.使用context.transform (1,0,0,1,dx,dy)代替context.translate(dx,dy)
2.使用context.transform(sx,0,0,sy,0,0)代替context.scale(sx, sy)
3.使用context.transform(0,b,c,0,0,0)来实现倾斜效果(最实用)。
不用再使用它去实现旋转了,另外也没有也不用全记这些结论,直接记下abcdef六个参数的意义,效果是一样的。
下面我们看一个代码,熟悉一下:
- "zh">
- "UTF-8">
-
矩阵变换 - "canvas-warp">
- 你的浏览器居然不支持Canvas?!赶快换一个吧!!
运行结果:
setTransform()方法
transform()方法的行为相对于由 rotate(),scale(), translate(), or transform() 完成的其他变换。例如:如果我们已经将绘图设置为放到两倍,则 transform() 方法会把绘图放大两倍,那么我们的绘图最终将放大四倍。这一点和之前的变换是一样的。
但是setTransform()不会相对于其他变换来发生行为。它的参数也是六个,context.setTransform(a,b,c,d,e,f),与transform()一样。
这里我们通过一个例子来说明:
绘制一个矩形,通过 setTransform() 重置并创建新的变换矩阵,再次绘制矩形,重置并创建新的变换矩阵,然后再次绘制矩形。
- "zh">
- "UTF-8">
-
矩阵变换 - "canvas-warp">
- 你的浏览器居然不支持Canvas?!赶快换一个吧!!
运行结果:
解释一下过程:每当我们调用 setTransform() 时,它都会重置前一个变换矩阵然后构建新的矩阵,因此在下面的例子中,不会显示红色矩形,因为它在蓝色矩形下面。
相关内容
- 详解如何用HTML5 Canvas API控制图片的缩放变换HTML5 Canvas实现图片缩放、翻转、颜色渐变的代码示例通过Canvas及File API缩放并上传图片完整示例Html5 Canvas实现图片标记、缩放、移动和保存历史状态功能 (附转换公
- 实例讲解利用HTML5 Canvas API操作图形旋转的方法调用HTML5的Canvas API绘制图形的快速入门指南深入解析HTML5 Canvas控制图形矩阵变换的方法HTML5 Canvas 绘图——使用 Canvas 绘制图形图文教程 使用html5 canvahtml5的画布canvas——画出弧线、旋转的图形实例代码+效果图html5-Canvas可以在web中绘制各种图形H5最强接口之canvas实现动态图形功能
- 详解通过HTML5 Canvas实现图片的平移及旋转变化的方法纯HTML5+CSS3制作图片旋转html5 Canvas实现图片旋转的示例
- 使用HTML5 Canvas绘制圆角矩形及相关的一些应用举例HTML5中通过li-canvas轻松实现单图、多图、圆角图绘制,单行文字、多行详解html2canvas截图不能截取圆角图片的解决方案HTML5 Canvas自定义圆角矩形与虚线示例代码html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形canvas绘制圆角头像的实现方法
- 使用HTML5 Canvas API绘制弧线的教程通过HTML5 Canvas API绘制弧线和圆形的教程HTML5 Canvas中使用用路径描画圆弧html5的画布canvas——画出弧线、旋转的图形实例代码+效果图
- HTML5单页面手势滑屏切换原理 html5实现点击弹出图片功能html5 录制mp3音频支持采样率和比特率设置html5表单的required属性使用html5调用摄像头实例代码HTML5页面音频自动播放的实现方式Html5大屏数据可视化开发的实现html实现弹窗的实例HTML5来实现本地文件读取和写入的实现方法HTML 罗盘式时钟的实现HTML5简单实现添加背景音乐的几种方法
- HTML5 画布canvas使用方法使用分层画布来优化HTML5渲染的教程html5画布旋转效果示例用html5的canvas画布绘制贝塞尔曲线完整代码html5的画布canvas——画出简单的矩形、三角形实例代码html5的画布canvas——画出弧线、旋转的图形实例代码+效果图HTML5边玩边学(1)画布实现方法 Html5画布_动力节点Java学院整理
- 【HTML5】Canvas绘制简单图片教程HTML5实现的轻量级绘制SVG轮廓线路径动画插件特效源码html5 实现客户端验证上传文件的大小(简单实例)html5基于鼠标滚动控制植树生长动画特效源码HTML5实现页面切换激活的PageVisibility API使用初探HTML5的Geolocation地理位置定位API使用教程HTML5中的强制下载属性download使用实例解析HTML5事件方法全部汇总HTML5全屏响应式缩放切换幻灯片代码深入理解HTML的FormData对象
- HTML5实现页面切换激活的PageVisibility API使用初探HTML5实现的轻量级绘制SVG轮廓线路径动画插件特效源码html5 实现客户端验证上传文件的大小(简单实例)html5基于鼠标滚动控制植树生长动画特效源码【HTML5】Canvas绘制简单图片教程HTML5的Geolocation地理位置定位API使用教程HTML5中的强制下载属性download使用实例解析HTML5事件方法全部汇总HTML5全屏响应式缩放切换幻灯片代码深入理解HTML的FormData对象
- HTML5中的强制下载属性download使用实例解析HTML5实现的轻量级绘制SVG轮廓线路径动画插件特效源码html5 实现客户端验证上传文件的大小(简单实例)html5基于鼠标滚动控制植树生长动画特效源码【HTML5】Canvas绘制简单图片教程HTML5实现页面切换激活的PageVisibility API使用初探HTML5的Geolocation地理位置定位API使用教程HTML5事件方法全部汇总HTML5全屏响应式缩放切换幻灯片代码深入理解HTML的FormData对象
