I have drawn an image into canvas.
Now what i am trying is if user click on roate left button total canvas should rotate left (i.e., Image rotate to 90 degress) and if rotate right canvas should rotate right.
this is what i tried for rotation. Please suggest me the code to achieve this
var canvasId = document.getElementById("preview");
var cntxt = canvasId.getContext("2d");
cntxt.translate($("#preview").width()-1, $("#preview").height()-1);
cntxt.rotate(convertToRadians(90));
cntxt.drawImage(canvasId, 0, 0, $("#preview").width(), $("#preview").height());
function convertToRadians(degree) {
return degree*(Math.PI/180);
}
Working Solution:
// Getting the canvas
var canvasId = document.getElementById(id);
var ctx = canvasId.getContext("2d");
// Store the current transformation matrix
ctx.save();
ctx.setTransform(1,0,0,1,0,0);
// Getting the canvas width and height
var w = $("#preview").width();
var h = $("#preview").height();
ctx.clearRect(0, 0, w, h);
// Restore the transform
ctx.restore();
// TranslateX should be canvaswidth/2 and translateY should be canvasheight/2
var translateX = w/2;
var translateY = h/2;
// translating the context
ctx.translate(translateX,translateY);
// As we need to rotate the image to 90 degrees
// Where r can be 1 to 36 for 10 to 360 degree rotation
var r = 9;
ctx.rotate(r*10*Math.PI/180);
ctx.translate(-translateX,-translateY);
// Drawing canvas
ctx.drawImage(ImageObject, 0, 0, w, h);
One more doubt can't we rotate the whole canvas to keep the proper aspect ratio of the image