TL; DR: поместите файл TTF в тот же каталог, в котором выполняется ваша функция (у меня было /user_code
), и обращайтесь непосредственно к этому шрифту при запуске графической магии.
Хорошо, поэтому я , похоже, нашел какое-то решение.Мои обстоятельства не совсем совпадают с вашими, но я видел то же поведение, что и вы.Вместо того, чтобы порождать процесс, я использую библиотеку-оболочку NPM GraphicsMagick, GM (https://www.npmjs.com/package/gm).. Это должно быть очень похоже. Я также выполняю свои функции через функции firebase, которые просто запускают Google Cloud Functions, но я делаюУ меня нет доступа к конфигурации, поэтому я не могу убедиться, что она просто использует значения по умолчанию. Я предполагаю, что она использует любой образ функции облачной функции по умолчанию. В любом случае на этом образе явно установлено некоторое подмножество 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);
});
Это привело к следующему выводу:
Я не знаю точную причину, по которой это работает, я подозреваю, что естьв образе не установлены шрифты.Я добавил альфу ко всему, потому что я не был уверен, что что-то не было написано друг над другом.