HTML5 Canvas坐标变换(canvas移动坐标空间)

boyanx4个月前技术教程28

我们在使用 Canvas 绘制图形时,可能会想对绘制的图形进行变换,例如让图形旋转90度,或者让图像缩小放大等,这些效果都可以通过 Canvas API 的坐标轴变换处理功能来实现。

图形旋转

如果我们要想将图形进行旋转,例如下面这张图片:


可以通过 rotate() 方法来实现这个效果,rotate() 方法用于旋转当前的绘图,带有一个参数 angle,表示旋转角度。旋转的中心点是坐标的原点,是以顺时针方向进行旋转,如果想要以逆时针方向来旋转,可以将参数设置为负数。

示例:

例如上图的实现代码如下所示:

<!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>HTML5学习(9xkd.com)</title>
        </head>
        <body>
            <canvas id="mycanvas" width="250px" height="150px" style="border: 1px solid #000;"></canvas>
            <script>
                var can = document.getElementById("mycanvas");
                var ctx = can.getContext("2d");
                ctx.fillStyle = "pink";  // 填充颜色
                ctx.rotate(20*Math.PI/180);
                ctx.fillRect(50, 30, 100, 50);
            </script>
        </body>
    </html>    

图形缩放

图形缩放可以使用 scale() 方法来实现,可以对图形进行放大或缩小设置。注意,这个函数有两个参数,第一个参数为水平方向的缩放倍数,第二个参数为垂直方向的缩放倍数。要将图形缩小,可以将参数值设置为0到1之间的小数,例如 0.5 表示将图形缩小一倍。或者也可以将参数值设置为百分数,例如 0.5=50%、1 = 100%、2=200% 等。

示例:

将图形放大一倍:

<!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>HTML5学习(9xkd.com)</title>
        </head>
        <body>
            <canvas id="mycanvas" width="250px" height="150px" style="border: 1px solid #000;"></canvas>
            <script>
                var can = document.getElementById("mycanvas");
                var ctx = can.getContext("2d");
                ctx.fillStyle = "pink";  // 填充颜色
                ctx.fillRect(50, 30, 100, 50);
                ctx.scale(1.5, 1.5);
                ctx.fillRect(50, 30, 100, 50);
            </script>
        </body>
    </html>    

在浏览器中的预览效果:


图形平移

移动图形可以通过 translate() 方法来实现,这个方法中的第一个参数表示将坐标轴向右边移动若干个单位,第二个参数表示将坐标轴圆点向下移动若干个单位。

示例:

将图形水平移动50px,向下移动50px:

<!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>HTML5学习(9xkd.com)</title>
        </head>
        <body>
            <canvas id="mycanvas" width="250px" height="150px" style="border: 1px solid #000;"></canvas>
            <script>
                var can = document.getElementById("mycanvas");
                var ctx = can.getContext("2d");
                ctx.fillStyle = "pink";  // 填充颜色
                ctx.fillRect(50, 30, 100, 50);
                ctx.translate(50, 50);
                ctx.fillRect(50, 30, 100, 50);
            </script>
        </body>
    </html>    

在浏览器中的预览效果:


小练习

我们通过上述学习的三个方法,来实现下图所示效果:


实现代码如下所示:

<!DOCTYPE html>
    <html>
        <head>
            <meta charset="utf-8">
            <title>HTML5学习(9xkd.com)</title>
            <script>
                window.onload = function() {
                
                var can = document.getElementById("mycanvas");
                var ctx = can.getContext("2d");

                ctx.translate(200, 10); 
                ctx.fillStyle = "rgba(219,112,147, 0.7)"; 
                for(var i = 0; i < 50; i++){ 
                    ctx.translate(27, 27); 
                    ctx.scale(0.95, 0.95); 
                    ctx.rotate(Math.PI / 10); 
                    ctx.fillRect(0, 0, 90, 50); 
                }
            }     
            </script>
        </head>
        <body>
            <canvas id="mycanvas" width="400" height="300" style="border: 1px solid #000;"></canvas>

        </body>
    </html>    

总结

我们在绘制图形的时候,经常会用到上述几个方法来进行图形变化,需要注意的是,这个变化的不是画布,而是画布上的画进行变化。

查看更多可以点击链接:https://www.9xkd.com/

标签: html转canvas

相关文章

网页游戏开发基础——Canvas基本图形绘制

  什么是Canvas?Canvas是HTML5新增的一个标签,你可以把它翻译为画布,通过它可以绘制二维或三维图形,有了它就可以不用安装flash而实现复杂的动画功能。如何通过Canvas绘图?下面我...

好程序员:前端JavaScript全解析——Canvas绘制形状(上)

●今天,我们来通过 canvas 提供的方法开绘制一些简单的形状绘制矩形绘制基础矩形。下面一起看看好程序员老师的讲解吧~●语法 : 工具箱.rect( 矩形起点 x 轴坐标, 矩形起点 y 轴坐标,...

Canvas怎样修改线条的宽度、颜色和形状?

在Canvas中,线的默认颜色为黑色,宽度为lpx,但我们可以使用相关属性为线添加不同的样式。下面我们将从宽度、描边颜色、端点形状3方面详细讲解线条样式的设置方法。1.设置线条宽度使用lineWidt...

用H5中的Canvas等技术制作海报(h5能做海报吗)

在去年的时候也实现过合成海报的功能,不过当时时间仓促,实现的比较简单。就一个旋转功能,图片也不能拖动放大,也不能裁剪。这次有时间就实现一个功能稍微多点的海报。一、概要总共有三屏,第一屏是选择图片,第二...

我们能用HTML5 Canvas做什么?(html canvas api)

摘要:HTML5的Canvas元素称得上HTML5的核心技术所在。而作为一个依靠JavaScript绘制华丽图像的元素,Canvas究竟能够运用在哪些方面的开发?国外开发者Ohad Eder-Pres...

canvas是什么?前端中canvas 性能为何会比 html/css 好?

更底层的操作 (Direct Pixel Manipulation):Canvas 本质上是一个位图画布。开发者通过 JavaScript API(如 fillRect, drawImage, arc...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。