国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > HTML > 正文

html5 canvas中繪制字體與圖片以及圖形模糊問題解決

2020-03-24 15:44:46
字體:
來源:轉載
供稿:網友
html5 canvas 繪制字體、圖片與圖形模糊問題

發生情況

多出現在高dpi設備,這意味著每平方英寸有更多的像素,如手機,平板電腦。當然很多高端臺式電腦也有高分辨率高dpi的顯示器

canvas在瀏覽器中的縮放原理

如果沒有設置style那么就以html的屬性width,height作為尺寸。

如果設置了style中的width、height,那么以其style設置為最終繪制到瀏覽器的尺寸。

也就是說,屬性中的寬高并不代表實際寬高,所以高dpi下會放大canvas,導致模糊。

canvas的width、height屬性是canvas的后緩沖尺寸,繪制到瀏覽器后會根據當前dpi進行縮放。

devicePixelRatio(window成員)保存了在高dpi狀態下屬性width/height被放大的比例。

錯誤的解決案例

網上搜索canvas 模糊,會有兩種解決方法,可能現在都不適合了。

一個是CanvasRenderingContext2D.translate(0.5,0.5);

這個其實是在3D繪圖領域常用的,用于處理像素偏移,canvas的2d context已經處理了這方面的問題。

另一個是backingStorePixelRatio,你會看到類似下面這樣的代碼,這個backingStorePixelRatio已經在新瀏覽器中被去掉了,我試過chrome與edge都已經不存在了。


var ctx = document.createElement( canvas ).getContext( 2d ), dpr = window.devicePixelRatio || 1, bsr = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1

我在研究時用了動態創建canvas的方法,樣式的width/height乘以縮放比devicePixelRatio得到canvas的屬性width/height。

這不是完美的解決方案,因為在瀏覽器的dpi發生變化時,比如用戶設置,或者從一個高dpi顯示器移動窗口到低dpi顯示器時發生。(我1080p普通23寸顯示器是1.25倍,平板電腦是2.0倍,之間拖放窗口就會發生)

解決方法
1、動態創建并監視window的onresize事件,根據devicePixelRatio重建canvas。
2、動態調整canvas樣式的寬高,同樣監視onresize事件。再配合CanvasRenderingContext2D.scale動態縮放繪制內容的比例。

瀏覽器都沒有devicePixelRatio改變的事件,或者dpi改變的事件,如果你知道,請留言。

以上就是html5 canvas中繪制字體與圖片以及圖形模糊問題解決的詳細內容,其它編程語言

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蓬溪县| 金乡县| 延寿县| 武宁县| 潼南县| 大悟县| 安塞县| 云南省| 宜阳县| 惠水县| 嘉鱼县| 德阳市| 景谷| 正宁县| 东海县| 武鸣县| 鱼台县| 迁西县| 双辽市| 萨嘎县| 察雅县| 苏尼特右旗| 外汇| 潜山县| 乐至县| 巫山县| 专栏| 开原市| 厦门市| 阜康市| 河北省| 东台市| 永嘉县| 榆林市| 台中县| 东乌珠穆沁旗| 方正县| 韶关市| 凤城市| 河曲县| 杭锦后旗|