表情符号到PNG或JPG在Node.js – 如何?

对于我正在进行的项目,我需要从表情符号(最好是苹果表情符号)生成一个图像文件。 我认为这应该是一个相当简单的事情,但是我使用的每一个工具,我最终碰壁。

我也考虑过使用表情符号集,就像我可以在需要时查询的那样。 不幸的是,我已经链接到的没有Unicode 9.0表情符号,如鳄梨(🥑)虾(🦐)或harambe(🦍)。 你知道这样一个最新的设置?

代码方面,我试过opentype.js,但它不支持.ttc字体,这是我的mac(Apple Color Emoji.ttc)上的emoji字体的扩展名。 我已经将字体转换为.ttf但是也没有工作:

var opentype = require('opentype.js'); opentype.load('./build_scripts/apple_color_emoji.ttf', function (err, font) { if (err) { alert('Could not load font: ' + err); } else { console.log("loaded the font",font); var Canvas = require('canvas') , Image = Canvas.Image , canvas = new Canvas(200, 200) , ctx = canvas.getContext('2d'); var path = font.getPath('🐐🦃', 0, 150, 72); path.draw(ctx); console.log('<img src="' + canvas.toDataURL() + '" />'); } }); 

结果如下所示:

结果如下所示:

我试过fontkit,它应该能够读取.ttc文件,但是如果我尝试使用Apple Color Emoji字体,则会引发错误。

  var fontkit = require('fontkit'); var font = fontkit.openSync('./build_scripts/Apple Color Emoji.ttc'); // TypeError: font.layout is not a function 

如果我尝试与我的转换.ttf文件相同,我最终得到一些不正确的SVG:

  var fontkit = require('fontkit'); var font = fontkit.openSync('./build_scripts/apple_color_emoji.ttf'); var run = font.layout('🐐🦃'); var svg = run.glyphs[0].path.toSVG(); console.log(svg); // M-1 0ZM799 800Z 

我的问题是,我是否正确地接近这个方向呢? 将我已经在我的机器上已经有的表情符号转换为.png或其他格式似乎是应该相当简单,但我不能得到它的工作。

编辑:

我已经在这个回购库中find了hex代码的名单(对罗德里戈波利大声喊 )。 现在我可以简单地使用这个:

 var emoji = "😊".codePointAt(0).toString(16); //1f60a var emojiFile = fs.readFileSync('./my-emoji-folder/' + emoji + '.png'); 

不过,如果有人有这个问题的编码解决scheme,这将是很好的!

进一步编辑:

发现我find的第一个解决scheme只包括了符合Unicode 8.0的表情符号,而不是Unicode 9.0。 我find了一个表情符号抽取的rubygemji 。 如果你不是Ruby开发者(我不是),你可以简单地在你的shell中使用下面的命令:

 git clone https://github.com/github/gemoji.git cd gemoji bundle install bundle exec gemoji extract some-directory/emoji 

你现在在你的some-directory / emoji文件夹中有Unicode 9.0表情符!

我能够通过从字体集合中select一种字体来使用fontkit。 我还没有find一个案例,使用“Apple Color Emoji.ttc”中包含的任何一个TTF给出不同的结果。

 const fs = require('fs'); const fontkit = require('fontkit'); const emoji = require('node-emoji'); const font = fontkit.openSync('./Apple Color Emoji.ttc').fonts[0]; let emo = emoji.get('100'); let run = font.layout(emo); let glyph = run.glyphs[0].getImageForSize(128) fs.writeFileSync('100.png', glyph.data); 
    Interesting Posts