Javascript 将ImageData对象(非画布)转换为图像数据URL

Javascript 将ImageData对象(非画布)转换为图像数据URL,javascript,html5-canvas,base64,data-uri,Javascript,Html5 Canvas,Base64,Data Uri,我想从ImageData对象(即宽度、高度、数据)创建一个dataURL。我意识到canvas有这个功能,但我想避免canvas使用时出现的扭曲(主要是alpha预乘)。。i、 e.我希望避免明显的canvas.putImageData步骤 从中,我可以将任何arraybuffer/typedarray/dataview转换为base64。我不知道的是canvas dataurl如何将宽度/高度添加到base64字符串的Uint8数据部分。我也不知道png转换是如何完成的。(我可以使用原始数据图

我想从ImageData对象(即宽度、高度、数据)创建一个dataURL。我意识到canvas有这个功能,但我想避免canvas使用时出现的扭曲(主要是alpha预乘)。。i、 e.我希望避免明显的canvas.putImageData步骤

从中,我可以将任何arraybuffer/typedarray/dataview转换为base64。我不知道的是canvas dataurl如何将宽度/高度添加到base64字符串的Uint8数据部分。我也不知道png转换是如何完成的。(我可以使用原始数据图像类型,但我认为没有。只有png和jpg)

可能的办法:

  • 使用putImageData将ImageData加载到画布中。失败,数据失真
  • 使用img.src=base64数据创建映像。失败,必须是画布数据URL
  • 其他的

有人知道如何从原始宽度、高度、数据Imagedata构建图像数据URL吗?

理论上,不使用
画布将
Imagedata
对象转换为
数据URL

ImageData
对象具有图像像素的原始RGBA表示。
数据URL
要求数据采用可识别的
MIME
格式。根据,唯一广泛支持的基于像素的图像类型是GIF、JPEG、PNG和ICO。GIF和JPEG非常复杂,所有这些格式都有标题信息,PNG有CRC,因此将像素数据转换为图像格式并非易事

建议使用
画布
进行转换。您说您的尝试“扭曲”了数据,但这表明您的操作方式有问题,因为这确实是受支持的最佳方法,因为它构建在浏览器用于执行所有图像操作的内部结构上


您是否检查了您的
上下文设置?如果您使用的是alpha,您可能需要
ctx.globalCompositeOperation=“copy”
而不是默认的
“source over”

谢谢。我需要在服务器端执行此操作。我目前使用的是,但我想知道是否有更好的方法。主要失真来自非255 alpha值的alpha预乘。其次,任何基于浏览器的方法都可以进行“颜色配置”调整。此后,我发现了一种相当简单的webgl方法,它涉及到使用帧缓冲区。我应该把它记下来!BMP不是将Uint8ClampedArray数据转换为更简单的格式吗?所有主流浏览器都支持它。