欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > 記一次高分屏下canvas模糊問題

記一次高分屏下canvas模糊問題

熱門標簽:如何查看地圖標注 地圖標注軟件打印出來 電話機器人技術 欣鼎電銷機器人 效果 高德地圖標注商戶怎么標 惡搞電話機器人 黃石ai電銷機器人呼叫中心 智能電銷機器人被禁用了么 ok電銷機器人

前言

最近在做項目的時候發現,在公司電腦上沒問題,在自己電腦上確有問題。做的是canvas的項目,在自己電腦上運行的時候,發現,會出現點擊選不中的問題還有,canvas刷新會有殘影問題。首先可以確定,這兩個問題都是canvas元素邊界有問題,但是從代碼上來看是沒問題的,因此我就猜測是否和屏幕有關,畢竟canvas某些問題確實和屏幕有關甚至和硬件顯卡有關。

devicePixelRatio屬性

果然找出一個屬性不同: devicePixelRatio;
然后仔細研究了下這個屬性的含義,mdn上解釋如下:

此屬性返回當前顯示設備的物理像素分辨率與CSS像素分辨率的比值。該值也可以被解釋為像素大小的比例:即一個CSS像素的大小相對于一個物理像素的大小的比值。

公司的臺式機的devicePixelRatio為1,而我自己的電腦為1.25;因為我的電腦是高清屏的,那么什么是高清屏呢?
高清顯示屏原理如下:

  1. 一種具備超高像素密度的液晶屏
  2. 同樣大小的屏幕上顯示的像素點由1個變為多個

那么我們就能知道,高清屏上一個像素點變成devicePixelRatio個像素點,因此canvas畫布也會收到影響,同樣的圖片,在高清屏上會變大,但是canvas實際尺寸沒有變大,因為圖片會縮放,導致模糊。

canvas寬高與css寬高

那么如何解決canvas高分屏問題呢?既然高分屏下canvas的像素點會變多,導致畫布縮放,那么我們能不能通過某種方法把canvas縮放回去呢?答案是可以的。
我們首先認識一下canvas的像素,我們先繪制一段文字

<canvas id="canvas1" width="300" height="150"></canvas>
....


ctx1.beginPath();
ctx1.font = '20px arial';
ctx1.fillText('Html5 canvas', 50, 50);

這樣我們就得到如下:

我們在創建一個畫布,這次我們通過css設置畫布的寬高:

<canvas id="canvas2" style="width: 200px; height: 200px"></canvas>
.....



ctx2.beginPath();
ctx2.font = '20px arial';
ctx2.fillText('Html5 canvas', 50, 50);

這次我們得到如下效果:

我們可以很明顯看到畫布上的文字有明顯的縮放,這是為什么呢?我們可以這么理解: canvas是繪制圖片的,我們使用canvas繪制完圖片后,首先生成一張根據canvas的寬高的圖片,然后通過dom樹由css渲染出來,因此canvas的寬高是圖片的實際寬高,css的寬高是實際渲染出來的尺寸。那么我們回過頭來理解devicePixelRatio,這個屬性返回的是設備的物理像素分辨率與CSS像素分辨率的比值,我們的canvas繪制出來后圖片因為高清屏設備的影響,導致圖片變大,然而我們在瀏覽器的渲染窗口并沒有變大,因此圖片會擠壓縮放使得canvas畫布會變得模糊,盡然高分屏的像素點變多了,導致圖片變大,那么我們可以通過設置canvas的寬高設置devicePixelRatio倍的畫布大小,然后設置canvas縮放比例為devicePixelRatio倍,保持和canvas等比例放大,然后這樣我們相當于在繪制圖片的時候就縮放圖片變大,然后通過css渲染又會縮放回去,這樣canvas的大小就不會失真了。代碼如下:

function makeHighRes(canvas) {
    var ctx = canvas.getContext('2d');
    // Get the device pixel ratio, falling back to 1.               
    var dpr = window.devicePixelRatio || window.webkitDevicePixelRatio || window.mozDevicePixelRatio || 1;

    // Get the size of the canvas in CSS pixels.
    var oldWidth = canvas.width;
    var oldHeight = canvas.height;
    // Give the canvas pixel dimensions of their CSS
    // size * the device pixel ratio.
    canvas.width = Math.round(oldWidth * dpr);
    canvas.height = Math.round(oldHeight * dpr);
    canvas.style.width = oldWidth + 'px';
    canvas.style.height = oldHeight + 'px';
    // Scale all drawing operations by the dpr, so you
    // don't have to worry about the difference.
    ctx.scale(dpr, dpr);
    return ctx;
}

另外:網上有一些解決辦法比較古老,使用了backingStoreRatio 這個屬性,這個屬性已經廢棄!
此外我們也可以使用這個庫 hidpi-canvas-polyfill,他也是使用的我們這個方法來改變canvas繪制視圖的,不過庫中還把所有canvas繪制api都縮放了相應的devicePixelRatio倍,考慮很完善。

參考鏈接
https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/HTML-canvas-guide/SettingUptheCanvas/SettingUptheCanvas.html
https://developer.mozilla.org/zh-CN/docs/Web/API/Window/devicePixelRatio
https://www.jianshu.com/p/2cd5143cf9aa

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

標簽:金昌 阿壩 赤峰 萍鄉 綏化 盤錦 中山 聊城

巨人網絡通訊聲明:本文標題《記一次高分屏下canvas模糊問題》,本文關鍵詞  記,一,次高,分屏,下,canvas,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《記一次高分屏下canvas模糊問題》相關的同類信息!
  • 本頁收集關于記一次高分屏下canvas模糊問題的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    www.黄色com| 最新国产成人在线观看| 亚洲bdsm女犯bdsm网站| 99久久亚洲一区二区三区青草| 日韩免费av一区| 国产欧美一区二区在线观看| 国内精品自线一区二区三区视频| 老司机福利av| 精品国产乱码久久久久久蜜臀| 日韩国产精品久久久| 中文字幕一区二区久久人妻网站| 91精品中文字幕一区二区三区| 午夜精品爽啪视频| 亚洲成av人片在线观看无| 777精品伊人久久久久大香线蕉| 五月激情综合色| 亚洲狠狠婷婷综合久久久久图片| 91精品蜜臀在线一区尤物| 日产欧产美韩系列久久99| asian性开放少妇pics| 精品国产成人在线影院 | 欧美成人a视频| 久久电影网电视剧免费观看| 色婷婷国产精品免| 日本一区二区三区在线不卡 | 久久久久久久久久97| 国产精品美女久久久久av爽李琼| 成人美女视频在线观看18| 色av一区二区| 亚洲午夜精品网| 成人网站免费观看| 久久久777精品电影网影网| 成人一区二区三区视频| 欧美在线影院一区二区| 亚洲成a人片综合在线| 在线免费观看日韩av| 国产女主播一区| 97久久精品人人做人人爽 | 欧美网站大全在线观看| 日韩精品乱码免费| 肉色超薄丝袜脚交69xx图片| 亚洲色图欧美激情| 97人妻精品一区二区三区免 | 国产91清纯白嫩初高中在线观看| 色综合天天性综合| 婷婷中文字幕一区三区| 天堂网av2018| 亚洲综合男人的天堂| 成人乱码一区二区三区av| 欧美国产国产综合| 亚洲精品成人无码毛片| 精品国产欧美一区二区| 99精品偷自拍| 日韩美女天天操| 成人av在线看| 欧美一二三在线| 成人午夜在线播放| 91精品国产欧美一区二区成人| 国产一区二区精品久久99| 欧洲精品中文字幕| 久久99国产精品免费网站| 91久久线看在观草草青青| 免费成人性网站| 色综合中文字幕国产| 五月综合激情婷婷六月色窝| 任我爽在线视频| 日日骚欧美日韩| 色哟哟一一国产精品| 亚洲v中文字幕| 日本黄色片免费观看| 性感美女极品91精品| 欧美激情精品久久久久久免费| 亚洲aaa精品| 色欲人妻综合网| 美女www一区二区| 欧美亚洲综合网| 国产麻豆精品在线观看| 91麻豆精品国产综合久久久久久| 大胆亚洲人体视频| 精品国产91乱码一区二区三区| 人妻体体内射精一区二区| 欧美高清在线精品一区| 动漫精品一区二区三区| 亚洲激情第一区| 天天操天天摸天天舔| 琪琪一区二区三区| 欧美日韩高清一区二区| 菠萝蜜视频在线观看一区| 久久综合久久综合亚洲| 老司机午夜免费福利| 1000部国产精品成人观看| 国产又粗又硬视频| 日韩不卡在线观看日韩不卡视频| 在线观看亚洲成人| 国产福利一区二区三区视频在线| 日韩区在线观看| 国产性生活毛片| 亚洲在线视频免费观看| 色综合天天综合网天天看片| 国产成人精品一区二| 精品国产青草久久久久福利| 久久久久国产精品区片区无码| 亚洲一级二级三级| 91传媒视频在线播放| 国产99久久久国产精品潘金| 久久久天堂av| 国产精品一二三区在线观看| 天堂影院一区二区| 欧美日韩久久一区| 久久无码人妻一区二区三区| 日本wwwwwww| 亚洲精品高清在线观看| 色综合中文字幕国产 | 少妇高潮一69aⅹ| 亚洲色图欧洲色图婷婷| 国产探花在线免费观看| 国产成人综合网站| 国产欧美精品一区二区三区四区 | 日本一区二区三区四区| 美女av免费看| 国产一区二区美女| 日本一区二区综合亚洲| 午夜成人亚洲理伦片在线观看| 国产乱人伦精品一区二区在线观看| 精品国产免费人成电影在线观看四季 | 激情久久五月天| 337p粉嫩大胆噜噜噜噜噜91av| 久久人人爽人人人人片| 日韩在线卡一卡二| 日韩无一区二区| 黄色a一级视频| 美女www一区二区| 久久新电视剧免费观看| 污污视频网站在线免费观看| 国产精品69毛片高清亚洲| 中文字幕 久热精品 视频在线 | 国精产品一区一区| 国产精华液一区二区三区| 欧美激情一区不卡| 懂色av懂色av粉嫩av| av电影天堂一区二区在线观看| 一区二区三区四区精品在线视频| 欧美日韩午夜在线| 国产精品无码专区| 久久不见久久见免费视频7| 久久嫩草精品久久久精品| 国精产品视频一二二区| 成人精品免费网站| 亚洲午夜私人影院| 欧美一区在线视频| xxxx日本黄色| 成人一区二区三区中文字幕| 一区二区三区四区激情 | 3d成人动漫网站| 中出视频在线观看| 极品少妇xxxx精品少妇偷拍| 中文字幕av一区二区三区免费看| 日本电影欧美片| 国产肉体xxxx裸体784大胆| 国内精品免费**视频| 国产精品传媒视频| 欧美日韩国产大片| av男人的天堂av| 成人精品一区二区三区四区| 亚洲国产日韩精品| 精品成人在线观看| 日本天堂中文字幕| 精品人妻伦一二三区久| 精品亚洲成av人在线观看| 中文字幕在线观看一区二区| 欧美日韩亚洲综合一区二区三区| 男生草女生视频| eeuss鲁片一区二区三区在线看| 亚洲成av人片| 欧美激情一区二区三区| 欧美人伦禁忌dvd放荡欲情| av男人的天堂av| 免费高清视频在线观看| 久久精品噜噜噜成人av农村| 中文字幕亚洲视频| 日韩写真欧美这视频| 午夜爱爱毛片xxxx视频免费看| 国产一精品一aⅴ一免费| 国模冰冰炮一区二区| 一区二区日韩电影| 国产欧美精品一区二区三区四区| 欧美日韩不卡一区二区| 国产午夜精品久久久久久久久| 日本黄色www| 国产在线精品国自产拍免费| 亚洲一区二区精品视频| 国产色综合一区| 欧美高清一级片在线| 国产精品99久久久久久成人| xxxx黄色片| 91在线你懂得| 国产一区二区视频在线| 午夜精品久久久| 国产精品不卡一区二区三区| 欧美成人a视频|