【发布时间】:2020-09-06 22:04:12
【问题描述】:
我正在使用 Angular 8,我通过 Web 套接字(signalR 流)从服务器获取了几个 png base64 图像。更准确地说:我每秒收到 15 个响应(15 帧),每个响应都有 3 个新图像。
我需要处理这些图像并将它们呈现给用户(当前在画布中)。
到目前为止我做了什么:
const image = new Image();
image.onload = () => {
this.canvasForConversionContext.drawImage(image, 0, 0, image.width, image.height);
const imageData = this.canvasForConversionContext.getImageData(0, 0, image.width, image.height);
// loop trought the image and change color (it can be done in web worker (separate threed))
this.processImagePixelByPixel(imageData.data);
// back to canvas to convert processed image data to new image
this.canvasForConversionContext.putImageData(imageData, 0, 0);
const finalImage = new Image();
finalImage.onload = () => {
// here are get the final image
};
finalImage.src = this.canvasForConversion.toDataURL();
};
image.src = imageFromTheServerInBase64Format;
这个简单的图表呈现过程。
下面这些步骤是对上面代码的解释:
- 将从服务器获取的图片加载到图片标签中
- 将图像放入画布进行转换
- 从画布中获取图像数据
- 逐像素处理图像数据
- 再次将数据放入画布
- 将画布中的数据导出为 base64 图像
- 从导出的 base64 图像创建最终图像
这是已经完成的事情,并且可以正常工作,但是工作速度非常慢。 当前代码中的任何其他技术或建议如何加快此过程?
我试图避免使用画布来处理图像数据,但我没有找到任何相关信息。 除了画布(某些库)之外,还必须有其他东西来处理图像像素?
【问题讨论】:
-
如果您在服务器上处理照片,为什么不使用ImageMagick?它会运行得更快!
-
服务器不是选项。服务器上已经有很多工作了。它必须在客户端完成。
标签: javascript angular image-processing canvas