【发布时间】:2018-04-13 21:38:31
【问题描述】:
我正在使用 headless-gl 在 Node.js 上运行 webGL,在服务器上动态创建图像。创建后,图像将存储在数据库(MongoDB)中,然后用户再次通过 API 访问图像。
下面是生成图片的部分:
var pixels = new Uint8Array(width * height * 4)
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels)
然后将像素转换为 base64(因为这似乎是在客户端 HTML 中由 Image 加载的推荐方式)。
var base64Image = new Buffer(pixels, 'binary').toString('base64');
但是,此缓冲区生成的字符串无法解码以生成图像。可能像素不是“二进制”类型?或者我应该只是将像素字符串保存在数据库中,然后尝试在客户端中逐个像素地重绘画布中的像素(我认为这不是最好的方法)?
【问题讨论】:
-
您所说的“回读以生成图像”是什么意思?我的意思是代码。
-
我已将“回读”编辑为解码,希望它澄清!
-
下面是生成图像的部分:不,这不是生成的图像,它是图像数据(每像素的颜色数据)。此数据可以与 frameBuffer 一起使用。这并不容易 。您的基础图像文件是否来自您的服务器(域),如果不是,您无法确定生成图像。您是否尝试调试可变像素并查看它是什么?
-
嗨,可变像素包含我之前生成的图像的每个像素的颜色数据(未附加代码)。我想将这个变量像素变成一个字符串,以便图像可以保存在数据库中,然后再由客户端的浏览器下载。想知道如何转换它以及使用正确的格式——在我在线进行了一些初步搜索后,似乎推荐使用 base64
标签: html webgl glreadpixels server-rendering