Tôi chưa quản lý để sử dụng base64
nhưng tôi đã tìm cách để thực hiện việc đó bằng cách sử dụng blob
. Nếu bạn tìm cách để làm điều đó bằng cách sử dụng base64
vui lòng thêm câu trả lời của bạn.
Ngay bây giờ chuỗi hình ảnh của tôi trông như thế này, mà tôi tin rằng sẽ tạo ra cho tôi một số vấn đề:
background-image: url("blob:https%3A//fiddle.jshell.net/214b3c01-5b38-4aae-b839-e35cf57a5190");
tôi đã gợi ý từ một fiddle về how to render a retrieved image as a blob URL
Sau đó, tôi mới chỉ áp dụng vào mã của tôi với a little improvement và thì đấy !!
Reproduction online Làm việc trong IE> 9, Chrome, Firefox ...
Tổng số các mã:
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);
}
// magic numbers: http://www.garykessler.net/library/file_sigs.html
switch (header) {
case "89504e47":
realMimeType = "image/png";
break;
case "47494638":
realMimeType = "image/gif";
break;
case "ffd8ffDB":
case "ffd8ffe0":
case "ffd8ffe1":
case "ffd8ffe2":
case "ffd8ffe3":
case "ffd8ffe8":
realMimeType = "image/jpeg";
break;
default:
realMimeType = "unknown"; // Or you can use the blob.type as fallback
break;
}
return realMimeType;
}
Nơi mà bạn đã nhận được danh sách ma thuật b ytes? Hãy nói rằng, nhưng 1 trong anycase. –
Đừng nhớ nguồn chính xác, nhưng googlying một chút. Bạn có thể tìm thấy một số người trong số họ ở đây: https://en.wikipedia.org/wiki/List_of_file_signatures – Alvaro
Ok cảm ơn. Có vẻ như không có tham chiếu "đi tới" cho việc này. Tôi tìm thấy thông tin ở đây (http://www.nationalarchives.gov.uk/PRONOM/Default.aspx) nhưng không tìm thấy trang web dễ điều hướng nhất. –