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与Image加载事件(onload)、加载状态(complete)
Feb 14 Javascript
JavaScript学习笔记(二) js对象
Oct 25 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
Jan 23 Javascript
JavaScript函数获取事件源的小例子
May 14 Javascript
浅谈javascript回调函数
Dec 07 Javascript
JS实现的仿淘宝交易倒计时效果
Nov 27 Javascript
jquery实现简单的瀑布流布局
Dec 11 Javascript
如何理解jQuery中的ajaxSubmit方法
Mar 13 Javascript
浅谈vue.js导入css库(elementUi)的方法
Mar 09 Javascript
js+SVG实现动态时钟效果
Jul 14 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
Echarts之悬浮框中的数据排序问题
Nov 08 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
PHP4中session登录页面的应用
2008/07/25 PHP
PHP 截取字符串函数整理(支持gb2312和utf-8)
2010/02/16 PHP
php创建基本身份认证站点的方法详解
2013/06/08 PHP
thinkphp循环结构用法实例
2014/11/24 PHP
3种php生成唯一id的方法
2015/11/23 PHP
php array_pop 删除数组最后一个元素实例
2016/11/02 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
2016/12/23 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
jQuery验证Checkbox是否选中的代码 推荐
2011/09/04 Javascript
基于jquery实现拆分姓名的方法(纯JS版)
2013/05/08 Javascript
JS的事件绑定深入认识
2014/06/26 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
jQuery处理图片加载失败的常用方法
2015/06/08 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
layer弹出层取消遮罩的方法
2019/09/25 Javascript
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python和Go语言的区别总结
2019/02/20 Python
Matplotlib使用Cursor实现UI定位的示例代码
2020/03/12 Python
关于tf.matmul() 和tf.multiply() 的区别说明
2020/06/18 Python
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
美国沙龙美发产品购物网站:Hair.com by L’Oreal
2020/11/09 全球购物
酒店总经理岗位职责
2014/03/17 职场文书
教学改革实施方案
2014/03/31 职场文书
保护环境标语
2014/06/09 职场文书
党建工作汇报材料
2014/12/24 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
2019数学教师下学期工作总结
2019/06/27 职场文书
关于golang高并发的实现与注意事项说明
2021/05/08 Golang
判断Python中的Nonetype类型
2021/05/25 Python
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS