动态添加图像到画布

时间:2011-08-04 15:40:21

标签: jquery html5 dynamic canvas

美好的一天。

我想知道有没有办法动态地将图像从用户计算机添加到画布。

例如我有:

<canvas id="canvas"></canvas>
<input type="file" id="image-chooser">

如果用户选择带有输入的图像,则会将其添加到画布中。

请告诉我任何要遵循的路径。

谢谢!

1 个答案:

答案 0 :(得分:28)

要做到这一点,您应该熟悉HTML5 Canvas API和File API。当然,浏览器中提供的此功能仅支持HTML5 API。

执行此操作的过程是:

  1. change事件发送到文件输入元素。
  2. 从事件处理程序获取上传的文件,并使用FileReader获取数据网址 对象。
  3. 使用数据网址创建img元素并将其绘制在画布上。
  4. 我在jsfiddle上做了一个简单的example。代码如下所示:

    <canvas id="canvas"></canvas>
    <input type="file" id="file-input">
    <script>
    $(function() {
        $('#file-input').change(function(e) {
            var file = e.target.files[0],
                imageType = /image.*/;
    
            if (!file.type.match(imageType))
                return;
    
            var reader = new FileReader();
            reader.onload = fileOnload;
            reader.readAsDataURL(file);
        });
    
        function fileOnload(e) {
            var $img = $('<img>', { src: e.target.result });
            $img.load(function() {
                var canvas = $('#canvas')[0];
                var context = canvas.getContext('2d');
    
                canvas.width = this.naturalWidth;
                canvas.height = this.naturalHeight;
                context.drawImage(this, 0, 0);
            });
        }
    });
    </script>
    

    有很多关于文件API的好教程,如thisthis