解决canvas绘图模糊问题

canvas 绘制的是物理像素就是屏幕的分辨率

物理像素(DP)

设备独立像素(DIP)

设备像素比(DPR)

DPR = DP / DIP

html 复制代码
<canvas width="600" height="300" style="width: 300px; height: 150px"></canvas>

style中的width和height是canvas元素在界面上占据的宽高 即 设备独立像素(DIP)

attribute 中的 width 和 height 则代表 Canvas 实际像素的宽高(物理像素(DP))

DPR 越大越模糊

解决绘制模糊

原理: 让 Canvas 像素和屏幕物理像素一一对应

js 复制代码
const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');
const dpr = window.devicePixelRatio; // 假设 dpr 为 2
// 获取 css 的宽高
const {width: cssWidth, height: cssHeight} = canvas.getBoundingClientRect();
// 根据 dpr,扩大 canvas 画布的像素,使 1 个 canvas 像素和 1 个物理像素相等
canvas.width = dpr * cssWidth;
canvas.height = dpr * cssHeight;
// 由于画布扩大,canvas 的坐标系也跟着扩大,如果按照原先的坐标系绘图内容会缩小,所以需要将绘制比例放大
ctx.scale(dpr,dpr);
相关推荐
chilavert3182 小时前
技术演进中的开发沉思-191 JavaScript: 发展历程(上篇)
开发语言·javascript·ecmascript
dy17173 小时前
el-table表头上下显示内容
javascript·vue.js·elementui
亮子AI3 小时前
给你的应用加上Google账号登录
javascript
努力往上爬de蜗牛4 小时前
react native 实现选择图片或者拍照上传(多张)
javascript·react native·react.js
谢尔登4 小时前
【React】React组件的渲染过程分为哪几个阶段?
前端·javascript·react.js
无敌最俊朗@4 小时前
Vue 3 概况
前端·javascript·vue.js
拉不动的猪5 小时前
一文搞懂:localhost和局域网 IP 的核心区别与使用场景
前端·javascript·面试
未来之窗软件服务6 小时前
自建开发工具IDE(二)文件托拽读取——东方仙盟炼气期
开发语言·前端·javascript·仙盟创梦ide·东方仙盟
GISer_Jing6 小时前
OpenCV头文件路径配置终极修复指南
javascript·opencv·webpack
s9123601017 小时前
【Rust】使用lldb 调试core dump
前端·javascript·rust