I'm building a mobile website and I'd like to use the Camera API to take photos. The images should be displayed on the website and uploaded to a server. According to the introduction to the Camera API on MDN the images can be accessed and displayed on the website using FileReader
or window.URL.createObjectURL
. I tested these possible solutions successfully with an iPad (Safari and Chrome) and an Android tablet (Chrome and Firefox).
What is the difference between FileReader
and window.URL.createObjectURL
? I think window.URL.createObjectURL
is newer but not a standard yet. Is there a difference in the performance?
createObjectURL() The URL. createObjectURL() static method creates a string containing a URL representing the object given in the parameter. The URL lifetime is tied to the document in the window on which it was created. The new object URL represents the specified File object or Blob object.
createObjectURL is synchronous but it seems to complete almost instantaneously. Also note that calling URL. revokeObjectURL in the image's onload handler breaks "Open image in New Tab" in the image's context menu.
The URL. createObjectURL() method has been removed from the MediaStream interface. This method has been deprecated in 2013 and superseded by assigning streams to HTMLMediaElement.
createObjectURL is a static method provided by the URL Web API. Returns a DOMString containing a unique blob URL, that is a URL with blob: as its scheme, followed by an opaque string uniquely identifying the object in the browser.
There is difference.
createObjectURL
is synchronously executed (immediately)FileReader.readAsDataURL
is asynchronously executed (after some time)createObjectURL
returns url with hash, and store object in memory until document triggers unload event (e.g. document close) or execute revokeObjectURL
FileReader.readAsDataURL
returns base64
that contains many characters, and use more memory than blob url, but removes from memory when you don't use it (by garbage collector)createObjectURL
from IE 10 and all modern browsersFileReader.readAsDataURL
from IE 10 and all modern browsersFor me, is better to use blob url's (via createObjectURL
), it is more efficient and faster, but if you use many object urls, you need to release these urls by revokeObjectURL
(to free memory).
For example, you can call URL.revokeObjectURL inside an Image onload handler and the Image object will keep the image data, without losing it, Nahuel Greco (c).
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