使用特殊的unicode渲染文本图像?

时间:2018-02-17 16:03:16

标签: javascript node.js image npm

我想生成并提供文字图片。

目前我正在尝试使用text2png

text2png('this string', {font: '14px Courier', bgColor: 'white'})

但是text2png似乎无法执行unicode /表情符号。

它变成enter image description here和中文字符,例如中文,enter image description here

有没有办法可以将包含这些字符的字符串渲染成图像?

text2png在其他方面表现得非常好。

1 个答案:

答案 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就会像浏览器一样呈现所有内容(甚至支持样式等)。

因此请确保您安装了带有中文字形的字体。

我自己没有用表情符号进行过测试,但我认为只要你有正确的字体它就能正常工作。