I have not been able to use base64 yet, but I have found a way to do this using blob . If you find a way to do this using base64 , add your answer.
Right now, my image line looks like this, which I think will create some problems for me:
background-image: url("blob:https%3A//fiddle.jshell.net/214b3c01-5b38-4aae-b839-e35cf57a5190");
I got a hint from the violin how to display the resulting image as a blob url
Then I just applied it to my code with a little improvement and voila !!
Play online Work in IE> 9, Chrome, Firefox ...
All code:
HTML
<input type="file" id="upload" /> <div class="bg"></div>
Javascript
$(document).on('change', '#upload', addBackgroundImage); function addBackgroundImage(event) { var reader = new FileReader(); reader.onloadend = function(event) { var realMimeType = getRealMimeType(reader); if (realMimeType !== 'unknown') { var base64 = reader.result; var arrayBufferView = new Uint8Array( this.result ); var blob = new Blob( [ arrayBufferView ], { type: realMimeType } ); var urlCreator = window.URL || window.webkitURL || {}.createObjectURL; var imageUrl = urlCreator.createObjectURL( blob ); $('.bg').css('background-image', 'url('+imageUrl+')'); } else { alert("Please upload a valid image file"); } } reader.readAsArrayBuffer(event.target.files[0]); $('#upload').val(''); } function getRealMimeType(reader){ var arr = (new Uint8Array(reader.result)).subarray(0, 4); var header = ''; var realMimeType; for (var i = 0; i < arr.length; i++) { header += arr[i].toString(16); }
Alvaro
source share