サブピクセル化の問題により、テキストのレンダリングは現在、さまざまなブラウザーで少しまあまあ (IMO) であるため、テキストに組み込みのストローク効果を使用して正確な結果を達成することはできません (Chrome と FF を参照)。 )。
ただし、この方法でストロークをシミュレートできます (FF21 でレンダリング)。
//Force anti-alias
ctx.translate(0.5, 0.5);
//...
//Create stroke effect:
ctx.fillStyle = "black";
ctx.fillText( "HappyEnd", x-1, y );
ctx.fillText( "HappyEnd", x, y-1 );
ctx.fillText( "HappyEnd", x+1, y );
ctx.fillText( "HappyEnd", x, y+1 );
//draw normal text
ctx.fillStyle = "white";
ctx.fillText( "HappyEnd", x, y );
完全な変更については、ここをクリックしてください。
もちろん、いつでも「アウトライン」を関数に組み込むことができます。
function outlineText(ctx, color, txt, x, y) {
ctx.fillStyle = color;
ctx.fillText( txt, x-1, y );
ctx.fillText( txt, x, y-1 );
ctx.fillText( txt, x+1, y );
ctx.fillText( txt, x, y+1 );
}
または、代わりにキャンバス コンテキストを拡張します。
if (CanvasRenderingContext2D != 'undefined') {
CanvasRenderingContext2D.prototype.outlineText =
function outlineText(txt, x, y) {
this.fillText( txt, x-1, y );
this.fillText( txt, x, y-1 );
this.fillText( txt, x+1, y );
this.fillText( txt, x, y+1 );
}
}
使用法:
ctx.outlineText("HappyEnd", x, y);
ここであなたの例に組み込まれた使用例を実際に見てください。