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 相关文章推荐
location.href语句与火狐不兼容的问题
Jul 04 Javascript
JQuery中对Select的option项的添加、删除、取值
Aug 25 Javascript
jquery选择符快速提取web表单数据示例
Mar 27 Javascript
用NODE.JS中的流编写工具是要注意的事项
Mar 01 Javascript
JavaScript编写Chrome扩展实现与浏览器的交互及时间通知
May 16 Javascript
jQuery实现摸拟alert提示框
May 22 Javascript
全面解析JavaScript中的valueOf与toString方法(推荐)
Jun 14 Javascript
AngularJs基于角色的前端访问控制的实现
Nov 07 Javascript
Extjs让combobox写起来简洁又漂亮
Jan 05 Javascript
vue2.0父子组件间通信的实现方法
Apr 19 Javascript
深入浅析javascript函数中with
Oct 28 Javascript
jQuery层叠选择器用法实例分析
Jun 28 jQuery
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操作xml
2013/10/27 PHP
PHP回调函数与匿名函数实例详解
2017/08/16 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
javascript radio 联动效果
2009/03/04 Javascript
js no-repeat写法 背景不重复
2009/03/18 Javascript
Prototype 学习 Prototype对象
2009/07/12 Javascript
js处理表格对table进行修饰
2014/05/26 Javascript
jQuery中[attribute=value]选择器用法实例
2014/12/31 Javascript
省市选择的简单实现(基于zepto.js)
2016/06/21 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
Nodejs 发布自己的npm包并制作成命令行工具的实例讲解
2018/05/15 NodeJs
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
JS实现图片切换效果
2018/11/17 Javascript
ES6知识点整理之函数对象参数默认值及其解构应用示例
2019/04/17 Javascript
Angular2使用SVG自定义图表(条形图、折线图)组件示例
2019/05/10 Javascript
[01:45]DOTA2新英雄“神谕者”全方位展示
2014/11/21 DOTA
用Python制作简单的钢琴程序的教程
2015/04/01 Python
Python中splitlines()方法的使用简介
2015/05/20 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
Python之py2exe打包工具详解
2017/06/14 Python
解决pycharm 误删掉项目文件的处理方法
2018/10/22 Python
django admin.py 外键,反向查询的实例
2019/07/26 Python
Python socket连接中的粘包、精确传输问题实例分析
2020/03/24 Python
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
医学毕业生自荐信
2013/10/11 职场文书
小学生成长感言
2014/01/30 职场文书
上班离岗检讨书
2014/09/10 职场文书
迎新生标语大全
2014/10/06 职场文书
社保代办委托书怎么写
2014/10/06 职场文书
考试没考好检讨书(精选篇)
2014/11/16 职场文书
银行求职自荐信范文
2015/03/04 职场文书
停车场管理制度范本
2015/08/05 职场文书
500字作文之难忘的同学
2019/12/20 职场文书
MySQL中IO问题的深入分析与优化
2022/04/02 MySQL