I have an image and have overlaid a canvas on top of it so that I can draw 'on' the image without modifying the image itself.
<div class="needPic" id="container">
<img id="image" src=""/>
<!-- Must specify canvas size in html -->
<canvas id="sketchpad" width="70%" height="60%">Sorry, your browser is not supported.</canvas>
<canvas id="sketchpad" style="width:70%;height:60%;"></canvas>
You need to set the size of the canvas in pixels or you will not only reduce the quality of its content but if you want to draw on it the mouse-coordinates will be off as well. Don't use CSS to scale canvas if you're gonna use it interactively.
I would recommend you adjust your image then adopt the canvas to whatever size the image is. You can do this by using
getComputedStyle(element) which gives you whatever size the element is set to in pixels.
onload (as you need to be sure the image is actually loaded to get its size) or later if you change the image (CSS) size on the go, you can do this:
/// get computed style for image var img = document.getElementById('myImageId'); var cs = getComputedStyle(img); /// these will return dimensions in *pixel* regardless of what /// you originally specified for image: var width = parseInt(cs.getPropertyValue('width'), 10); var height = parseInt(cs.getPropertyValue('height'), 10); /// now use this as width and height for your canvas element: var canvas = document.getElementById('myCanvasId'); canvas.width = width; canvas.height = height;
Now the canvas will fit image but with canvas pixel ratio 1:1 to help you avoid problems when you're gonna draw on the canvas. Otherwise you will need to convert/scale the mouse / touch coordinates as well.