解決 canvas 在高清屏中繪製模糊的問題

輸入圖片說明

1 解決方案 瀏覽器的對象 window 只有一個 屬性是devicePixeRatio 的屬性 。該屬性表示了屏幕的設備像素比,即用幾個像素寬度渲染一個像素的問題 舉例子來講。 假設devicePixelRatio 的值爲2 一張100/100 大小的圖片 在Retina設備上 會用2個像素的空間。至關於圖片放大了一倍,圖片就會模糊 相似的,在 canvas context 中也存在一個 backingStorePixelRatio 的屬性,該屬性的值決定了瀏覽器在渲染canvas以前會用幾個像素來來存儲畫布信息。 backingStorePixelRatio 屬性在各瀏覽器廠商的獲取方式不同,因此須要加上瀏覽器前綴來實現兼容。 2 解決問題 【直接上代碼】web

<style>
      canvas {
        border: 1px solid red;
        width: 100%;
    }
  </style>
<body>
 <canvas id="canvas"  height="180"></canvas>
</body>
1> 模糊的狀況
  // 原始作法
   var canvas =  document.getElementById("canvas");
   var ctx = canvas.getContext('2d');
   ctx.font = '18px Geprgia';
   ctx.fillStyle  = '#999';
   ctx.fillText('我是模糊的文字',50,50); 

      2> 清晰的狀況
     // 獲取像素比
   var getPixelRatio = function (context) {
           var backingStore = context.backingStorePixelRatio ||
            context.webkitBackingStorePixelRatio ||
            context.mozBackingStorePixelRatio ||
            context.msBackingStorePixelRatio ||
            context.oBackingStorePixelRatio ||
            context.backingStorePixelRatio || 1;
        return (window.devicePixelRatio || 1) / backingStore;
    };
    //畫文字
    var myCanvas = document.getElementById("my_canvas");
    var context = myCanvas.getContext("2d");
    var ratio = getPixelRatio(context);
 
    myCanvas.style.width = myCanvas.width + 'px';
    myCanvas.style.height = myCanvas.height + 'px';
 
    myCanvas.width = myCanvas.width * ratio;
    myCanvas.height = myCanvas.height * ratio;
 
    // 放大倍數
    context.scale(ratio, ratio);
 
    context.font = "18px Georgia";
    context.fillStyle = "#999";
    context.fillText("我是清晰的文字", 50, 50);
相關文章
相關標籤/搜索