如何在不保存文件的情况下将节点 gd 映像编码为 base 64?



我正在使用node-gd操纵一些图像,试图通过他们的 API 上传到推特。

这样做可以正常工作:

fs.readFileSync('test.png', { encoding: 'base64' })

但我希望有一种方法可以做到这一点,而无需将其保存到文件中然后再次加载。

其他人建议做这样的事情:

var gd = require('node-gd');
var img = gd.openPng('test.png');
var buff = Buffer.from(img.pngPtr(), 'binary');
var b64 = buff.toString('base64');
console.log(b64);

但是当我这样做时,我收到一个错误,说TypeError: binary is not a function这对我来说毫无意义。

完全错误:

/home/ubuntu/workspace/test.js:16
var buff = Buffer.from(img.pngPtr(), 'binary');
^
TypeError: binary is not a function
at Function.from (native)
at Function.from (native)
at Object.<anonymous> (/home/ubuntu/workspace/test.js:16:19)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
at node.js:968:3

似乎buffer.from((相对较新(v 5.10.0(,这是早期版本的语法:

new Buffer(pngFile.pngPtr(), 'binary')

有点晚了,但尽管如此:

var gd = require('node-gd');
var img = gd.openPng('test.png');
var buff = img.pngPtr(-1, true);
var b64 = buff.toString('base64');
console.log(b64);

对于img.pngPtr(-1, true)-1是默认压缩,true将返回一个缓冲区。

最新更新