devicePixelRatio 那些事儿

设备像素比

window.devicePixelRatio 是设备上物理像素和设备独立像素的比例,即公式表示为:window.devicePixelRatio = 物理像素 / dips。

物理像素(physical pixel):设备能控制显示的最小单位
设备独立像素(device-independent pixel):独立于设备的用于逻辑上衡量像素的单位
每英寸像素量(pixels per inch):一英寸长度上可以并排的像素数量

正常人眼可以识别的分辨率为 300PPI,而现在很多设备的分辨率都超过 300PPI,如果设备总是以满分辨率来显示东西就可能造成文字太小无法看清,因此像浏览器这样的软件就会对内容做一次放大后再进行渲染(也就是降低分辨率):要降低分辨率就需要让像素这个单位变大,因此 PPI 的计算不再使用物理像素,而改用设备独立像素,那么设备独立像素和物理像素之间就存在一个比例差异,这就是 设备像素比

单位 dppx(dots per pixel)表示每个 dip 占用几个物理像素,或者说 css 中的单位 px 在屏幕上占用多少物理像素,在 PC 浏览器上这个值通常为1(浏览器提供的缩放功能实际上就是修改设备像素比来实现的)。

我们可以使用以下代码获取 devicePixelRatio 值:

function getPixelRatio(context) {
const backingStore = context.backingStorePixelRatio ||
context.webkitBackingStorePixelRatio ||
context.mozBackingStorePixelRatio ||
context.msBackingStorePixelRatio ||
context.oBackingStorePixelRatio ||
context.backingStorePixelRatio || 1;
return (window.devicePixelRatio || 1) / backingStore;
}

High DPI Canvas

Canvas 在高清屏下绘制图片模糊的解决方案

问题分析

可知 Canvas 不是矢量图而像图片一样是位图模式的,如果不做高清屏适配的话浏览器就会以多个像素点的宽度来渲染一个像素,相当于图片被放大多倍而因此变模糊。

解决方案

即将 canvas 的高和宽分别乘以 ratio 将其放大,然后再用 css 将其样式高和宽限制成初始的大小。

本文转载于:猿2048⇛https://www.mk2048.com/blog/blog.php?id=hjhjia0jkaa

最新文章

  1. PHP面向对象的魔术方法.png(不间断更新)
  2. [机器学习]信息&熵&信息增益
  3. [Solution] DI原理解析及Castle、Unity框架使用
  4. js中的with语句
  5. 转: CSS中float和clear的理解
  6. WPF 多线程处理(6)
  7. 项目经历——EasyUI的检索和更新操作
  8. phpcms v9自定义表单提交后返回上一页实现方法
  9. (转)SQL中的ISNULL函数介绍
  10. Mvc4.0添加商品到Cookie
  11. HNCU1741:算法3-2:行编辑程序
  12. 📟 Character Liquid Crystal Display Control (English)
  13. 典型分布式系统分析之MapReduce
  14. 【NOIP2013货车运输】
  15. Visual Studio Code Tips
  16. MySQL从查找数据库表到删除全过程
  17. K3 WISE安全认证方式
  18. andriod InputType.TYPE_NUMBER_FLAG_DECIMAL只能输入数字和小数点无效问题
  19. php -- 获取函数参数
  20. 20135220谈愈敏Blog5_系统调用(下)

热门文章

  1. ibv_close_device()函数
  2. 【二】遗传算法(GA)的MATLAB实现
  3. myBatis plus 去除生成 controller
  4. largebin attack
  5. Go值类型和引用类型+作用域+空白标识符+常量
  6. Seata XA 模式示例分析
  7. 用 EXISTS 或 NOT EXISTS 用法
  8. Golang 语言特性
  9. Django基础必会
  10. Java中获取applicationcontext(应用上下文)