1. ホーム
  2. javascript

[解決済み] エラーを修正する方法。Fontconfig エラー。デフォルトの設定ファイルを読み込むことができません

2022-02-17 10:14:54

質問

client.on('guildMemberAdd', async (member) => {
 const channel = member.guild.channels.cache.find(
  (channel) => channel.name === 'general'
 );

 if (!channel) return;

 const canvas = Canvas.createCanvas(700, 250);

 const ctx = canvas.getContext('2d');

 const background = await Canvas.loadImage('./wallpaper.jpg');
 ctx.drawImage(background, 0, 0, canvas.width, canvas.height);

 ctx.strokeStyle = '#ffffff';
 ctx.strokeRect(0, 0, canvas.width, canvas.height);

 // Select the font size and type from one of the natively available fonts
 ctx.font = '60px ArialCE.ttf';
 // Select the style that will be used to fill the text in
 ctx.fillStyle = '#ffffff';
 // Actually fill the text with a solid color
 ctx.fillText(member.displayName, canvas.width / 2.5, canvas.height / 1.8);

 ctx.beginPath();
 // Start the arc to form a circle
 ctx.arc(125, 125, 100, 0, Math.PI * 2, true);
 // Put the pen down
 ctx.closePath();
 // Clip off the region you drew on
 ctx.clip();

 const avatar = await Canvas.loadImage(
  member.user.displayAvatarURL({ format: 'jpg' })
 );
 // Move the image downwards vertically and constrain its height to 200, so it's a square
 ctx.drawImage(avatar, 25, 25, 200, 200);

 const attachment = new Discord.MessageAttachment(
  canvas.toBuffer(),
  'welcome-image.png'
 );

 channel.send(`Welcome ${member.toString()} to the server!`, attachment);
});

discord.jsを使用してdiscord botを作っています。キャンバスのウェルカムメッセージを作りたかったのですが、作ってみると、キャンバス上の文字以外はすべて動作していました。それはすべてこのようなものでした。

で、googleでいろいろ検索してみたのですが、解決策が見つかりませんでした。 エラーは(Fontconfig error: Cannot load default config file)です。 私のシステムにはフォントがないということなのでしょうが、どのようにフォントを追加すればいいのでしょうか。私はrepl.itを使用しています。

解決方法は?

node-canvas 2.0+で動作するはずです。 Canvas.registerFont メソッドを使用します。 https://github.com/Automattic/node-canvas/#registerfont

システムフォントとしてインストールされていないフォントファイルを使用する場合は registerFont() を使用して、フォントをCanvasに登録します。これは、Canvasを作成する前に行っておく必要があります。

const { registerFont, createCanvas } = require('canvas')
registerFont('./fontFolder/comicsans.ttf', { family: 'Comic Sans' })

const canvas = createCanvas(500, 500)
const ctx = canvas.getContext('2d')

ctx.font = '12px "Comic Sans"'
ctx.fillText('Everyone hates this font :(', 250, 10)

TTFファイルは異なるフォント名を持つので、唯一の 'Roboto' でないと、うまくいきません。

registerFont('./fonts/Roboto-Medium.ttf', {family: 'Roboto'})

fontNameを 'Medium 28px Roboto' .うまくいきません。

ctx.font = '12px Roboto Medium';