さまざまなブラウザーが HTML5 Canvas でフォント サイズをレンダリングする方法に問題があります。特に、フォント サイズが整数でない場合。たとえば、「8.5px Arial」、「2.23em Arial」などです。
canvas.font= FontSize + "px Arial"; の場合 ここで、FontSize は (8.1、8.2、8.3、...) です。線形の結果が期待されますが、これを一貫してアーカイブする唯一のブラウザーは IE です! ( 知っている )。Firefox は 11.2 ピクセル未満で四捨五入しますが、それ以上は線形です。Chrome と Safari は、フォントを整数値にのみスケーリングします。
丸めルールはピクセルに設定されているようで、.5 未満の最も近い整数に丸められます
私のキャンバスアプリは、いくつかのプログラムによるアニメーション化された変換(スケールと変換)を実行しています効率のためにキャンバス変換を回避しようとしていますが、それで問題が解決すると思われますが、CSS3だけでhtmlテキストサイズを設定してこれをテストしていません( Canvas.font は仕様に基づいていると想定されます)
ブラウザーは、pt、px、em、% のフォント サイズ間で少なくとも一貫した動作をします。[編集: Safari が % サイズをレンダリングしないことを除いて]
[余談: すべてのフォントは、少し大きくすると少し太字に見えます。Safari は、17.4px から 17.5px になるとそのケーキを受け取ります.. BAMB!]
以下にいくつかのサンプル画像を添付しましたが、すべてのブラウザーを IE のようにする方法についていくつかのアイデアが本当に欲しいです (これもまた、私がそう言うとは思いませんでした) - これはフォントをレンダリングするためのバグですか、それとも標準ですか?
これは、PX フォント サイズの場合に複製できるテスト コードです。
<!DOCTYPE html><html><head><script>
function display() {
var canvas = document.getElementById('test');
// For EM and % cases....
//canvas.style.font="5px Arial";
canvas.height = 1000;
var context = canvas.getContext('2d');
var minSize = 10;
var lineHeight = 100;
for(var a=minSize; a< 20; a+=0.1)
{
var font_size = Math.round(a*10000)/10000;
context.font = a + "px Arial";
context.fillText("A: EXAMPLE TEXT > " + font_size, 20, (font_size-minSize)*lineHeight);
}
}
</script></head><body onload="display()"><canvas id="test"></canvas></body></html>
ピクセル スケール ポイント スケール em スケール - 1em = 5px Arial パーセント スケール - 100% = 5px Arial