最近工作上需要写一个签名的功能,但是横着签名完,需要翻转90度传给后台的功能,把自己绕晕了,特此写文章记录
多次翻转容易把人绕晕,所以我写了下面这个demo,希望能帮助大家理解,以下demo的宽高分别是600px、300px;下面就开始我们的翻转之旅吧!
那么,从1到2,是怎么实现复制粘贴的呢,直接旋转还是复制?具体要怎么做,请看下面的思路: 首先将1跟2两个长方形利用四个角进行排序,1到2对应四个角的排序如下:
copyCtx.translate(0, 300);
这里因为粘贴块的高是300,所以这里用了translate进行移动,移动后的图片,我们可以想象成下面这样子:
copyCtx.rotate(-90 * Math.PI / 180);
copyCtx.drawImage(img, 0, 0, 300, 600);
copyCtx.fillStyle="yellow";
copyCtx.fillRect(0,0,100,50);
那么问题来了,为什么要画个黄色块呢?
这里我是想告诉大家,通过移动,旋转之后,这个粘贴块的内容他的画布上的(0,0)坐标,是1对应的位置,如果你还需要加东西,可以选择重置,如下代码:
copyCtx.setTransform(1, 0, 0, 1, 0, 0);
上面第二块复制到第三课的思路也是一样的,下面是我的全部代码的实现:
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
.canvas1, .canvas2, .canvas3 {
display: inline-block;
}
.canvas1 {
width: 300px;
height: 600px;
margin-right: 20px;
border: 1px solid #CCC;
}
.canvas2 {
width: 600px;
height: 300px;
border: 1px solid #CCC;
margin-right: 20px;
}
.canvas3 {
width: 300px;
height: 600px;
border: 1px solid #CCC;
}
</style>
</head>
<body>
<canvas class="canvas1" width="300" height="600" id="canvas1"></canvas>
<canvas class="canvas2" width="600" height="300" id="canvas2"></canvas>
<canvas class="canvas3" width="300" height="600" id="canvas3"></canvas>
<script type="text/javascript">
var c = document.getElementById("canvas1");
var ctx = c.getContext("2d");
ctx.rotate(0*Math.PI/180);
ctx.fillRect(100,20,100,50);
ctx.fillRect(100,400,100,50);
ctx.translate(100, 20);
ctx.rotate(45*Math.PI/180);
ctx.fillRect(0,0,100,50);
function copyCanvas() {
// 复制粘贴图片,为了把图片旋转回来
let mycanvas = document.getElementById('canvas2');
let copyCtx = mycanvas.getContext('2d');
let img = new Image();
img.onload = () => {
copyCtx.translate(0, 300);
copyCtx.rotate(-90 * Math.PI / 180);
copyCtx.drawImage(img, 0, 0, 300, 600);
// copyCtx.setTransform(1, 0, 0, 1, 0, 0); // 有这句话跟没这句话,黄色块表现不一样哦
copyCtx.fillStyle="yellow";
copyCtx.fillRect(0,0,100,50);
copyCanvas2();
};
img.src = document.getElementById('canvas1').toDataURL();
};
copyCanvas();
function copyCanvas2() {
// 复制粘贴图片,为了把图片旋转回来
let mycanvas = document.getElementById('canvas3');
let copyCtx = mycanvas.getContext('2d');
let img = new Image();
img.onload = () => {
copyCtx.translate(300, 0);
copyCtx.rotate(90 * Math.PI / 180);
copyCtx.drawImage(img, 0, 0, 600, 300);
};
img.src = document.getElementById('canvas2').toDataURL();
};
</script>
</body>
</html>
内容就这么多了,希望这篇能帮助到大家。