gpt4 book ai didi

html - readPixels 到 base64(WebGL 服务器端缓冲区转换)

转载 作者:太空狗 更新时间:2023-10-29 16:34:27 27 4
gpt4 key购买 nike

我正在使用 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');

但是,无法解码此缓冲区生成的字符串以生成图像。可能像素不是“二进制”类型?或者我应该只将像素字符串保存在数据库中并尝试在客户端逐个像素地重绘 Canvas 中的像素(我认为这不是最好的方法)?

最佳答案

gl.readPixels得到的是位图数据。我用 Jimp库将数据转换为不同的格式,然后从中获取 base64 图像字符串。

NodeJS 代码

var Jimp = require("jimp")

//Create context
var width = 50
var height = 50

var gl = require('gl')(width, height, { preserveDrawingBuffer: true })

//Clear screen to red
gl.clearColor(1, 0, 0, 1)
gl.clear(gl.COLOR_BUFFER_BIT)

// get bitmap data
var bitmapData = new Uint8Array(width * height * 4)
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, bitmapData)

// use Jimp library to create an image with a specific mime type
var image = new Jimp(width, height, function (err, image) {

// assign the bitmap as data for the image
image.bitmap.data = bitmapData
// generate base64
image.getBase64("image/png", function (error, str) {
// result
console.log(str)
})
})

在浏览器中测试它是否适合你(JS 代码):

var base64Img = "" // TODO paste the result from NodeJS

document.body.innerHTML = ""
document.write('<img src="' + base64Img + '"/>');

关于html - readPixels 到 base64(WebGL 服务器端缓冲区转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47057079/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com