Automattic/node-canvas

`Image#src=` does not work with object URL (`onload` never called, cannot be drawn on 2d context)

Open

#2,525 opened on Jul 16, 2025

View on GitHub
 (2 comments) (1 reaction) (0 assignees)JavaScript (1,140 forks)batch import
Good first issue

Repository metrics

Stars
 (9,524 stars)
PR merge metrics
 (Avg merge 34d 18h) (2 merged PRs in 30d)

Description

import { Image } from 'canvas';
import { readFileSync } from 'fs';

const file = readFileSync('test.png');
const objectUrl = URL.createObjectURL(new Blob([file], { type: 'image/png' }));
const image = new Image();
image.onload = () => {
	URL.revokeObjectURL(objectUrl);
	console.log('in onload: complete =', image.complete); // never called
};
image.src = objectUrl;
console.log('immediately after setting src: complete =', image.complete); // true

If you try to draw an image with src being an object URL on a 2d context, you get Error: Image given has not completed loading.

Environment:

  • Node.js 22.14.0
  • canvas 3.1.2

Contributor guide