Javascript 画布:使用'旋转图像;帆布';
旋转图像并调整画布大小Javascript 画布:使用'旋转图像;帆布';,javascript,Javascript,旋转图像并调整画布大小 var img = document.getElementById("i"); width = img.width; height = img.height; canvasH.width = width; canvasH.height = height; ctxH.clearRect(0, 0, width, height); ctxH.save();
var img = document.getElementById("i");
width = img.width;
height = img.height;
canvasH.width = width;
canvasH.height = height;
ctxH.clearRect(0, 0, width, height);
ctxH.save();
ctxH.translate(width / 2, height / 2);
ctxH.rotate(90 * Math.PI / 180);
ctxH.translate(-(width / 2), -(height / 2));
ctxH.drawImage(img, 0, 0);
ctxH.restore();
var w = canvasH.width;
// Resize canvas to meet rotated image size
// Comment last two lines and see how image rotated
canvasH.width = height;
canvasH.height = w;
画布已旋转(调整大小),但图像超出可见区域
如何获得旋转图像
小提琴:如果您试图将图像旋转90度,这应该可以工作
var canvasH = document.getElementById("canvasH"),
ctxH = canvasH.getContext("2d"),
x = 0,
y = 0,
width = 0,
height = 0,
angle = 180,
timeOut = null;
function loaded() {
var img = document.getElementById("i");
canvasH.width = img.height;
canvasH.height = img.width;
ctxH.clearRect(0, 0, img.width, img.height);
ctxH.save();
ctxH.translate(img.height, 0);
ctxH.rotate(1.57079633);
ctxH.drawImage(img, 0, 0);
ctxH.restore();
}
重要的是要知道,更改画布的宽度/高度会隐式清除画布。因此,无论您要做什么与调整画布大小相关的事情,都要在渲染到画布之前进行 这是一个三角正确的方法,适用于任何角度:
var img = document.getElementById("i"),
angrad = angle * Math.PI /180,
sin = Math.sin(angrad),
cos = Math.cos(angrad);
width = Math.abs(img.width*cos)+Math.abs(img.height*sin);
height = Math.abs(img.height*cos)+Math.abs(img.width*sin);
console.log(img.width,img.height,width,height);
canvasH.width = width;
canvasH.height = height;
ctxH.clearRect(0, 0, width, height);
ctxH.save();
ctxH.translate(width / 2, height / 2);
ctxH.rotate(angrad);
ctxH.translate(-img.width / 2, -img.height / 2);
ctxH.drawImage(img, 0, 0);
ctxH.restore();
===========================
下面的故事你可以忘记:
现在,由于需要旋转,旋转前和旋转后对宽度和高度的解释不同。(当然,对于角度不是90度的“毛茸茸的”情况,一些三角学会派上用场)
我相信这把小提琴能满足你的需要:
var img = document.getElementById("i");
width = img.width;
height = img.height;
canvasH.width = height;
canvasH.height = width;
ctxH.clearRect(0, 0, width, height);
ctxH.save();
ctxH.translate(height / 2, width / 2);
ctxH.rotate(90 * Math.PI / 180);
ctxH.translate(-width / 2, -height / 2);
ctxH.drawImage(img, 0, 0);
ctxH.restore();
需要90、180、270、360。你能解释一下1.57079633吗?@Dmitry:你通过的角度是弧度,而不是度。1.57079633? == PI/2==90degrees@Dmitry正如Constantinius提到的,我指定1.57079633作为文本值,而不是计算PI/2,尽管没有使用文本值的特殊要求。我用它是为了简洁。谢谢。270度工作良好,但180度工作可疑。