javascript - HTML5 旋转 Canvas 图像

标签 javascript html canvas

我想允许用户旋转 Canvas ,如果旋转后它们不再适合则更改尺寸,这是一个 fiddle :

http://jsfiddle.net/6ZsCz/84/

我似乎无法弄清楚转换后的 x/y 位置:

ctx.translate(canvas.width/2,canvas.height/2);

如您所见,图像确实旋转了,但是当它向左/向右旋转时,它离开了 Canvas ,我如何压缩高度以强制它保持在边界内,这是我想要实现的目标的示例旋转。

enter image description here

编辑:

因为这个问题似乎很受欢迎,所以我在这里发布解决方案而不是 JSFiddle

var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var angleInDegrees=0;
var image=document.createElement("img");
image.onload=function(){
    ctx.drawImage(image,(canvas.width - image.width) / 2, (canvas.height - image.height) / 2,image.width, image.height);//ctx.drawImage(img, x, y, width, height)
}
image.src="http://www.farmvertical.com/wp-content/uploads/2007/10/vertical_farm_v2.jpg";
$("#clockwise").click(function(){ 
    angleInDegrees+=90;
    drawRotated(angleInDegrees);
});
$("#counterclockwise").click(function(){ 
    angleInDegrees-=90;
    drawRotated(angleInDegrees);
});
function drawRotated(degrees){
    ctx.clearRect(0,0,canvas.width,canvas.height);
    ctx.save();
    ctx.translate(canvas.width/2,canvas.height/2);
    ctx.rotate(degrees*Math.PI/180);

    if(angleInDegrees%180==0){
        ctx.drawImage(image, -image.width/2,-image.height/2);
    }else{
        ctx.drawImage(image, -image.width/2,-canvas.width/2,image.width, canvas.width);
    }
    ctx.restore();
}

最佳答案

这是你想要的吗?

function drawRotated(degrees){
    ctx.clearRect(0,0,canvas.width,canvas.height);
    ctx.save();
    ctx.translate(canvas.width/2,canvas.height/2);
    ctx.rotate(degrees*Math.PI/180);

    if(angleInDegrees%180==0){
        ctx.drawImage(image, -image.width/2,-image.height/2);
    }else{
        ctx.drawImage(image, -image.width/2,-canvas.width/2,image.width, canvas.width);
    }
    ctx.restore();
}

关于javascript - HTML5 旋转 Canvas 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19588923/

相关文章:

javascript - 如何获取元素的 ID

javascript - 根据方向交换 prev() 或 next()

c# - 页面回传上的 Javascript 事件

javascript - Android HTML5 FileApi 可以从 SD 卡读取文件吗?

html - 在图像和 div 上包装文本

php - 我的侧边栏小部件在 Wordpress 中不是垂直的?如何正确对齐?

javascript - 将场景分成几张 Canvas 还是继续重画一张?

javascript - 在 Canvas 内创建可滚动文本

php - 在 laravel 5.7 中使用 ajax 技术

javascript - 碰到 Canvas x 边框时向后移动一个圆圈