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.
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.
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.
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.
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.”
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); });
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With