Следующий код должен иметь возможность сохранять и загружать .png изображение на локальный жесткий диск.Загрузка изображения javascript с локального жесткого диска с использованием blob
Saving отлично работает (по крайней мере, в хроме), но загрузка производит неправильный URL и не показывать ничего ..
Немного помощь будет очень признателен!
<html>
<head>
<title></title>
</head>
<body>
<img id="img" /><br>
<input type="button" value="Save" onclick="onSave()" /><br />
<input type="file" onchange="onOpen(event)" /><br />
<script>
onSave = function() {
var canvas = document.createElement("canvas");
canvas.width = 200;
canvas.height = 200;
var ctx = canvas.getContext("2d");
ctx.fillRect(0, 0, 100, 150);
var dataURL = canvas.toDataURL("image/png");
var img64 = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");
var binaryImg = atob(img64);
var length = binaryImg.length;
var ab = new ArrayBuffer(length);
var ua = new Uint8Array(ab);
for (var i = 0; i < length; i++) {
ua[i] = binaryImg.charCodeAt(i);
}
var blob = new Blob([ab]);
var a = document.createElement("a");
a.download = 'Blob_img';
a.innerHTML = "Download File";
a.href = window.webkitURL.createObjectURL(blob);
a.style.display = 'none';
document.body.appendChild(a);
a.click();
};
onOpen = function (event) {
var fileReader = new FileReader();
fileReader.onload = function (event) {
var ab = event.target.result;
var ua = new Uint8Array(ab);
var binaryImg;
for (var i = 0; i < ua.length; i++) {
binaryImg += String.fromCharCode(ua[i]);
}
var img64 = btoa(binaryImg);
var image = new Image();
image.src = 'data:image/png;base64,' + img64;
var img = document.getElementById('img');
img.src = image.src;
}
fileReader.readAsArrayBuffer(event.target.files[0]);
};
</script>
</body>
</html>
После вызова 'toDataURL', вы должны уже иметь изображение с кодировкой base64. Вам не нужно будет снова закодировать его с помощью 'atob' * * *. – Pointy
@ Понятия не согласны. без этой строки возникает ошибка: ** «atob» не удалось: строка, подлежащая декодированию, неправильно закодирована. ** – 31415926
Вам не нужно кодировать * или * декодировать - просто сохраните байты, а затем перестройте их в качестве кода делается. Однако это ничего не должно повредить; это просто не нужно. – Pointy