当前位置:首页 > 日记 > 正文

canvas绘图不清晰的解决方案

canvas绘图不清晰的解决方案

现象描述

  同样大小的图片(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';

改变后的效果图如下:

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

相关文章

单页PPT演示制作长文本的方法是什

单页PPT演示制作长文本的方法是什

文本,方法,演示,电脑软件,PPT,  通过对PPT控件工具箱中的文本框控件的设置,可以制作出带滚动条的文本框,能够将大段内容收录其中。以下是小编为您带来的关于单页PPT演示长文本,希望对您有所帮助。单页PPT演示长文本插入文本框控件这个过程主…

怎么在PPT2013中制作数学立方体

怎么在PPT2013中制作数学立方体

立方体,数学,电脑软件,  在用PPT2013制作数学图形时,例如立体矩形,立方体就不好直接用插入形状的方法绘制。难道就没有办法了么?以下是小编为您带来的关于PPT2013中制作数学立方体,希望对您有所帮助。PPT2013中制作数学立方体1 启动PowerPoi…

wps表格中如何快速复制相同内容wps

wps表格中如何快速复制相同内容wps

方法,表格,快速,内容,电脑软件,  表格的编制是办公室里几乎每天都在使用的,同一表格中相同内容的文字要出现在不同行列中,也许你习惯于采用复制、粘贴的方式也处理,但其实在wps表格中有一种很快捷的方式。下面小编告诉是什么吧。wps表格快速…

PPT2010如何制作多媒体相册

PPT2010如何制作多媒体相册

多媒体,电脑软件,  PPT演示文稿是指用PPT软件制作的一系列幻灯片,通过将思维视觉化的方式,用文字、图表、图像和音频视频等载体按照逻辑顺序展示相互关联的思想观点。PPT里面有新建相册的功能,你有没有尝试过呢。将自己的相片整理成一个有序…

JavaScript高阶函数_动力节点Java

JavaScript高阶函数_动力节点Java

高阶函数,学院,节点,动力,电脑软件,高阶函数英文叫Higher-order function。那么什么是高阶函数?JavaScript的函数其实都指向某个变量。既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为…

excel表格数字显示异常的解决方法

excel表格数字显示异常的解决方法

显示,解决方法,数字,表格,电脑软件,  Excel中该如何解决数字显示异常的问题呢?下面是小编带来的关于excel表格数字显示异常的解决方法,希望阅读过后对你有所启发!excel表格数字显示异常的解决方法:  数字显示异常步骤1:当你发现输入的一串…

微信小程序使用Socket的实例

微信小程序使用Socket的实例

实例,程序,电脑软件,微信小,Socket,微信小程序使用Socket的实例首先,一个小程序同时只能有一个WebSocket连接,如果当前已经存在一个WebSocket连接,会关闭当前连接,并重新建立一个连接。其次,如果使用了appID,协议必须是 wss://...最近团队用小程…

如何去掉word页码的两种方法

如何去掉word页码的两种方法

方法,页码,两种,电脑软件,word,  Microsoft Word应用广泛,在处理很多文档时比较实用,有时写文档时需要加入页码,在插入菜单中选择页码即可,那去掉页码该怎么办呢?那么下面就由小编给大家分享下去掉word页码的技巧,希望能帮助到您。去掉word页…

为Excel2010设置纸张大小的方法是

为Excel2010设置纸张大小的方法是

设置,方法,纸张,大小,电脑软件,  在Excel2010表格的使用中,用户根据实际需要设置工作表所使用的纸张大小,可以通过两种方式进行设置。以下是小编为您带来的关于为Excel2010设置纸张大小,希望对您有所帮助。为Excel2010设置纸张大小操作步骤…

怎么在word中插入特殊符号在word中

怎么在word中插入特殊符号在word中

特殊符号,步骤,方法,电脑软件,word,  大家平时在制作文档时,经常会遇到普通文本意外的特殊符号,如№、§等,这些符号可通过word提供的特殊符号功能进行输入。那么下面小编就教你怎么在word中插入特殊符号。在word中插入特殊符号的步骤启…

JS判断键盘是否按的回车键并触发指

JS判断键盘是否按的回车键并触发指

操作,键盘,回车键,方法,按钮,实例如下:document.onkeydown = function (e) { if (!e) e = window.event; if ((e.keyCode || e.which) == 13) { var obtnLogin = document.getElementById("submit_btn"); //submit_btn…

详解Vue2.0 事件派发与接收

详解Vue2.0 事件派发与接收

事件,详解,电脑软件,由于vue2.0 移除了1.0中的$dispatch 和$broadcast 这两个组件之间通信传递数据的方法 ,官方的给出的最简单的升级建议是使用集中的事件处理器,而且也明确说明了 一个空的vue实例就可以做到,因为Vue 实例实现了一个事件…