Skip to content

Instantly share code, notes, and snippets.

@fupslot
Created February 22, 2013 19:23
Show Gist options
  • Star 59 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save fupslot/5015897 to your computer and use it in GitHub Desktop.
Save fupslot/5015897 to your computer and use it in GitHub Desktop.
Javascript: Convert base64 to a Blob
function dataURItoBlob(dataURI, callback) {
// convert base64 to raw binary data held in a string
// doesn't handle URLEncoded DataURIs - see SO answer #6850276 for code that does this
var byteString = atob(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0]
// write the bytes of the string to an ArrayBuffer
var ab = new ArrayBuffer(byteString.length);
var ia = new Uint8Array(ab);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
// write the ArrayBuffer to a blob, and you're done
var bb = new BlobBuilder();
bb.append(ab);
return bb.getBlob(mimeString);
}
Copy link

ghost commented Jun 27, 2018

Thanks so much :) Tremendous help for me using Expo Image Picker and uploading to Google Storage.

@panchihpeng
Copy link

wonderful !

@andrew-d-moore
Copy link

@noonon solution still working. Thanks

@heart-01
Copy link

heart-01 commented Oct 1, 2022

thank you

@abhinav-official
Copy link

[Error: Creating blobs from 'ArrayBuffer' and 'ArrayBufferView' are not supported]}

@franconisi
Copy link

Thanks @noonon its working! I would help converting it to TS

function dataURIToBlob(dataURI: string) {
  dataURI = dataURI.replace(/^data:/, '');

  const type = dataURI.match(/image\/[^;]+/)[0];
  const base64 = dataURI.replace(/^[^,]+,/, '');
  const arrayBuffer = new ArrayBuffer(base64.length);
  const typedArray = new Uint8Array(arrayBuffer);

  for (let i = 0; i < base64.length; i++) {
    typedArray[i] = base64.charCodeAt(i);
  }

  return new Blob([arrayBuffer], { type });
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment