canvas绘图不清晰的解决方案


Posted in Javascript onFebruary 28, 2017

现象描述

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

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';

改变后的效果图如下:

canvas绘图不清晰的解决方案

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

Javascript 相关文章推荐
JavaScript网页制作特殊效果用随机数
May 22 Javascript
javascript面向对象之this关键词用法分析
Jan 13 Javascript
jquery实现上下左右滑动的方法
Feb 09 Javascript
jQuery动态效果显示人物结构关系图的方法
May 07 Javascript
js 动态生成json对象、时时更新json对象的方法
Dec 02 Javascript
BootStrap 实现各种样式的进度条效果
Dec 07 Javascript
javascript中this用法实例详解
Apr 06 Javascript
Vue中组件之间数据的传递的示例代码
Sep 08 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 Javascript
Vue-Router模式和钩子的用法
Feb 28 Javascript
JavaScript实现新年倒计时效果
Nov 17 Javascript
如何实现vue的tree组件
Dec 03 Vue.js
jQuery树控件zTree使用方法详解(一)
Feb 28 #Javascript
js数字计算 误差问题的快速解决方法
Feb 28 #Javascript
js数字舍入误差以及解决方法(必看篇)
Feb 28 #Javascript
JS实现浏览器打印、打印预览示例
Feb 28 #Javascript
JS基于面向对象实现的多个倒计时器功能示例
Feb 28 #Javascript
js中删除数组中的某一元素实例(无下标时)
Feb 28 #Javascript
jQuery图片切换动画效果
Feb 28 #Javascript
You might like
PHP 数组入门教程小结
2009/05/20 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
Zend的MVC机制使用分析(二)
2013/05/02 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
Js 时间函数getYear()的使用问题探讨
2013/04/01 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
基于insertBefore制作简单的循环插空效果
2015/09/21 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
JavaScript实现获取远程的html到当前页面中
2017/03/26 Javascript
微信小程序踩坑记录之解决tabBar.list[3].selectedIconPath大小超过40kb
2018/07/04 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
Python实现的爬取网易动态评论操作示例
2018/06/06 Python
Python实现调用另一个路径下py文件中的函数方法总结
2018/06/07 Python
Python中利用aiohttp制作异步爬虫及简单应用
2018/11/29 Python
浅析python 定时拆分备份 nginx 日志的方法
2020/04/27 Python
PyQT5速成教程之Qt Designer介绍与入门
2020/11/02 Python
皇马官方商城:Real Madrid Store
2016/09/02 全球购物
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
北京华建集团SQL面试题
2014/06/03 面试题
法律专业推荐信范文
2013/11/29 职场文书
《石榴》教学反思
2014/03/02 职场文书
大学生在校表现评语
2014/12/31 职场文书
先进教师个人总结
2015/02/11 职场文书
撤诉状格式范本
2015/05/19 职场文书
卢旺达饭店观后感
2015/06/05 职场文书
2016大一新生军训心得体会
2016/01/11 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书
Python数据分析之pandas函数详解
2021/04/21 Python
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫