私はまだ管理していませんbase64
を使用するが、私はblob
を使ってそれを行う方法を見つけた。 base64
を使って行う方法が見つかった場合は、回答を追加してください。
background-image: url("blob:https%3A//fiddle.jshell.net/214b3c01-5b38-4aae-b839-e35cf57a5190");
私はおよそhow to render a retrieved image as a blob URL
その後、私はちょうどそれを適用フィドルからヒントを得た:
は、今のところ私のイメージの文字列は、私は私にいくつかの問題が発生すると信じている、このようになります。 a little improvementとvoilaで私のコードに! IE> 9、クロム、Firefoxでの作業
Reproduction online ...
全体コード:
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;
}
をytes?言及するのは良いことですが、任意の場合は+1してください。 –
正確な情報源は覚えていませんが、ちょっとした情報があります。ここでいくつかを見つけることができます:https://en.wikipedia.org/wiki/List_of_file_signatures – Alvaro
ありがとうございました。このための「参照先」の参照がないように見えます。私はここで情報を見つけたが(http://www.nationalarchives.gov.uk/PRONOM/Default.aspx)、ナビゲートするのが最も簡単なサイトではなかった。 –