• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > canvas绘图不清晰的解决方案

canvas绘图不清晰的解决方案

作者:Young Dreamer 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Young Dreamer通过本文主要向大家介绍了html5 canvas绘图,canvas绘图,h5 canvas绘图,canvas绘图教程,android canvas绘图等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

现象描述

  同样大小的图片(60x60px)用canvas和DOM绘制,结果发现canvas的画面质量要差很多。结果如下图所示。

  上图中,左侧红框中的金币采用DOM绘制,右侧和下方的金币和文字等使用canvas绘制,结果canvas绘制的图片模糊不清。

原因分析

  假设dpr = 2;图片大小为60x60px;对dpr有一定的了解基础。

  1.DOM呈现图片过程

  图片——》浏览器css像素(显示尺寸)——》屏幕实际像素

  60x60              30x30                              60x60

  图片像素——》实际像素

  1: 1

  2.canvas绘制过程

  图片像素——》canvas像素(画布尺寸)——》css像素(显示尺寸)——》屏幕实际像素

  60x60               30x30                              30x30                          60x60

  图片像素——》画布像素——》实际像素

  4:                    1:                  4

  也就是说,canvas的绘制过程中图片到画布的过程中进行了像素的抽稀,画布到屏幕像素时又进行了插值,所以造成图片质量下降。

解决方案

  放大画布的尺寸,但是canvas显示尺寸不变;

  图片像素——》canvas像素(画布尺寸)——》css像素(显示尺寸)——》屏幕实际像素

  60x60               60x60                                           30x30            60x60

  图片像素——》实际像素

  1:                1 

而canvas的设计的时候正好有对象的属性来分别管理画布尺寸和显示尺寸;canvas的width、height属性用于管理画布尺寸;canvas的style属性中的width、height正好是显示尺寸。

也就是说解决方案就是设置舞台的尺寸和图片像素的尺寸一致,显示尺寸为正常显示尺寸;假设canvas的显示尺寸为窗口宽度,创建canvas的时候指定canvas的width属性为2 * body.clientHeight;style.widht为body.clientHeight + 'px';

改变后的效果图如下:

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • canvas绘图不清晰的解决方案

相关文章

  • 2017-05-11jQuery阻止移动端遮罩层后页面滚动
  • 2017-05-11js实现模糊匹配功能
  • 2017-05-11JavaScript比较两个数组的内容是否相同(推荐)
  • 2017-05-11Bootstrap栅格系统简单实现代码
  • 2017-05-11bootstrap suggest搜索建议插件使用详解
  • 2017-05-11vue-router:嵌套路由的使用方法
  • 2017-05-11selenium 与 chrome 进行qq登录并发邮件操作实例详解
  • 2017-05-11SyntaxHighlighter自动识别并加载脚本语言 原创
  • 2017-05-11使用nodejs爬取前程无忧前端技能排行
  • 2017-05-11从零学习node.js之简易的网络爬虫(四)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 微信小程序 slider 详解及实例代码
    • js实现数字从1动态递增到10
    • 原生js仿淘宝网商品放大镜效果
    • 基于vue实现多引擎搜索及关键字提示
    • 你真的了解BOM中的history对象吗
    • JavaScript实现反转字符串的方法详解
    • js模态对话框使用方法详解
    • jquery与ajax获取特殊字符实例详解
    • node.js学习
    • vuejs响应用户事件(如点击事件)

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有