canvas 1px 畫素模糊現象解決方案
當繪製寬度1px的線條時,可能真正繪製出來的線條並不是1px。
不但在視覺上模糊且寬度明顯大於1px,下面介紹一下出現此問題的原因。
先看一段程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="https://www.softwhy.com/" /> <title>螞蟻部落</title> <style> canvas { border: 2px dotted #ccc; } </style> <script> window.onload = ()=> { let canvas = document.getElementById('canvas'); let ctx = canvas.getContext('2d'); ctx.moveTo(50, 50); ctx.lineTo(50, 250); ctx.stroke(); } </script> </head> <body> <canvas id="canvas" width="550" height="450"></canvas> </body> </html>
預設,線條的寬度是1px,很明顯上面的寬度不是1px,並且還是模糊。
如果放大canvas畫布,可以認為畫布是由一個一個的畫素組成。
模擬如下圖:
如果從x軸座標1點繪製一個寬度為1px的線條,我們可能認為將繪製出如下圖案:
然而事實並非如此,canvas繪製的線條會從路徑的中央向兩端擴充套件。
圖示如下:
但計算機並不會僅繪製0-1和1-2的半個畫素,而將繪製0-1和1-2的整個畫素,那麼加起來就是2px。
那麼為何會模糊呢,這是因為0-0.5和1.5-2之間的內容會被更淺顏色的內容填充,所以看到模糊效果。
更多內容參閱canvas 繪製線條 lineWidth 寬度原理一章節。
既然明確導致這個現象的原因,解決方案也就很容得出。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="https://www.softwhy.com/" /> <title>螞蟻部落</title> <style> canvas { border: 2px dotted #ccc; } </style> <script> window.onload = ()=> { var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); ctx.moveTo(50.5, 50); ctx.lineTo(50.5, 250); ctx.stroke(); } </script> </head> <body> <canvas id="canvas" width="550" height="450"></canvas> </body> </html>
設定繪製路徑起點從一個畫素的中心開始,那麼當向兩端擴充套件的時候,恰好填滿一個畫素。
相關文章
- canvas 1px畫素模糊現象解決方案Canvas
- canvas畫素畫板Canvas
- 移動端1px解決方案
- 1px邊框解決方案總結
- 移動 web 1px 邊框解決方案Web
- 移動端高清屏 1px 解決方案
- Android 圖片高斯模糊解決方案Android
- 移動端1px誤差的原因以及解決方案
- canvas畫素點操作 —— 視訊綠幕摳圖Canvas
- 瞭解canvas畫布Canvas
- 7 種方案解決移動端1px邊框的問題
- canvas畫素點獲取 —— 拾色器、放大器Canvas
- 解決移動端1px Border
- emiya-canvas.js 解決ios下拍照傾斜與canvas高清屏下繪圖模糊問題CanvasJSiOS繪圖
- SVG繪製1px直線模糊問題SVG
- 圖片下方三畫素原因及解決辦法
- 解決canvas合成圖片大小錯誤、模糊以及跨域的問題Canvas跨域
- win10玩超獵都市畫面模糊如何解決_win10玩超獵都市畫面超模糊解決步驟Win10
- 使用canvas打造一款畫素風頭像生成工具Canvas
- 移動端canvas不支援rem的解決方案CanvasREM
- a-textarea(textarea)出現模糊問題的可能解決方案
- 實現SLIC演算法生成畫素畫演算法
- windows10顯示模糊怎麼辦_徹底解決win10畫質模糊的方法WindowsWin10
- canvas之實現控制動畫Canvas動畫
- Jmeter json格式 unicode亂碼現象解決方法JMeterJSONUnicode
- 數字孿生行業基於畫素流的輕量化解決方案行業
- 你真的瞭解css畫素嘛?CSS
- 掌握web開發基礎系列--物理畫素、邏輯畫素、css畫素WebCSS
- 使用canvas實現簡單動畫Canvas動畫
- PbootCMS上傳縮圖擷取尺寸縮小變模糊解決方案boot
- PbootCMS 上傳縮圖擷取尺寸縮小變模糊解決方案boot
- 修改畫素
- 什麼是物理畫素和邏輯畫素?
- Html2canvas——圖片空白的幾種排查解決方案HTMLCanvas
- 【風農翻譯】畫素寶典 #8 動態模糊、擠壓和拉伸、子彈
- 用 CSS 做畫素畫CSS
- 畫素畫——明暗基礎
- canvas 圖片、文字模糊問題Canvas