Можно ли загрузить локальный файл в элемент холста html?
Моя цель - заставить пользователей iPad загружать изображение в холст, а затем получить базовое 64 кодированное изображение во время OFFLINE
JSFiddle
JSFiddle
код
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../js/libs/jquery-1.7.1.min.js"></script>
<script>
$(document).ready(function(){
//Get the canvas
var canvas = document.getElementById('testCanvas');
var context = canvas.getContext('2d');
$("#testButton").click(function(){
var base_image = new Image();
base_image.src = $("#testImg").val();
//base_image.src = '1.jpg';
//When the image loads
$(base_image).load(function(){
//Resize canvas for image
$("#testCanvas").attr({
width: base_image.width,
height: base_image.height
});
//Draw image on canvas
context.drawImage(base_image, 0, 0);
//Get base64 encoded image
var imageString = canvas.toDataURL("image/jpeg");
$("#imageString").val(imageString);
//alert($("#imageString").val().length);
$("#imageOutput").attr("src", imageString);
});//image load
});//Test Button Click
});//doc ready
</script>
</head>
<body>
<form>
<input type="file" name="testImg" id="testImg" />
</form>
<button id="testButton">Test</button>
<canvas id="testCanvas" style="border: 1px solid black;">Your Browser does not support canvas</canvas>
<br />
<fieldset>
<legend>Image Data</legend>
<textarea id="imageString"></textarea>
<img id="imageOutput" src="" />
</fieldset>
</body>
</html>
Я знаю, что изображение на самом деле не загружено из <input type='file' />
, но я решил, что это стоит того. В консоли Chrome я получаю:
Не разрешено загружать локальный ресурс
Есть ли способ получить изображения с моего iPad в элемент canvas?
Любая помощь, советы или советы очень ценится! Спасибо!
Ответы
Ответ 1
У меня есть функционирование скрипта (на основе предыдущей работы этого ответа), который демонстрирует, как загрузить изображение с помощью ввода файла, поместить его внутри холста и прочитать URL-адрес данных base64.
Короче говоря, вы должны:
-
Используйте API файлов для чтения на изображении (вы можете сделать это в прослушивателе onchange
входного элемента):
var file = input.files[0];
var fr = new FileReader();
fr.onload = createImage; // onload fires after reading is complete
fr.readAsDataURL(file); // begin reading
-
В обратном вызове FileReader onload
(здесь createImage
) прочитайте result
файла FileReader (здесь, fr.result
). Это ваш URL-адрес данных изображения.
ДОПОЛНИТЕЛЬНЫЕ ШАГИ (требуется только, если вы планируете манипулировать изображениями на холсте):
-
В обратном вызове FileReader onload
(здесь createImage
) создайте новый объект Image
и установите его src
в result
файла FileReader:
img = new Image();
img.onload = imageLoaded;
img.src = fr.result;
-
Наконец, в обратном вызове Image onload
нарисуйте его на холсте, а затем используйте canvas.toDataUrl
для данных:
canvas.width = img.width; // set canvas size big enough for the image
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img,0,0); // draw the image
// do some manipulations...
canvas.toDataURL("image/png"); // get the data URL