canvas 绘制模糊问题解决

60 阅读1分钟

计算公式: 原始尺寸 = 样式尺寸 * 缩放倍率

  比如 缩放倍率 是固定的 3 则计算公式如下
  保留原始尺寸不变,样式尺寸降低3倍
  保留样式尺寸不变,原始尺寸提升3

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport"
       content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title>Document</title>
 <style>
  #canvas {
   width: 200px;
   height: 200px;
   background: #000;
  }
 
 </style>
</head>
<body>
<canvas id="canvas"></canvas>
<script>
 <!-- 原始尺寸 = 样式尺寸 * 缩放倍率-->
 /* 比如 缩放倍率 是固定的 3
 * 保留原始尺寸不变,样式尺寸降低3倍
 * 保留样式尺寸不变,原始尺寸提升3倍
 *  */
 let cvs = document.getElementById('canvas')
 let ctx = cvs.getContext('2d');
 
 function init() {
  // 原始尺寸 我这里改变是原图尺寸,还可以修改样式尺寸
  cvs.width = 200 * devicePixelRatio;
  cvs.height = 200 * devicePixelRatio;
 }
 init();
 ctx.beginPath();
 // arc参数(x, y, radius, startAngle, endAngle, anticlockwise);
 //  x 圆弧中心(圆心)的 x 轴坐标。
 //  y 圆弧中心(圆心)的 y 轴坐标。
 //  radius 圆弧的半径。
 //  startAngle 圆弧的起始点,x 轴方向开始计算,单位以弧度表示。
 //  endAngle 圆弧的终点,单位以弧度表示。
 //  anticlockwise 可选的Boolean值,如果为 true,逆时针绘制圆弧,反之,顺时针绘制。

 ctx.arc(cvs.width / 2, cvs.height / 2, 80 * devicePixelRatio, 0, 2 * Math.PI);
 ctx.strokeStyle = '#fff';
 ctx.lineWidth = 10 * devicePixelRatio;
 ctx.stroke();
</script>
</body>
</html>