现在的位置: 首页 > web前端 > 正文

html5 canvas 图像转换与缩放

2018年07月12日 web前端 ⁄ 共 1970字 ⁄ 字号 评论关闭

scale 缩放绘图

scale() 方法缩放当前绘图,更大或更小。

语法:context.scale(scalewidth,scaleheight);

参数:

            scalewidth:缩放当前绘图的宽度 (1=100%, 0.5=50%, 2=200%, 依次类推)

            scaleheight:缩放当前绘图的高度 (1=100%, 0.5=50%, 2=200%,)

备注:如果您对绘图进行缩放,所有之后的绘图也会被缩放。定位也会被缩放。如果您 scale(2,2),那么绘图将定位于距离画布左上角两倍远的位置。

rotate旋转绘图

rotate()方法旋转当前的绘图

语法:context.rotate(angle);

参数:旋转角度,以弧度计。如果需要将角度转换为弧度,使用degrees*Math.PI/180进行转换。

translate移动绘图

translate() 方法重新映射画布上的 (0,0) 位置。

语法:context.translate(x,y);

参数:x:添加到水平坐标x的值,y:添加到水平坐标y的值。

transform 绘图的转换矩阵

画布上的每个对象都拥有一个当前的变换矩阵。

transform() 方法替换当前的变换矩阵。它以下面描述的矩阵来操作当前的变换矩阵:

也就是说,transform() 允许您缩放、旋转、移动并倾斜当前的环境。

语法:context.transform(a,b,c,d,e,f);

参数:a:水平缩放绘图,b:水平倾斜绘图,c:垂直倾斜绘图,d:垂直缩放绘图,e:水平移动绘图,f:垂直移动绘图。

其二维坐标系的矩阵转换公式是:

其中等号左边的”x","y"是旧坐标值(prevCoordSys),等号右边的"x","y"是新坐标值(newCoordSys),a,b,c,d,e,f是需用用户来填写的变换参数,新就坐标就是通过一个矩阵运算的函数关系进行转换。

1、矩阵变换

矩阵变换公式是,或写成[1,0,0,1,tx,ty],其中tx和ty就是translate函数的两个参数,运算公式:

2、伸缩变换

矩阵变换公式是,或写成【sx,0,0,sy,0,0],其中sx,sy就是scale函数的两个参数,运算公式:

3、旋转变换

矩阵变换公式:,或写成[cos(a),sin(a),-sin(a),cos(a),0,0],其中a就是rotate要旋转的函数角度,运算公式:

4、x轴,y轴歪斜变换

,[1,0,tan(ax),1,0,0]
表示向x轴倾斜变换,[1,tan(ay),0,1,0,0]表示向y轴歪斜变换


setTransform重置当前转换为单位矩阵

画布上的每个对象都拥有一个当前的变换矩阵。

setTransform() 方法把当前的变换矩阵重置为单位矩阵,然后以相同的参数运行transform()

换句话说,setTransform() 允许您缩放、旋转、移动并倾斜当前的环境

语法:context.setTransform(a,b,c,d,e,f);

参数:同上面transform

示例代码:

<span style="font-family:Comic Sans MS;">var canvas = document.getElementById("canvas");
            var context = canvas.getContext("2d");
            
            context.save();
            context.scale(2, 2);
            context.strokeRect(10, 10, 100, 100);
            context.restore();

            context.save();
            context.rotate(10* Math.PI / 180);         
            context.fillStyle = "yellow";
            context.fillRect(300, 0, 250, 100)
            context.restore();

            context.save();
            context.translate(100, 30);
            context.fillStyle = "blue";
            context.fillRect(500, 0, 120, 120);
            context.restore();


            context.save();
            context.transform(1.2, 0, 0, 1.2, 10, 10);
            context.fillStyle = "green";
            context.fillRect(400, 260, 220, 120);
            context.restore();

            context.save();
            context.setTransform(1, 0.5, -0.5, 1, 30, 10);
            context.fillStyle = "red";
            context.fillRect(100, 100, 250, 100);
            context.restore();
           </span>

抱歉!评论已关闭.