canvas 实现图片局部模糊_canvas画图模糊解决方法

本文介绍了如何使用canvas实现图片局部模糊效果,探讨了屏幕分辨率、dpi和ppi的概念,并指出在devicePixelRatio大于1的设备上可能出现图片模糊的问题。通过调整像素处理,可以避免图片模糊,达到清晰显示的效果。
摘要由CSDN通过智能技术生成

98889ef0a199de479e6f42cb5fe83b5f.png

在解决这个问题之前,必须了解以下背景知识:

  1. 屏幕分辨率 :屏幕上面的像素点数,1280x720表示这个显示器水平方向有1280个像素,垂直方向上有720个像素。
  2. dpi(点每英寸):d是显示器上每一个物理的点,p指的是屏幕分辨率中的最小单位
  3. ppi(像素每英寸): 每英寸所拥有的像素数量,PPI数值越高,图像越清晰。

在浏览器中,可以通过 window.devicePixelRatio 获取 设备上物理像素和设备独立像素的比例。在 devicePixelRatio > 1 的浏览器或手机上画图,你就会发现图片模糊。这是因为图片被放大了 devicePixelRatio 倍, 我们处理的时候对其进行像素压缩即可实现图片不模糊。

<canvas id="myCanvas1" width="400" height="400" style="width:400px;height:400px"></canvas>
<canvas id="myCanvas2" style="width:400px;height:400px"></canvas>
<script type="text/javascript">
    var ctx1 = myCanvas1.getContext('2d');
    var ctx2 = myCanvas2.getContext('2d');
    // 用canvas.style.width压缩canvas.width
    myCanvas2.width = parseInt(getComputedStyle(myCanvas2, null)['width']) * devicePixelRatio;
    myCanvas2.height = parseInt(getComputedStyle(myCanvas2, null)['height']) * devicePixelRatio;
    var img = new Image();
    img.src = './php.jpeg'
    img.onload = function () {
        this.onload = null;
        ctx1.drawImage(img, 0, 0);
        // 这里和ctx2 进行对比
        ctx1.drawImage(img, 0, 0, img.width / 2, img.height / 2);
        ctx2.drawImage(img, 0, 0);
    }
    ctx1.font ='32px Arial';
    // 压缩后,绘制需要同比放大
    ctx2.font = 32 * devicePixelRatio + 'px Arial';
    ctx1.fillText('未处理之前', 0, 350);
    ctx2.fillText('处理之后', 0, 350 * devicePixelRatio);
</script>

效果图:

fd1150648b3990b0cf1c98d9446d1379.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值