Skip to content

How to print a canvas to a data URL

New Course Coming Soon:

Get Really Good at Git

Data URLs are a useful feature provided by browsers.

We can have an image that instead of referencing a file system file, like

<img src="image.png" />

it embeds the image in the HTML itself, something like this:

<img src="data:image/png;base64,iVBORw0KGgoAA…" />

where the garbage part that’s composed by seemingly random letters and numbers is very long.

I was playing with the Canvas API to generate an image dynamically, and I stumbled upon the toDataURL() method of the Canvas object:

canvas.toDataURL()

I think that this is especially useful when you create a server-side image and you want to serve it in a web page, server-side generated.

All from a Node.js process.

In particular, using the canvas npm package we can initialize a canvas:

const { createCanvas, loadImage } = require('canvas')
const canvas = createCanvas(200, 200)
const ctx = canvas.getContext('2d')

draw into it, using for example ctx.fillText('Hello, World!', 50, 100) and then call canvas.toDataURL() to generate the data URL for an image which we can then append to the HTML in a string, like this:

const imageHTML = '<img src="' + canvas.toDataURL() + '" />'

You can do the same on the frontend, of course, except now the canvas object is a reference to a <canvas> HTML element you are drawing to:

const canvas = document.getElementById('canvas')
//…
const imageHTML = '<img src="' + canvas.toDataURL() + '" />'
Are you intimidated by Git? Can’t figure out merge vs rebase? Are you afraid of screwing up something any time you have to do something in Git? Do you rely on ChatGPT or random people’s answer on StackOverflow to fix your problems? Your coworkers are tired of explaining Git to you all the time? Git is something we all need to use, but few of us really master it. I created this course to improve your Git (and GitHub) knowledge at a radical level. A course that helps you feel less frustrated with Git. Launching May 21, 2024. Join the waiting list!
→ Get my Node.js Handbook
→ Read my Node.js Tutorial on The Valley of Code

Here is how can I help you: