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

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>

抱歉!评论已关闭.

  • 马上背!十九大报告中的四个“新” 2019-02-16
  • 蒲县工商质监局非公党委举办2018元旦文艺会 2019-02-16
  • 人民网评:建设数字中国时不我待 2019-02-16
  • 618史上最壕“买家”现身 Google以 5.5亿美元投资京东 2019-02-15
  • 雍正官窑:朕就是这样的品味(图) 2019-02-15
  • 西安司法考试将试点机考 2019-02-15
  • 人民日报新媒体矩阵聚焦十九大 融媒报道"给你好看" 2019-02-14
  • 社会主义是过渡阶段,最终实现共产主义才是其目的。社会主义是在消灭私有制,建立公有制直至无私,实现共产主义。 2019-02-14
  • 四轮电动车销售火爆存安全隐患 专家:需建国家标准 2019-02-14
  • 看懂汽车三元催化器工作原理后还能当金子卖?难为非洲兄弟了! 2019-02-14
  • 周杰伦昆凌为儿子庆生 小小周帅气入镜 2019-02-13
  • 都以为机器人普及了,一切都不是问题了?机器人不需要不断升级?机器人生产啥?不需要人设计? 2019-02-13
  • 价值-热门标签-华商生活 2019-02-13
  • 上合组织引领发展 吉中合作稳步前行——访吉尔吉斯斯坦总统热恩别科夫 2019-02-13
  • 互联网金融协会提示:防范变相“现金贷”业务风险 2019-02-12
  • 504| 175| 834| 700| 140| 782| 656| 562| 776| 501|