解决 canvas 在高清屏中绘制模糊的问题

解决 canvas 在高清屏中绘制模糊的问题

输入图片说明

1 解决方案 浏览器的对象 window 只有一个 属性是devicePixeRatio 的属性 。该属性表示了屏幕的设备像素比,即用几个像素宽度渲染一个像素的问题 举例子来说。 假设devicePixelRatio 的值为2 一张100/100 大小的图片 在Retina设备上 会用2个像素的空间。相当于图片放大了一倍,图片就会模糊 类似的,在 canvas context 中也存在一个 backingStorePixelRatio 的属性,该属性的值决定了浏览器在渲染canvas之前会用几个像素来来存储画布信息。 backingStorePixelRatio 属性在各浏览器厂商的获取方式不一样,所以需要加上浏览器前缀来实现兼容。 2 解决问题 【直接上代码】

<style>
      canvas {
        border: 1px solid red;
        width: 100%;
    }
  </style>
<body>
 <canvas id="canvas"  height="180"></canvas>
</body>
1> 模糊的情况
  // 原始做法
   var canvas =  document.getElementById("canvas");
   var ctx = canvas.getContext('2d');
   ctx.font = '18px Geprgia';
   ctx.fillStyle  = '#999';
   ctx.fillText('我是模糊的文字',50,50); 

      2> 清晰的情况
     // 获取像素比
   var getPixelRatio = function (context) {
           var backingStore = context.backingStorePixelRatio ||
            context.webkitBackingStorePixelRatio ||
            context.mozBackingStorePixelRatio ||
            context.msBackingStorePixelRatio ||
            context.oBackingStorePixelRatio ||
            context.backingStorePixelRatio || 1;
        return (window.devicePixelRatio || 1) / backingStore;
    };
    //画文字
    var myCanvas = document.getElementById("my_canvas");
    var context = myCanvas.getContext("2d");
    var ratio = getPixelRatio(context);
 
    myCanvas.style.width = myCanvas.width + 'px';
    myCanvas.style.height = myCanvas.height + 'px';
 
    myCanvas.width = myCanvas.width * ratio;
    myCanvas.height = myCanvas.height * ratio;
 
    // 放大倍数
    context.scale(ratio, ratio);
 
    context.font = "18px Georgia";
    context.fillStyle = "#999";
    context.fillText("我是清晰的文字", 50, 50);

转载于:https://my.oschina.net/u/3692906/blog/1818628

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/101646.html原文链接:https://javaforall.net

(0)
上一篇 2021年6月5日 下午4:00
下一篇 2021年6月5日 下午5:00


相关推荐

  • 高德地图——标记「建议收藏」

    高德地图——标记「建议收藏」高德地图——标记

    2022年5月22日
    65
  • 连接失败连接区间变量

    连接失败连接区间变量

    2022年1月12日
    54
  • sql mysql创建 视图索引_SQLServer中在视图上使用索引(转载)「建议收藏」

    sql mysql创建 视图索引_SQLServer中在视图上使用索引(转载)「建议收藏」在SQLServer中,视图是一个保存的T-SQL查询。视图定义由SQLServer保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全。但是,它并不占用数据库的任何空间。实际上,在你查询它之前,视图并不做任何事情。索引视图在SQLServer2000和2005中,你能够给视图增加索引。但是,如果视图只是一个保存在数据库中的查询定义,在运行前没有自己的数据,你如何给那个定义建立…

    2022年7月22日
    19
  • 时间协议ntp服务器,时间服务器NTP搭建及NTP协议简介

    NTP协议简介目前在计算机上同步时间采用的NTP协议,我们可以在局域网中搭建NTP服务器来同步时间。NTP(NetworkTimeProtocol)是用来是计算机时间同步化的一种协议,他可以使计算机对其服务器或时钟源(如石英钟、GPS)做同步化,可以提供高精准度的时间校正。NTP可以通过原子钟、天文台、卫星等渠道获得精准时间,然后再按照NTP服务器等级进行传播。NTP的网络结构是分层管理的类树…

    2022年4月7日
    75
  • 如何用COZE搭建一个测评应用

    如何用COZE搭建一个测评应用

    2026年3月12日
    1
  • 永久免费内网穿透很简单,一看就明白(长文)

    永久免费内网穿透很简单,一看就明白(长文)对于网络用户来说,一定都经历过出门在外无法直接在外网访问内网、或是难以部署异地远程桌面,因此心急如焚的情况;对于企业来说,无论是财务管理软件难以将分店信息同步到总部进行统计汇总、还是员工出差在外或在家里就不能访问企业内部办公系统,都极大地影响了公司整体效率;对于个人开发者来说,微信小程序或者在线支付系统等开发环境往往需要一个可以外部访问的公网环境进行调试,而大多数的企业网络都被运营商做了转发设置,…

    2022年6月22日
    142

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号