Canvas drawImage在高清屏幕下变模糊,解决方案

问题:在使用canvas 绘制图片时,发现图片有些模糊

像这样
高清屏幕下canvas绘制的模糊图片
但使用img标签是不会出现这个问题的

<img  style={{width: '30px', height: '30px'}} 
src={require('../../../assets/icon/ic_cloud.png')}/>
处理方法:
核心代码如下
  function setupCanvas(canvas) {
   // Get the device pixel ratio, falling back to 1.
   var dpr = window.devicePixelRatio || 1;
   // Get the size of the canvas in CSS pixels.
   var rect = canvas.getBoundingClientRect();
   // Give the canvas pixel dimensions of their CSS
   // size * the device pixel ratio.
   canvas.width = rect.width * dpr;
   canvas.height = rect.height * dpr;
   var ctx = canvas.getContext('2d');
   // Scale all drawing operations by the dpr, so you
   // don't have to worry about the difference.
   ctx.scale(dpr, dpr);
   return ctx;
 }
   canvas = document.getElementById('tutorial');
   canvas.width = 1000;
   canvas.height = 1000;
   
   if (canvas.getContext) {//代表支持canvas
     ctx = setupCanvas(canvas);   //这里是调用封装的处理方法
  }

处理了canvas对象,就完美解决了。
处理过,draw出来的清晰图片

附上:参考文章地址,以下是译文内容

HiDPI屏幕是可爱的,他们使一切看起来更平滑和干净。但它们也给开发者带来了一系列新的挑战。在本文中,我们将了解在HiDPI屏幕上下文中在画布中绘制图像的独特挑战。

devicePixelRatio属性

让我们从头开始。在我们拥有HiDPI屏幕之前,一个像素就是一个像素(如果我们忽略缩放和缩放的话),你并不需要改变周围的任何东西。如果你设置一些东西是100px宽,这就是它的全部。然后,最初的几款HiDPI手机开始出现在窗口对象上,带有有点神秘的devicePixelRatio属性,可用于媒体查询。这个属性允许我们做的是理解像素值(我们称之为逻辑像素值)在CSS中如何转换为设备在渲染时使用的实际像素数的比率。对于devicePixelRatio为2的iPhone 4S,您将看到100px的逻辑值等于200px的设备值。

这很有趣,但这对我们开发者意味着什么?在早期,我们都开始注意到我们的图像被这些设备放大了。我们在元素的逻辑像素宽度上创建图像,当它们被绘制出来时,它们将被devicePixelRatio放大,它们将变得模糊。

这个问题的实际解决方案是
创建按devicePixelRatio放大的图像,然后使用CSS按相同的比例缩小,
canvas也是如此!

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值