javascript - 将原始图像绘制到 Canvas 中

标签 javascript html canvas image

我想将上传的图像放入 Canvas 中并使用它。

HTML:

<h2>Upload:</h2>
<input type="file" id="take-picture" accept="image/*">

<h2>Preview:</h2>
<p>
    <canvas id="show-picture" style="background-color: aqua; height: 100px; width: 100px;" />
</p>

这是我的 JavaScript,用于处理上传后的图片:

    takePicture.onchange = function (event) {
        var files = event.target.files,
            file;
        if (files && files.length > 0) {
            file = files[0];
            processImage(file);
        }
    };

现在在 processImage 方法中,图片应该存储在 Canvas 中。

function processImage(file) {
    // showImage(showPicture, file); //loading into a regular img-tag

    var canvas = document.getElementById('show-picture');
    var context = canvas.getContext('2d');
    context.drawImage(file, 100, 100);
}

我能够将此文件放入 img 标签中,但我不能简单地绘制它。

有什么想法吗?

最佳答案

drawImage 函数将 img 元素作为输入,而不是文件。

因此您需要从文件创建一个 img 元素(但不需要将其附加到文档中)。当图像完成加载(有一个 onload 事件)时,您可以将其绘制在 Canvas 上。

编辑:在将文件设置为图像源之前,您还需要读取文件内容作为数据 URL。

var reader = new FileReader();
reader.readAsDataUrl(file)
reader.onload = function(e) {
    var img = new Image();
    img.onload = function() {
       context.drawImage(img, 100,100)
    }
    img.src = e.target.result;
}

关于javascript - 将原始图像绘制到 Canvas 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12553265/

相关文章:

javascript - Dockerfile,在dev/prod之间切换

javascript - Firefox OS Building Blocks 区域部分的背景缺失

java - 如何将一张 Canvas 的内容复制到另一张 Canvas 上?

javascript - 将 slider 值保存到全局变量并输出到 div

javascript - 使用 for...in 和 instanceof 来解析对象

javascript - 如何使用参数插入多行?

javascript - 将文本环绕固定分隔线

javascript - 带文字的 CSS 平行四边形

javascript - 为什么我在使用 getElementById 时得到 "TypeError: Cannot read property ' value' of null"?

html - 将 XElement 转换为 HTML 字符串