现在的位置: 首页 > 综合 > 正文

html5 canvas 图像转换与缩放

2018年07月12日 ⁄ 综合 ⁄ 共 1970字 ⁄ 字号 评论关闭

scale 缩放绘图

秒速赛车公式 www.l19l7.cn 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>

抱歉!评论已关闭.

  • 听,盲童唱出心底的阳光 2018-12-17
  • 老婆告老公索债780万 原是二人自导自演 2018-12-17
  • 井冈山交警开展重点车辆严重交通违法行为有奖举报工作 2018-12-17
  • 停车收费新政首日举报量攀升 2018-12-17
  • 这是世界杯开赛当晚的广西 2018-12-16
  • 【理上网来·喜迎十九大】建设世界一流军队的科学指南 2018-12-16
  • 第六届北京农业嘉年华--北京频道--人民网 2018-12-16
  • 【专题】节能降耗 保卫蓝天——浙江省暨杭州市2018年节能宣传周 2018-12-15
  • 【奋斗在新时代】劳道“歹猫”增色互联网“表情” 2018-12-15
  • 驾车撞倒城管队员反复碾压 义乌暴力摊贩被刑拘 2018-12-15
  • 《中国汽车报》2018“西部温暖计划”公益试驾活动即将启程 2018-12-14
  • 奇瑞新能源瑞虎3xe上市 售价8.98万 2018-12-14
  • 几家性价比超高的烤肉店 赶紧去试试 2018-12-14
  • 和“看着就想笑”说说你的“8421” 2018-12-13
  • 中共十八大以来藏语新词术语发布 2018-12-13
  • 339| 572| 384| 396| 241| 234| 499| 290| 399| 724|