解决 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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • kfold参数_kinfolk中文版

    kfold参数_kinfolk中文版sklearn中的KFold与StratifiedKFold函数的使用

    2022年9月15日
    0
  • 提交到svn服务器时,一直缓冲不,

    提交到svn服务器时,一直缓冲不,

    2021年9月20日
    47
  • java8 groupingby_java8的groupingby

    java8 groupingby_java8的groupingby可能很多人特别是刚毕业的应届生多少都学过一点java8的东西,知道有很多的新特性但是在实用性上总感觉没地方用。。之前在找实习之前也学过一些东西,但是很快就因为没使用而忘光了这几天在项目中大量使用,才得以回想起来:这次主要说groupingby,在项目中往往会因为查询效率的问题而批量查询某些DO,但是在批量查询之后是需要对查询到的list进行归类的,比如一个DO类person,里面包含年龄,性别等属…

    2022年8月20日
    5
  • oracle可视化工具_oracle rac架构

    oracle可视化工具_oracle rac架构SRVCTL是ORACLERAC集群配置管理的工具,可以管理Database、Instance、ASM、Service、Listener和NodeApplication,NodeApplication包括GSD,ONS,VIP。srvctl的命令格式为srvctl[options]srvctlUsage:srvctl[]command:enable|disable|start|sto…

    2022年9月11日
    0
  • 系统数据库的概念结构,逻辑结构,物理结构设计方法_数据库的物理独立性是指

    系统数据库的概念结构,逻辑结构,物理结构设计方法_数据库的物理独立性是指由于自己在写这一部分的报告时,总感觉不能很好地理解概念含义,具体的设计目标也不知道用怎样的形式来表达。在做完相关报告之后,想着把老师指导之后改正的作业展示一下,希望可以给有类似问题的小伙伴一点点帮助。系统的概念数据库设计将需求分析得到的用户需求抽象为信息结构(即概念模型)的过程就是概念结构设计,最后生成的模型是E-R图。注:1、先写局部E-R图,再写整体的E-R图2、若所设计系统的实体、属性与联系很多,绘制出来的总E-R图过于复杂、不清晰,可以将整体的E-R图分解成实体-属性图和实体-联系图。其

    2022年10月11日
    0
  • pycharm系统找不到指定路径_win7找不到指定程序

    pycharm系统找不到指定路径_win7找不到指定程序对于许多程序初学者来说可能会碰到许多问题,首先可能在编译器运行程序时就会出现各种问题。我就是这样的一个程序员小白。在初次使用PyCharm编译器运行Python程序时就出现了系统找不到指定文件所在的位置的问题。在上网看了许多人提供的解决方案之后,我从中浏览几个与所出现问题相近的答案,并结合本人运行程序时出现的问题将解决方法作为学习笔记记录在此。希望对我今后的学习以及对于那些像我一样的初学者能够提供一些帮助。使用PyCharm运行程序时出现系统找不到指定文件位置的错误的解决:第一步:看到错误提示【

    2022年8月26日
    12

发表回复

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

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