Canvasで線がぼやける時の対処法
例えば以下のように1pxの横線を描画すると、線が純粋な黒色でなく、若干ぼやけて太く見えることがある。
ctx.beginPath();
ctx.moveTo(10, 10);
ctx.lineTo(20, 10);
ctx.strokeStyle = "#000";
ctx.lineWidth = 1;
ctx.stroke();
ctx.closePath();
この現象は、以下の要素に起因して発生する。
- Canvasのpxが実際の画面ピクセルとは別次元で計算される
- CSS でキャンバスサイズを指定すると、実際のpxとCanvas上のpxにズレが生じることがある
- Canvas上の1pxが実画面の2pxに跨る場合、Canvasの描画計算上2px分に薄く引き伸ばされた感じに描画される
これを回避する簡単な方法は、Canvasの座標を小数点単位でずらすこと。
例えば、
ctx.moveTo(10.5, 10);
ctx.lineTo(20.5, 10);