Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

HTML5 / Javascript - DataURL to Blob & Blob to DataURL

I have a DataURL from a canvas that shows my webcam. I turn this dataURL into a blob using Matt's answer from here: How to convert dataURL to file object in javascript?

How do I convert this blob back into the same DataURL? I've spent a day researching this and I'm astouned this isn't documented better, unless I'm blind.

EDIT: There is

var urlCreator = window.URL || window.webkitURL;  var imageUrl = urlCreator.createObjectURL(blob);  

but it only returns a really short URL that seems to point at a local file, but I need to send the webcam data over a network.

like image 286
spacecoyote Avatar asked Apr 18 '14 08:04

spacecoyote


People also ask

How do I create a Blob in HTML?

To construct a Blob from other non-blob objects and data, use the Blob() constructor. To create a blob that contains a subset of another blob's data, use the slice() method. To obtain a Blob object for a file on the user's file system, see the File documentation.

How does JavaScript handle Blob data?

The blob data is stored in the memory or filesystem of a user depending on the browser features and size of the blob. A simple blob can be used anywhere we wish just like files. The content of the blob can easily be read as ArrayBuffer which makes blobs very convenient to store the binary data. let res = def.

What is Blob URL in JavaScript?

A URL that was created from a JavaScript Blob can not be converted to a "normal" URL. A blob: URL does not refer to data the exists on the server, it refers to data that your browser currently has in memory, for the current page.

How do I convert Blob links?

From the drop-down menu, select “Open Network Stream.” When a new window opens, paste the copied blob URL in the space under “Please enter a network URL.” Click the downward-pointing arrow next to the “Play” button. From the drop-down menu, select “Convert.”


2 Answers

Use my code to convert between dataURL and blob object in javascript. (better than the code in your link.)

//**dataURL to blob** function dataURLtoBlob(dataurl) {     var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],         bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);     while(n--){         u8arr[n] = bstr.charCodeAt(n);     }     return new Blob([u8arr], {type:mime}); }  //**blob to dataURL** function blobToDataURL(blob, callback) {     var a = new FileReader();     a.onload = function(e) {callback(e.target.result);}     a.readAsDataURL(blob); }  //test: var blob = dataURLtoBlob('data:text/plain;base64,YWFhYWFhYQ=='); blobToDataURL(blob, function(dataurl){     console.log(dataurl); }); 
like image 195
cuixiping Avatar answered Oct 03 '22 14:10

cuixiping


Nevermind, it ended up working after sticking to the instructions in this thread Display image from blob using javascript and websockets and making my server forward raw (yet) unmodified BinaryWebSocketFrames.

Now I'm still fighting bad performance of the canvas (<1fp) but that might become subject of a new thread.

like image 20
spacecoyote Avatar answered Oct 03 '22 13:10

spacecoyote