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 asp.net 获取当前超链接中的文本
Apr 14 Javascript
深入理解javascript变量声明
Nov 20 Javascript
javascript实现ecshop搜索框键盘上下键切换控制
Mar 18 Javascript
基于javascript实现页面加载loading效果
Sep 15 Javascript
javascript self对象使用详解
Oct 18 Javascript
基于jQuery实现的打字机效果
Jan 16 Javascript
Vue2.x中的Render函数详解
May 30 Javascript
微信小程序动态添加分享数据
Jun 14 Javascript
vue项目常用组件和框架结构介绍
Dec 24 Javascript
基于openlayers4实现点的扩散效果
Aug 17 Javascript
VUE 配置vue-devtools调试工具及安装方法
Sep 30 Javascript
vue自定义指令和动态路由实现权限控制
Aug 28 Javascript
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 EOT定界符的使用详解
2008/09/30 PHP
php 正则匹配函数体
2009/08/25 PHP
php中{}大括号是什么意思
2013/12/01 PHP
php中return的用法实例分析
2015/02/28 PHP
JavaScript高级程序设计 读书笔记之九 本地对象Array
2012/02/27 Javascript
JavaScript 学习笔记之操作符
2015/01/14 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
JS实现生成会变大变小的圆环实例
2015/08/05 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
Jquery ui datepicker设置日期范围,如只能隔3天【实现代码】
2016/05/04 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
2016/12/02 Javascript
vue.js的computed,filter,get,set的用法及区别详解
2018/03/08 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
Python函数学习笔记
2008/10/07 Python
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
python中元组的用法整理
2020/06/15 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
html5 css3实例教程 一款html5和css3实现的小机器人走路动画
2014/10/20 HTML / CSS
用你熟悉的语言写一个连接ORACLE数据库的程序,能够完成修改和查询工作
2012/06/11 面试题
外贸英语毕业生自荐信
2013/11/14 职场文书
真诚的求职信
2014/07/04 职场文书
学生检讨书范文
2014/10/30 职场文书
2014年监理个人工作总结
2014/12/11 职场文书
房产销售员2015年终工作总结
2015/10/22 职场文书
入党申请书怎么写?
2019/06/11 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
Java实现房屋出租系统详解
2021/10/05 Java/Android
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
Ruby处理YAML和json数据
2022/04/18 Ruby
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS