joplin-notes/Export-9fad9947-5bd5-4195-952b-6512c5a4beb1/Web development 83dd4e6675f04ba782a6865a434a0598/React 5b9af27e2c194a4cb22a32306e53c39f/Extract data uri from image 5610c5f6df1b49978b3a19.md
2026-11-04 00:33:23 +05:30

2.2 KiB

Extract data uri from image

https://mitch.codes/how-to-get-the-data-url-of-an-image-in-javascript/

Normally we have to use callback function for image.onload just like in below image

const avatarImg=new Image()
avatarImg.src=source // src of img  
avatarImg.onload = function() {
          var c = document.getElementById("myCanvas");
          var ctx = c.getContext("2d");
          ctx.canvas.width = avatarImg.width;
          ctx.canvas.height = avatarImg.height;

          ctx.drawImage(avatarImg, 0, 0);
        };

this is callback function

function getBase64Image(img) {
  var canvas = document.createElement("canvas");
  canvas.width = img.width;
  canvas.height = img.height;
  var ctx = canvas.getContext("2d");
  ctx.drawImage(img, 0, 0);
  var dataURL = canvas.toDataURL("image/png");
  return dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
}

var base64 = getBase64Image(document.getElementById("imageid"));

Using promises we can convert to async await to make it look like synchronous thus easier to use and debug.

const createImage = (src) => {
    return new Promise((resolve, reject) => {
      const image = new Image();
      image.crossOrigin = "anonymous";
      image.src = src;

      image.onload = () => {
        resolve(image);
      };

      image.onerror = (e) => {
        reject(e);
      };
    });
  };

const getDataURL=async (src) => {
    
    const image = await createImage(src);
    const canvas = document.createElement("canvas");
    canvas.width = image.width;

    canvas.height = image.height;

    const ctx = canvas.getContext("2d");
    ctx.drawImage(image, 0, 0);
    const dataURL = canvas.toDataURL("image/png");
    return dataURL

}

Whole code to convert image http url and local file to data uri(base 64 encoded):

Full codebase for conversion to data uri