我想知道是否有办法从之前从画布元素获得的ImageData中创建一个新的Image。
我已经搜索了解决方案,但它们似乎都是将结果绘制到画布上。
如果可能的话,我需要一种将ImageData对象直接转换为Image的方法。
我想知道是否有办法从之前从画布元素获得的ImageData中创建一个新的Image。
我已经搜索了解决方案,但它们似乎都是将结果绘制到画布上。
如果可能的话,我需要一种将ImageData对象直接转换为Image的方法。
之前的回答都没有像主题所述那样回答问题——从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;
}
您可以在 Canvas 中使用 toDataURL 方法,它可以将图像数据转换为 Data 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);
如果您想知道用户的浏览器是否支持Data URI Scheme,您可以使用这个函数。
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.
}
<canvas id='mycanvas'></canvas>
var imgData = document.getElementById('mycanvas').toDataURL();
<img id='myimage'/>
document.getElementById('myimage').src = imgData;
许多现代浏览器都支持Data URI方案。
如果您有图像数据,可以使用JavaScript设置img元素的src属性。
请看以下示例:http://www.websiteoptimization.com/speed/tweak/inline-images/
简单的图像类实际上是HTMLImageElement,从ImageData创建它很麻烦。根据应用程序,我建议看看更抽象的CanvasImageSource,其中HTMLImageElement即Image()是其实现。例如,ImageBitmap可以直接从数据创建,而OffscreenCanvas可能是一个有用的东西。