2

ブラウザーのズームを 150% に設定してキャンバスに線を引くと、線がぼやけます。キャンバスの幅と高さを 2 倍にして、css で元の幅と高さに縮小すると、線がくっきりと表示されます。

上の三角形はぼやけていますが、下の三角形はくっきりしています: http://jsbin.com/acimiq/1

ブラウザのバグですか、OS のバグですか、それとも何か不足していますか?

関連している

Windows 7 の Chrome 27、FF 22、および IE 10 でテストしました。

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>canvas test</title>
<style id="jsbin-css">
#canvas1 {
    image-rendering: optimizeSpeed;             // Older versions of FF
    image-rendering: -moz-crisp-edges;          // FF 6.0+
    image-rendering: -webkit-optimize-contrast; // Webkit
                                                //  (Safari now, Chrome soon)
    image-rendering: -o-crisp-edges;            // OS X & Windows Opera (12.02+)
    image-rendering: optimize-contrast;         // Possible future browsers.
    -ms-interpolation-mode: nearest-neighbor;   // IE
}

#canvas2 {
  width: 300px;
  height: 150px;
}
</style>
</head>
<body>
  <canvas id="canvas1" width="300" height="150"></canvas>
  <br/>
  <canvas id="canvas2" width="600" height="300"></canvas>
<script>
    var canvas1 = document.getElementById('canvas1');
    var ctx1 = canvas1.getContext('2d');
    ctx1.imageSmoothingEnabled = false;
    ctx1.webkitImageSmoothingEnabled = false;
    ctx1.mozImageSmoothingEnabled = false;
    ctx1.beginPath();
    ctx1.moveTo(125,125);
    ctx1.lineTo(125,45);
    ctx1.lineTo(45,125);
    ctx1.closePath();
    ctx1.stroke();

    var canvas2 = document.getElementById('canvas2');
    var ctx2 = canvas2.getContext('2d');
    ctx2.scale(2, 2);
    ctx2.beginPath();
    ctx2.moveTo(125,125);
    ctx2.lineTo(125,45);
    ctx2.lineTo(45,125);
    ctx2.closePath();
    ctx2.stroke();
</script>
</body>
</html>
4

2 に答える 2

2

ぼやけた線やブラウザーのズームの問題を回避したい場合は、SVG (スケーラブル ベクター グラフィックス) を使用します。html5 で html ファイル内に記述できるようになりました。

詳細については、ウィキペディアのエントリまたはSVG に関するw3school のエントリを参照してください。

Canvas と SVG をいつ使用するかについては、このサイトをご覧ください。

于 2013-07-09T18:25:32.930 に答える