【发布时间】:2014-01-06 20:12:34
【问题描述】:
假设我们有一个画布:
<canvas id="one" width="100" height="200"></canvas>
点击按钮后,画布会顺时针旋转 90 度(围绕中心),并且画布的尺寸也会更新,因此在某种意义上它看起来像这样:
<canvas id="one" width="200" height="100"></canvas>
注意画布的id是一样的。
想象一下,只是顺时针旋转图像而不被裁剪或填充。
在创建新画布以及逐像素旋转和复制之前,有什么建议吗?
更新带有 cmets 建议的示例代码仍然无法正常工作:
function imageRotatecw90(){
var canvas = document.getElementById("one");
var context = canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;
var myImageData = context.getImageData(0,0, cw,ch);
context.save();
context.translate(cw / 2, ch / 2);
context.rotate(Math.PI/2);
context.putImageData(myImageData, 0, 0);
context.restore();
canvas.width=ch;
canvas.height=cw;
}
【问题讨论】:
-
为什么要逐像素复制?为什么不将图像作为图像数据抓取,调整画布大小,旋转上下文,然后将画布的图像设置为先前的图像数据?大约有十几行非常简单的代码。
-
@Stephen 我会试试的。希望没有陷阱。
-
@Stephen 我试过使用 ImageData 但它没有做任何改变画布尺寸的部分
标签: javascript image-processing canvas