這篇文章給大家介紹使用canvas繪制模糊如何解決,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創新互聯服務項目包括福州網站建設、福州網站制作、福州網頁制作以及福州網絡營銷策劃等。多年來,我們專注于互聯網行業,利用自身積累的技術優勢、行業經驗、深度合作伙伴關系等,向廣大中小型企業、政府機構等提供互聯網行業的解決方案,福州網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到福州省份的部分城市,未來相信會繼續擴大服務區域并繼續獲得客戶的支持與信任!首先,需要理解canvas的展示機制。
<canvas id="map" width="375" height="667"></canvas>
我繪制了一張375px的canvas,iphone6的寬度也是375px,ok,canvas鋪滿了整個屏幕。
那么canvas的大小就是375px,canvas類似于圖片,一張375px的圖片,我們就把它當做是圖片來看就好了。我,尖沙咀段坤說的。
如果遇到了屏幕寬度400px的手機,那么圖片會 拉伸,canvas也會拉伸,拉伸則必然會模糊。
那么iphone6確實是375px寬度的手機,還是會出現模糊問題,為什么呢?手機端會存在高清屏的問題。也就是我們說的2倍屏或者3倍屏,也叫作屏幕的DPI。高清屏在繪制界面時,會把2px的寬度渲染成1px,也就達到了高清的效果。也就是說,我們在高清屏下看到的375px其實是750個像素點繪制出來的,canvas其實是375px被拉伸到了750px再展示出來的,拉伸則必然會模糊。
好了,模糊的原因知道了,其實就是高清屏所帶來的麻煩,怎么解決呢?
解決方法
如果是2倍屏,我們把設計圖上375px的canvas畫成750px不就解決了?
設置canvas樣式
這里我們不寫width和height,而直接寫style。把它看成是圖片,我們先不管圖片原寬高是多少,不管拉伸還是壓縮,直接讓他鋪滿整個屏幕。style里寫的寬高不是圖片的原寬高,也就是style里寫的寬高并不是canvas的真實寬高
<canvas id="map" style="width: 375px;height:330px;"></canvas>
設置canvas寬高
上面的style并不是canvas的真實寬高,那么我們如何設置它的寬高呢?
普通屏,2倍屏,3倍屏如果分別適配?
<canvas id="map" style="width: 375px;height:330px;"></canvas> <script> let canvas = document.querySelector('#map'); // 獲取到屏幕倒是是幾倍屏。 let getPixelRatio = function(context) { var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / backingStore; }; // iphone6下得到是2 const pixelRatio = getPixelRatio(canvas); // 設置canvas的真實寬高 canvas.width = pixelRatio * canvas.offsetWidth; // 想當于 2 * 375 = 750 canvas.height = pixelRatio * canvas.offsetHeight; </script>
那么canvas的寬高就變成了下圖這樣,750寬度的canvas,如果你是2倍屏我就剛好能夠適應!!!
設置后的寬高
開始畫點
比如,375的設計圖上,有一個半徑為2px的圓點,點的位置是x:100,y:100。
那么我們現在canvas的寬度是750,寬高變成了之前的2倍。為了視覺上位置保持不變,我們畫點的位置就應該是x:100*pixelRatio,y:100*pixelRatio。
完整代碼如下:
<canvas id="map" style="width: 375px;height:330px;"></canvas> <script> let canvas = document.querySelector('#map'); // 獲取到屏幕倒是是幾倍屏。 let getPixelRatio = function(context) { var backingStore = context.backingStorePixelRatio || context.webkitBackingStorePixelRatio || context.mozBackingStorePixelRatio || context.msBackingStorePixelRatio || context.oBackingStorePixelRatio || context.backingStorePixelRatio || 1; return (window.devicePixelRatio || 1) / backingStore; }; // iphone6下得到是2 const pixelRatio = getPixelRatio(canvas); // 設置canvas的真實寬高 canvas.width = pixelRatio * canvas.offsetWidth; // 想當于 2 * 375 = 750 canvas.height = pixelRatio * canvas.offsetHeight; // 開始畫點 let ctx = canvas.getContext("2d"); ctx.beginPath(); // 375設計圖上的位置和尺寸都應該*pixelRatio 因為我們現在的canvas是750 ctx.arc(100*pixelRatio, 100*pixelRatio, 2*pixelRatio, 0, 2 * Math.PI); ctx.fillStyle = "#fff"; ctx.fill(); ctx.closePath(); // ...你的其他代碼 </script>
關于使用canvas繪制模糊如何解決就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
網頁標題:使用canvas繪制模糊如何解決-創新互聯
網頁網址:http://m.newbst.com/article24/dcihje.html
成都網站建設公司_創新互聯,為您提供搜索引擎優化、網站設計、App設計、微信公眾號、響應式網站、網站營銷
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯