Я использую node js и canvas для создания API, который пишет текст на определенном изображении. Я успешно создал маршрут, такой как -> /: sometext /: fontsize /: color /: position-x /: position-y, и отправляет изображение stati c с текстом указанного размера шрифта, цвета и положения на холсте.
Чего я не могу добиться, так это того, что я хочу отправить семейство шрифтов в маршрут и отобразить его на экране. Кроме того, нет ли другого способа, с помощью которого я могу загрузить хотя бы шрифты Google без необходимости загрузки файла .ttf.
Что я пробовал:
- GetGoogleFonts npm пакет (что было плохой идеей, поскольку он застрял при установке)
- WebFontLoader (выдает ошибку «Окно не определено»)
Шаги для воспроизведения
В настоящее время я использую файл ttf для загрузки шрифта
router.get('/thumbnail/:name/:fontsize/:color/:posx/:posy', function (req, res, next) {
let name = req.params.name;
let fontsize = req.params.fontsize
let positionx = req.params.posx
let positiony = req.params.posy
let color = req.params.color
let myimage = 'static/image1.jpg'
const canvas = createCanvas(2000, 1000)
const ctx = canvas.getContext('2d')
var str = "hi "+name
registerFont('AvenirNext.ttf', { family: 'Avenir Next' })
loadImage(myimage).then((image) => {
ctx.drawImage(image, 0 , 0, 2000, 1000);
ctx.font = fontsize + "px Avenir Next"
ctx.fillStyle = color
ctx.fillText(str, positionx, positiony);
const out = fs.createWriteStream(__dirname + '/test.jpeg')
const stream = canvas.createJPEGStream()
stream.pipe(res)
out.on('finish', () => console.log('The JPEG file was created.'))
})
});