首页 > 其他分享 >canvas适配(图片、文字在移动端显示模糊问题)

canvas适配(图片、文字在移动端显示模糊问题)

时间:2022-12-07 10:33:42浏览次数:51  
标签:canvas dpr 适配 模糊 style height width 像素

canvas图片、文字在移动端显示模糊问题

因为 canvas 不是矢量图,而是像图片一样是位图模式的。高 dpi 显示设备意味着每平方英寸有更多的像素。也就是说二倍屏,浏览器就会以2个像素点的宽度来渲染一个像素,该 canvas 在 Retina 屏幕下相当于占据了2倍的空间,相当于图片被放大了一倍,因此绘制出来的图片文字等会变模糊。因此,要做 Retina 屏适配,关键是知道当前屏幕的设备像素比,然后将 canvas 放大到该设备像素比来绘制,然后将 canvas 压缩到一倍来展示。

 

const canvas = document.getElementById('canvasBox')
const dpr = window.devicePixelRatio; // 假设dpr为2
const ctx = canvas.getContext('2d')

// 获取css的宽高
const { width: cssWidth, height: cssHeight } = canvas.getBoundingClientRect();
// 根据dpr,扩大canvas画布的像素,使1个canvas像素和1个物理像素相等
canvas.style.width = `${cssWidth}px`;
canvas.style.height = `${cssHeight}px`;

注意: canvas.style.width 和 canvas.style.height  有些博主是直接取canvas.width 和canvas.height, 但是这样会出现高度宽度比例失衡问题;不知道是不是还有其他配置,暂且不谈,会的小伙伴可以分享一下 

canvas.width = Math.round(dpr * cssWidth);
canvas.height = Math.round(dpr * cssHeight);
// 由于画布扩大,canvas的坐标系也跟着扩大,如果按照原先的坐标系绘图内容会缩小
// 所以需要将绘制比例放大
ctx.scale(dpr, dpr);

标签:canvas,dpr,适配,模糊,style,height,width,像素
From: https://www.cnblogs.com/UnfetteredMan/p/16962337.html

相关文章

  • c#设计模式-适配器模式
     原文网址:https://www.cnblogs.com/guyun/p/6183346.html一、适配器(Adapter)模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本接口不匹配而......
  • Canvas学习笔记(四)线条操作
    在Canvas中,常见的线条操作属性有:属性说明lineWidth定义线条宽度lineCap定义线帽样式lineJoin定义两个线条交接处的样式常见的线条操作方法有:方......
  • Redis如何模糊匹配Key值
    Redis模糊匹配Key值使用Redis的scan代替Keys指令:publicSet<String>scan(StringmatchKey){Set<String>keys=(Set<String>)redisTemplate.execute((RedisC......
  • 多卡:关于trainer中线性层无法自动适配的小踩坑
    transformer家的trainer适配了fp16、多卡...等,用起来很方便,但是之前我在实现模型的时候,发现在init里定义的线性层,在多卡上跑了以后,报错device不匹配,研究了许久,发现是traine......
  • 模糊查询(监视属性和计算属性实现)
    <!DOCTYPEhtml><html> <head> <metacharset="utf-8"> <title></title> <!-- 实现需求:模糊检索下列数据 1.收集用户的输入框的内容 2.使用watch监视属性去监视key......
  • 代理,装饰,适配,桥接,面孔的区别
    代理,装饰,适配,桥接,面孔的区别Proxy couldbeusedwhenyouwanttolazy-instantiateanobject,orhidethefactthatyou'recallingaremoteservice,orcontrol......
  • 基于Kotlin和Canvas的跨中端设计
    背景js弱类型非常混乱,不适合开发超过2w行代码的独立应用(普通Web除外)Web端和桌面端是主流工具应用的生存地Canvas又是一个新兴的领域,能够提供多种多样的工具支持设计一......
  • uniapp使用canvas绘制两张图片合并为一张图并保存至手机(H5+小程序)
      需求:访客二维码图片,包含:1二维码  2访客信息1、二维码使用weapp-qrcode插件生成(canvas)2、访客信息绘制到背景canvas上3、最后,将二维码的canvas合并到背景can......
  • 源码解析:Dubbo3 的 Spring 适配原理与初始化流程
    Dubbo国内影响力最大的开源框架之一,非常适合构建大规模微服务集群的,提供开发框架、高性能通信、丰富服务治理等能力。同时Dubbo无缝支持Spring、SpringBoot模式的开......
  • 基于scale的自适应适配方案
    在CSS3中,我们可以使用transform属性的scale()方法来实现元素的缩放效果。缩放,指的是“缩小”和“放大”的意思。transform:scaleX(x);/沿x轴方向缩放/transform:sca......