html5 canvas中绘制字体与图片以及图形模糊问题解决

html5 canvas 绘制字体、图片与图形模糊问题

发生情况

多出现在高dpi设备,这意味着每平方英寸有更多的像素,如手机,平板电脑。当然很多高端台式电脑也有高分辨率高dpi的显示器。

 

canvas在浏览器中的缩放原理

立即学习“前端免费学习笔记(深入)”;

如果没有设置style那么就以html的属性width,height作为尺寸。

如果设置了style中的width、height,那么以其style设置为最终绘制到浏览器的尺寸。

也就是说,属性中的宽高并不代表实际宽高,所以高dpi下会放大canvas,导致模糊。

canvas的width、height属性是canvas的后缓冲尺寸,绘制到浏览器后会根据当前dpi进行缩放。

devicePixelRatio(window成员)保存了在高dpi状态下属性width/height被放大的比例。

 

错误的解决案例

网上搜索canvas 模糊,会有两种解决方法,可能现在都不适合了。

一个是CanvasRenderingContext2D.translate(0.5,0.5);

  这个其实是在3D绘图领域常用的,用于处理像素偏移,canvas的2d context已经处理了这方面的问题。

另一个是backingStorePixelRatio,你会看到类似下面这样的代码,这个backingStorePixelRatio已经在新浏览器中被去掉了,我试过chrome与edge都已经不存在了。

var ctx = document.createElement("canvas").getContext("2d"),        dpr = window.devicePixelRatio || 1,        bsr = ctx.webkitBackingStorePixelRatio ||              ctx.mozBackingStorePixelRatio ||              ctx.msBackingStorePixelRatio ||              ctx.oBackingStorePixelRatio ||              ctx.backingStorePixelRatio || 1

登录后复制

我在研究时用了动态创建canvas的方法,样式的width/height乘以缩放比devicePixelRatio得到canvas的属性width/height。

  这不是完美的解决方案,因为在浏览器的dpi发生变化时,比如用户设置,或者从一个高dpi显示器移动窗口到低dpi显示器时发生。(我1080p普通23寸显示器是1.25倍,平板电脑是2.0倍,之间拖放窗口就会发生)

解决方法
1、动态创建并监视window的onresize事件,根据devicePixelRatio重建canvas。
2、动态调整canvas样式的宽高,同样监视onresize事件。再配合CanvasRenderingContext2D.scale动态缩放绘制内容的比例。

浏览器都没有devicePixelRatio改变的事件,或者dpi改变的事件,如果你知道,请留言。

 

以上就是html5 canvas中绘制字体与图片以及图形模糊问题解决的详细内容,更多请关注【创想鸟】其它相关文章!

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2909592.html

(0)
上一篇 2025年3月11日 04:23:26
下一篇 2025年3月11日 04:23:39

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • html5在Canvas中实现自定义路径动画详解

    本篇文章主要介绍了html5如何在canvas中实现自定义路径动画示例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在最近的项目中笔者需要做一个新需求:在canvas中实现自定义的路径动画。这里所谓的自定义路径不单单包括一条直线,也许…

    2025年3月11日
    000
  • Html5中内容安全策略(CSP)

    前言: Cordova不支持内联事件,所以点击事件必须提取到js里面.以下是从官网摘抄下来,希望对您有所帮助 登录后复制 为了缓解大量潜在的跨站点脚本问题,chrome的扩展系统已经纳入了内容安全策略(csp)的一般概念。 这引入了一些相当…

    编程技术 2025年3月11日
    200
  • h5头像图片旋转css3精确控制每个图片的位置

    h5头像图片旋转css3精确控制每个图片的位置: 1.下面是需要的效果图: 2.用到的图片有:                                         @@##@@                          …

    2025年3月11日 编程技术
    200
  • html5制作新增的定时器requestAnimationFrame实战进度条

    在requestanimationframe出现之前,我们一般都用settimeout和setinterval,那么html5为什么新增一个requestanimationframe,他的出现是为了解决什么问题? 优势与特点: 1)requ…

    2025年3月11日
    200
  • HTML5标签选择方法指引

    以上就是HTML5标签选择方法指引 的详细内容,更多请关注【创想鸟】其它相关文章!

    2025年3月11日
    200
  • html5开发中viewport进行屏幕适配

    随着高端手机(Andriod,Iphone,Ipod,WinPhone等)的盛行,移动互联应用开发也越来越受到人们的重视,用html5开发移动应用是最好的选择。然而,每一款手机有不同的分辨率,不同屏幕大小,如何使我们开发出来的应用或页面大小…

    编程技术 2025年3月11日
    200
  • H5 语义化标签介绍

    H5新标签—-语义化标签 区别:1.默认样式不一样 2.有SEO优化作用 1、header,一般作为网页的头部使用 2、aside,侧边栏 3、nav,导航栏 4、address,地址,字体样式默认倾斜 标签定义文档或文章的作者…

    编程技术 2025年3月11日
    200
  • HTML5头部 meta介绍

    用于定义页面元信息,定义元信息也就是指定一些name-value对。该元素除了可以指定id属性外,还可以指定如下三个属性: http-equiv:指定元信息名称,该属性指定的名称具有特殊意义,它可以向浏览器传回一些有用的信息,帮助浏览器正确…

    编程技术 2025年3月11日
    200
  • HTML5讲解之dataTransfer对象

    [导读] html5拖拽的数据传输  虽然通过dragstart、drag和dragend事件实现了原生拖拽。但是这仅仅是拖拽,在ie6和ie7中还是有些拖拽问题,并且也没有实现数据的交换。为了实现数据的交换,ie5引入了datatrans…

    编程技术 2025年3月11日
    200
  • HTML5的classList属性操作CSS类的使用详解

    这篇文章主要介绍了详解使用html5的classlist属性操作css类,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 前言 以前我们有需要用js或jquery的一些方法hasClass、addClass、re…

    2025年3月11日
    200

发表回复

登录后才能评论