< Back

Bitmap Graphics with HTML5 Canvas

2012-05-27

Introduction

The <canvas> element supported by HTML5 allows for creation of both vector graphics and bitmap graphics. Bitmap graphics have been available for use in a browser for decades using the <img> tag, but integrating bitmap graphics into <canvas> elements enables us to do more dynamic things with our graphics.

This article will show how to load a bitmap image, specifically a PNG file, into a <canvas> element using JavaScript.

Creating the Canvas Element

The HTML tag used to create a canvas element is <canvas>.

<canvas
	id="canvas1"
	width="300"
	height="200"
></canvas>

We have given the element an ID of "canvas1" so that it can be easily referenced using JavaScript.

Loading an Image

In Javascript we need to create a new Image() object, which we will use to load our bitmap image:

var turtleImage = new Image();

An image can be loaded into this object by setting the "src" attribute of the object. The src attribute needs to be set to a valid URL.

turtleImage.src = "turtle.png";

Displaying the Image

Now that we have loaded a bitmap image, we need to display it within the canvas. First, we will locate the canvas:

var canvas = document.getElementById('canvas1');

Then we need to get the 2D drawing context layer of the canvas object:

var ctx = canvas.getContext('2d');

Lastly, we use the drawImage() method to display the bitmap image. We must provide drawImage() with the Image() object that we wish to display, along with the coordinates on the canvas where we want to locate the image:

ctx.drawImage(turtleImage, 50, 50);

Making Sure the Image Has Loaded

Unfortunately, if you try call the drawImage() function before the browser has finished loading the image, the image will not be displayed. Because of this, we need to make sure that loading is complete first:

turtleImage.onload = function () {
	ctx.drawImage(this, 50, 50);
}

Putting It Together

Combined together, the JavaScript code needed to display a bitmap image within the canvas is:

var canvas = document.getElementById('canvas1');
var ctx = canvas.getContext('2d');

var turtleImage = new Image();
turtleImage.onload = function () {
	ctx.drawImage(this, 50, 50);
}
turtleImage.src = "turtle.png";

Demo

If you are using a modern browser, you should be able to use the demo below to display the 'turtle.png' image in random locations on the canvas: