Join the AI Workshop and learn to build real-world apps with AI. A hands-on, practical program to level up your skills.
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 long garbage part is composed of seemingly random letters and numbers.
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 this is especially useful when you create an image on the server and want to serve it in a web page.
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() + '" />'