Я создаю игру в слова с React, и мне нужно нарисовать игру на элементе canvas, а затем использовать его в качестве изображения. В основном это работает, за исключением добавления шрифта к изображению.
Точнее говоря, моя игра построена на React on. js, и она работает локально, используя только системные шрифты. Но мне также нужно, чтобы он работал с рендерингом на стороне сервера, а на сервере системные шрифты не установлены. Это означает, что это dr aws изображение и текст с небольшими квадратами, где текст должен быть.
Моя проблема связана с registerFont в пакете canvas. Соответствующая часть моего кода:
import { registerFont, createCanvas } from 'canvas';
//import RobotoR from '../../public/Roboto/Roboto-Regular.ttf';
export const drawCanvas = ({ sentence, cards, workingCards, width, height }) => {
// default canvas size
let cw = 1200 // canvas width
let ch = 630 // canvas height; this is a minimun, it might change
~~~
registerFont('../../public/Roboto/Roboto-Regular.ttf', { family: 'Roboto' })
const canvas = createCanvas(cw, ch)
const ctx = canvas.getContext('2d')
Вызов createCanvas работает, а вызов registerFont - нет. Я посмотрел в node_modules / canvas и registerFont экспортируется немного по-другому, но, похоже, работает буквально для всех остальных.
node_modules / canvas / index. js:
function createCanvas (width, height, type) {
return new Canvas(width, height, type)
}
~
/**
* Resolve paths for registerFont. Must be called *before* creating a Canvas
* instance.
* @param src {string} Path to font file.
* @param fontFace {{family: string, weight?: string, style?: string}} Object
* specifying font information. `weight` and `style` default to `"normal"`.
*/
function registerFont (src, fontFace) {
// TODO this doesn't need to be on Canvas; it should just be a static method
// of `bindings`.
return Canvas._registerFont(fs.realpathSync(src), fontFace)
}
~
module.exports = {
Canvas,
...
registerFont,
...
createCanvas,
...
Возможно, я совершаю небольшую глупую ошибку, но не могу ее найти. Помощь