如何在javascript中从imageData生成图像?

Yem*_*lat 32 javascript canvas putimagedata

我想知道是否有任何方法可以从imageData创建一个新的Image,这是以前从canvas元素获得的?

我已经搜索了一个解决方案,但他们似乎都将结果绘制到画布上.所以基本上我需要一种方法将ImageData对象直接转换为Image,如果可能的话.

sko*_*oll 35

之前的答案都没有提供问题的答案,因为它是在主题中呈现的 - 从ImageData获取图像.所以这是一个解决方案.

function imagedata_to_image(imagedata) {
    var canvas = document.createElement('canvas');
    var ctx = canvas.getContext('2d');
    canvas.width = imagedata.width;
    canvas.height = imagedata.height;
    ctx.putImageData(imagedata, 0, 0);

    var image = new Image();
    image.src = canvas.toDataURL();
    return image;
}
Run Code Online (Sandbox Code Playgroud)

  • 尽管不是很明确,但我认为提问者正在寻找不涉及在画布上绘制画布的答案。 (2认同)

Dav*_*him 24

您可以在Canvas中使用toDataURL方法.它将图像数据作为数据URI.

var canvas = document.createElement("canvas");
canvas.width = 100;
canvas.height = 100;
var ctx = canvas.getContext("2d");
ctx.fillStyle = "red";
ctx.fillRect(0, 0, 100, 100);

var img = document.createElement("img");
img.src = canvas.toDataURL("image/png");
document.body.appendChild(img);
Run Code Online (Sandbox Code Playgroud)

如果您想知道用户的浏览器支持数据URI方案,您可以使用此功能.

function useSafeDataURI(success, fail) {
    var img = document.createElement("img");

    img.onerror = function () {
        fail();
    };
    img.onload = function () {
        success();
    };

    img.src = "data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="; // insert a dot image contains 1px.
}
Run Code Online (Sandbox Code Playgroud)

  • 也许我错了,但问题却不是相反吗?如何从ImageData对象获取图像? (7认同)

los*_*rce 7

假设这是你的画布

<canvas id='mycanvas'></canvas>
Run Code Online (Sandbox Code Playgroud)

您可以使用表示图像

var imgData = document.getElementById('mycanvas').toDataURL();
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过更改其来源将其放入常规图像标记中

<img id='myimage'/>

document.getElementById('myimage').src = imgData;
Run Code Online (Sandbox Code Playgroud)