我想生成并提供文字图片。
目前我正在尝试使用text2png
:
text2png('this string', {font: '14px Courier', bgColor: 'white'})
但是text2png
似乎无法执行unicode /表情符号。
有没有办法可以将包含这些字符的字符串渲染成图像?
text2png
在其他方面表现得非常好。
答案 0 :(得分:1)
text2png
目前无法做到这一点。
这取决于node-canvas
,而后者又取决于cairo。写这篇文章(1.14.12)时,开罗的稳定版本似乎不支持表情符号。
然而,cairo(1.15.8)的开发版支持表情符号。
功能和增强功能
- 支持彩色表情符号字形,以OpenType字体存储为PNG图像。
因此,构建并尝试强制node-canvas
使用此更高版本的cairo可能会有效。
目前,我发现了这个包wkhtmltox
。它将HTML转换为图像(或PDF,但我不会使用它)。
确保您也安装了命令行工具wkhtmltoimage
。 node.js包wkhtmltox
依赖于它来生成图像。 (我们不关心wkhtmltopdf
)。
将所有文字弹出到一些外部HTML文档./content.html
:
<!doctype html>
<html>
<head><meta charset="utf-8"></head>
<body>
Here's some 中文 letters!
</body>
</html>
然后渲染:
const fs = require('fs');
const wkhtmltox = require('wkhtmltox');
const converter = new wkhtmltox();
converter.image(fs.createReadStream('content.html'), { format: "png" })
.pipe(fs.createWriteStream('image.png'));
我们在这里管道PNG缓冲区,你也可以管道到HTTP响应对象(以及任何可写的流)。
只要您安装了字体, wkhtmltox
就会像浏览器一样呈现所有内容(甚至支持样式等)。
因此请确保您安装了带有中文字形的字体。
我自己没有用表情符号进行过测试,但我认为只要你有正确的字体它就能正常工作。