2016-10-23 14 views
0

でGoogleフォントを使用することができません:これは私のコードであるキャンバス

img.onload = function() { 

    ctx.drawImage(img, 0, 0, 600, 480); 

    ctx.lineWidth = 4; 
    ctx.font = "3em 'Lato'"; 
    ctx.strokeStyle = 'black'; 
    ctx.fillStyle = 'white'; 

    var text = 'Custom Text'; 
    text = text.toUpperCase(); 
    x = canvas.width/2; 
    y = canvas.height - canvas.height/4.5; 
    ctx.strokeText(text, x, y); 
    ctx.fillText(text, x, y); 
} 

キャンバス上のフォントがラトではありません。他の回答を読んだ後、私は他のHTML要素でそれを使用していないためかもしれないと思ったが、Latoフォントを使用する見出しも追加した。この問題を引き起こす原因は他にありますか?

+0

不正なフォント記述の問題に加えて、フォントが読み込まれるまで待つ必要があります。うーん、ブラウザには 'font.onload'コールバックは含まれていませんが、Googleはフォントが完全に読み込まれたときにコールバックを行うこの[回避策](https://developers.google.com/fonts/docs/webfont_loader)を持っていますキャンバスに描画する準備ができています。 ;-) – markE

+0

@markE DOM要素のフォントを使用するとフォントが読み込まれ、要素が正しくフォントを使用するため、正しく読み込まれていると思っていました。 :) –

+1

画像のように、フォントは非同期で読み込むことができます。ブラウザは、フォントがロードされたことを認識すると、ページを目的のフォントで再レンダリングします。しかしその時までに、キャンバスはすでに代替フォントでレンダリングされています。ブラウザはキャンバスコンテンツで再レンダリングしません。フォントが完全に利用可能になったときにキャンバスのコンテンツをレンダリング(または再レンダリング)する必要があります。 – markE

答えて

0

この

ctx.font = "3em Lato"; 
+0

それはまったく答えですか?同じ行が質問そのものに存在します...これがどのように質問に答えるのに役立つのでしょうか? – Farside

+0

質問は '' ctx.font = "3em 'Lato'"; '' ...私は問題が引用であると思っています。 –

1

を試してみて、私はあなただけで不正な形式のfont文字列を持っているかもしれないと思います。フォントファミリの引用符を削除してみてください。

ctx.font = "3em Lato"; 
+0

これは私が最初に使ったものですが、まだロードするフォントを取得できませんでした。 –

関連する問題