我试图旋转图像,裁剪,渲染到画布;全部在一个画布层中。我不认为用提供的API可能,我想我必须呈现第二个画布层,然后将其渲染回原始图层,是否正确?HTML5画布:在单个画布上旋转裁剪后的图像
据我所知,这是一个非常线性的画布过程:[翻译到图像中间],[应用旋转],[旋转回到左上角],[用裁切值绘制图像]。
我试图旋转图像,裁剪,渲染到画布;全部在一个画布层中。我不认为用提供的API可能,我想我必须呈现第二个画布层,然后将其渲染回原始图层,是否正确?HTML5画布:在单个画布上旋转裁剪后的图像
据我所知,这是一个非常线性的画布过程:[翻译到图像中间],[应用旋转],[旋转回到左上角],[用裁切值绘制图像]。
韦尔普我想通了不久,我意识到,有一个剪辑工具,哇哇!
基本上补丁(对于那些谁到这里来)是:
您需要设置的路径,并设置了边界,然后关闭&夹的路径,然后应用旋转,然后应用的drawImage(不甚至需要将作物施用于它)。
所以即(V =对象; v.p =位置; v.c =作物大小; v.s =图像大小)
vb.ctx.beginPath();
vb.ctx.moveTo(v.p[0], v.p[1]);
vb.ctx.lineTo(v.p[0]+v.c[0], v.p[1]);
vb.ctx.lineTo(v.p[0]+v.c[0], v.c[1]+v.p[1]);
vb.ctx.lineTo(v.p[0], v.c[1]+v.p[1]);
vb.ctx.lineTo(v.p[0], v.p[1]);
vb.ctx.closePath();
vb.ctx.clip();
vb.ctx.translate(v.p[0]+ (v.c[0]/2), v.p[1] + (v.c[1]/2));
vb.ctx.rotate(v.rot);
vb.ctx.translate(0-(v.p[0]+ (v.c[0]/2)) , 0-(v.p[1] + (v.c[1]/2)));
vb.ctx.drawImage(v.dom, v.p[0], v.p[1], v.s[0], v.s[1]);
您可以同时旋转和裁剪源图像到这样的画布:
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
ctx.fillStyle='red';
ctx.globalAlpha=0.50;
ctx.fillRect(50,50,150,40);
ctx.fillStyle='black';
ctx.globalAlpha=1.00;
ctx.fillText("Crop Me!",55,65);
var img=new Image();
img.onload=function(){
ctx.translate(150,150);
ctx.scale(2,2);
ctx.rotate(Math.PI/4);
ctx.drawImage(img,50,50,75,20, -75/2,-20/2,75,20);
};
img.src=canvas.toDataURL();
body{ background-color: ivory; padding:10px; }
canvas{border:1px solid red;}
<canvas id="canvas" width=300 height=300></canvas>
这是我已经有工作。当我说裁剪图像时,我的意思是裁剪/缩放到图像中。这不适用于此。 – 2014-10-07 04:14:54
澄清:要剪切现有画布的一部分,并将其重绘到同一画布上,并重绘图像被旋转和/或缩放? – markE 2014-10-07 04:17:57
我想剪切一个图像在一个旋转的范围内 - 在一个画布上(我不认为这是可能的addDraw裁剪输入) – 2014-10-07 04:20:12