canvas.width=data.w;canvas.height=data.h;
var ctx = ctx = canvas.getContext("2d");
var cx = -canvas.width / 2; var cy = -canvas.height / 2;
ctx.translate(-cx,-cy); //move to centre of canvas
ctx.rotate(data.angle * Math.PI/180);
ctx.scale(data.scale, data.scale);
var source = $('#original_picture'); //same src as guillotine object
if( data.angle == 0 ) { // simple offsets from canvas centre & scale
ctx.drawImage(source[0],(cx-data.x)/data.scale, (cy-data.y)/data.scale );
} else if( data.angle == 90 ) { // swap axis and reverse the new y origin
ctx.drawImage(source[0],(cy-data.y)/data.scale, (-1*source[0].height)+((-cx+data.x)/data.scale) );
} else if( data.angle == 180 ) { // reverse both origins
ctx.drawImage(source[0],(-1*source[0].width)+((-cx+data.x)/data.scale), (-1*source[0].height)+((-cy+data.y)/data.scale) );
} else if( data.angle == 270 ) { // swap axis and reverse the new x origin
ctx.drawImage(source[0],(-1*source[0].width)+((-cy+data.y)/data.scale), (cx-data.x)/data.scale );
}
var dataURL = canvas.toDataURL();
My nightmare is over.