Подтвердить что ты не робот

Можно ли загрузить локальный файл в элемент холста 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?

Любая помощь, советы или советы очень ценится! Спасибо!

4b9b3361

Ответ 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-адрес данных изображения.

ДОПОЛНИТЕЛЬНЫЕ ШАГИ (требуется только, если вы планируете манипулировать изображениями на холсте):

  1. В обратном вызове FileReader onload (здесь createImage) создайте новый объект Image и установите его src в result файла FileReader:

    img = new Image();
    img.onload = imageLoaded;
    img.src = fr.result;
    
  2. Наконец, в обратном вызове 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