是否有人能够在Google函数中使用ImageMagick为图像添加文本?我试着使用注解,标签,绘画,但没有任何运气。我是做谷歌云功能的网页平台上的一切,所以不需要移动集成或任何东西。
发布于 2019-02-24 03:13:01
TL;DR:将一个TTF文件放在您的函数正在执行的同一个目录中(我的是/user_code),并在运行图形magick时直接引用该字体。
好吧,所以我似乎找到了一些解决办法。我的情况和你的情况不完全一样,但我看到的行为和你完全一样。我使用的不是生成过程,而是使用NPM GraphicsMagick包装器库GM (https://www.npmjs.com/package/gm)。这应该是非常相似的。我也是通过firebase函数来执行我的函数的,它只是运行Google函数,但是我无法访问配置,所以我无法验证它是否只是使用默认设置。我假设这将使用默认的Google函数映像。无论如何,这个映像上显然安装了一些ImageMagick的子集,并且正常的文本函数成功了,但是不要以任何方式修改图像输出。
最终的解决方案是上传一个字体文件和我的代码一起使用。您期望可用的系统字体(如arial )不起作用。我成功地使用了https://www.theleagueofmoveabletype.com/league-mono,并使用以下代码成功地绘制了Google函数的文本:
var gm = require('gm').subClass({ imageMagick: true });
require('gm-base64');
/* ...handler code... */
gm(525, 110, '#ffffffdd')
.fill('#000000dd')
.drawCircle(100, 100, 120, 5)
.font('font.ttf', 20)
.fill('#00ff00dd')
.drawText(100, 100, 'graphics')
.toBase64('png', function(err, base64) {
if (err != null) {
throw err;
}
console.info(`got base64 encoding: ${base64}`);
var img = new Buffer(base64, 'base64');
res.writeHead(200, {
'Content-Type': 'image/png',
'Content-Length': img.length,
});
res.end(img);
});这产生了以下产出:

我不知道这起作用的确切原因;我怀疑图像中没有安装字体。我在每件事上都添加了alpha,因为我不确定事情没有被写在一起。
https://stackoverflow.com/questions/50360785
复制相似问题