canvas – 绘制图片,图片变模糊问题解决)

canvas – 绘制图片,图片变模糊问题解决)问题 canvas 绘制图片 图片变模糊设定一个一定尺寸的 canvas 我这里设置的画布大小是 400px 400px 当一张图片完全画到画布上的时候 大概率都会出现图片模糊的情况 我拿下面一张图片画到 canvas 上作为例子 看上去应该比较明显的有模糊的感觉 单方面的去修改图片精度 换成更高清的图片 事实证明确实有一丢丢用 但是效果不是很明显 况且我当时那个图片由于是手绘的 大小有 5M 也不会切片加载图片 直接整个加载非常耗时 那么如何去处理这样的问题呢 生活中应该大家都遇到过这样的情况

问题:canvas绘制图片,图片变模糊

在这里插入图片描述

单方面的去修改图片精度,换成更高清的图片,事实证明确实有一丢丢用,但是效果不是很明显。况且我当时那个图片由于是手绘的,大小有5M,也不会切片加载图片,直接整个加载非常耗时。

那么如何去处理这样的问题呢?

  • 生活中应该大家都遇到过这样的情况,同样的1080p的视频,在大屏显示器上看和手机上看效果是不一样的,大屏往往会让人感觉一种模糊感。而在手机小屏幕上,就会感觉异常的清晰。

要点:两个点

  • 通过上面的一个例子,我们可以将图片放大,然后再绘制进原先大小的canvas中,这样图片的精度受损会比较小
  • 了解canvas的绘制原理(*打星号)
    canvas其实就是一张画布,所以如果可以的话,你可以将它放大,可以发现它也是有一个个的像素组成的。
    在这里插入图片描述




在这里插入图片描述

他会以图中的红线作为中线,向两边延伸,从而得到1px的纵向线条。但是像素是不允许0.5px的出现的,所以它索性就直接再延伸一点,将像素给填满。所以你看到的效果是下面这种?

在这里插入图片描述

解决方案

方法一

在绘制的时候,如果是线条,可以通过移动0.5px找准中线来达到目的,例如:

ctx.moveTo(100.5,100.5); ctx.lineTo(200.5,100.5); 

方法二

如果是图片,可以通过放大一倍canvas大小,但是通过css保持canvas大小不变,然后再绘制进canvas中,这样在canvas放大一倍的情况下绘制进去图片,然后通过css缩小canvas到原来大小达到目的。

示例

 
   
    
    canvas绘制图片模糊 
     
      
        
    
  

为了方便,就都写在一个html中了,图片也是找的网图。左边是未处理,也就是代码中的canvas效果,右边是通过方法2处理后的,也就是canvas2效果,请自行鉴别嗷。

在这里插入图片描述方法三

可以通过 transform:scale(0.5)的方式对图片进行缩放,再绘制到canvas中

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

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

(0)
上一篇 2026年3月18日 上午10:50
下一篇 2026年3月18日 上午10:51


相关推荐

  • 安装使用postwoman

    安装使用postwoman一 cd usr local src gitclonehttp github com postwoman io postwoman git 二 由于我使用的是宝塔 所以先在宝塔里安装 pm2 安装完成后 cd usr local src postwoman 执行 npminstall 三 以上步骤执行完毕就安装好了 postwoman 接下来我们快速运行 postwoman 还是在 postwoman 目录下 执行 npmrundev 出现下图即为服务已启动

    2026年3月17日
    2
  • SpringCloud与Dubbo区别[通俗易懂]

    SpringCloud与Dubbo区别[通俗易懂]SpringCloud和Dubbo都是当下流行的RPC框架,各自都集成了服务发现和治理组件。SpringCloud用Eureka,Dubbo用Zookeeper,这篇博客就将将这两个组件在各自系统中的作用机制的区别。1.注册的服务的区别Dubbo是基于java接口及Hession2序列化的来实现传输的,Provider对外暴露接口,Consumer根据接口的规则调用。也就是Provider向Zookeeper注册的是接口信息,Consumer从Zookeeper发现的是接口的信息,通过接口的name

    2022年5月25日
    47
  • vscode格式化代码快捷键

    vscode格式化代码快捷键前端小白 旁边的人一直推荐使用 vscode 来写代码 新人写的代码格式比较乱 不知道如何使用快捷键格式化代码 使用 Java 的格式去设置 发现不起作用 在这里记录一下 在 Windows 中 vscode 格式化代码快捷键是 Shift Alt F 在 Mac 中 vscode 格式化代码快捷键是 Shift Option F 在 Ubuntu 中 vscode 格式化代码快捷键是 Ctrl Shift I

    2026年3月19日
    3
  • python 爬虫代码实例

    python 爬虫代码实例什么是爬虫 网络爬虫 又被称为网页蜘蛛 网络机器人 在 FOAF 社区中间 更经常的称为网页追逐者 是一种按照一定的规则 自动地抓取万维网信息的程序或者脚本 另外一些不常使用的名字还有蚂蚁 自动索引 模拟程序或者蠕虫 其实通俗的讲就是通过程序去获取 web 页面上自己想要的数据 也就是自动抓取数据 爬虫的本质是什么 模拟浏览器打开网页 获取网页中我们想要的那部分数据浏览器打开网页的过程 当你在浏览器中输入地址后 经过 DNS 服务器找到服务器主机 向服务器发送一个请求 服务器经过解析后发送给用

    2026年3月18日
    2
  • 本地部署开源 AI 智能体项目 OpenClaw 并实现外部访问

    本地部署开源 AI 智能体项目 OpenClaw 并实现外部访问

    2026年3月13日
    1
  • java注解-最通俗易懂的讲解

    java注解-最通俗易懂的讲解来源 秒懂 Java 注解 Annotation 你可以这样学 Annotation 中文译过来就是注解 标释的意思 在 Java 中注解是一个很重要的知识点 但经常还是有点让新手不容易理解 我个人认为 比较糟糕的技术文档主要特征之一就是 用专业名词来介绍专业名词 比如 Java 注解用于为 Java 代码提供元数据 作为元数据 注解不直接影响你的代码执行 但也有一些类型的

    2026年3月20日
    1

发表回复

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

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