如何将图像上传到 HTML5 canvas

新手上路,请多包涵

我目前正在使用 http://paperjs.org 创建一个 HTML5 画布绘图应用程序。我想让用户将图像上传到画布中。我知道我需要登录并注册,但有更简单的方法吗?我已经看到了 HTML5 拖放上传。

原文由 user1438026 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 329
2 个回答

我假设您的意思是将图像加载到画布中而不是从画布上传图像。

阅读他们在这里的所有画布文章可能是个好主意 https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Canvas_tutorial/Using_images

但基本上你想要做的是在 javascript 中创建一个图像,并将 image.src = 设置为文件位置。在从用户端加载图像的情况下,您将需要使用文件系统 API。

在这里拼凑一个简短的例子:http: //jsfiddle.net/influenztial/qy7h5/

 function handleImage(e){
    var reader = new FileReader();
    reader.onload = function(event){
        var img = new Image();
        img.onload = function(){
            canvas.width = img.width;
            canvas.height = img.height;
            ctx.drawImage(img,0,0);
        }
        img.src = event.target.result;
    }
    reader.readAsDataURL(e.target.files[0]);
}

原文由 DerekR 发布,翻译遵循 CC BY-SA 3.0 许可协议

不需要 FileReader*,最好使用 URL.createObjectURL 方法,这将创建一个直接指向磁盘上文件的符号链接。这将导致更少的内存使用,并且将有一个额外的好处,即只有一个异步事件等待( img.onload 之一)。

 document.getElementById('inp').onchange = function(e) {
  var img = new Image();
  img.onload = draw;
  img.onerror = failed;
  img.src = URL.createObjectURL(this.files[0]);
};
function draw() {
  var canvas = document.getElementById('canvas');
  canvas.width = this.width;
  canvas.height = this.height;
  var ctx = canvas.getContext('2d');
  ctx.drawImage(this, 0,0);
}
function failed() {
  console.error("The provided file couldn't be loaded as an Image media");
}
 <input type="file" id="inp">
<canvas id="canvas"></canvas>

*IIRC 只有少数版本的 Chrome 支持 FileReader,但尚不支持 URL.createObejctURL,因此如果您针对这些版本,您可能需要 FileReader..

原文由 Kaiido 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏