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

改变后的效果图如下:

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

您可能有感兴趣的文章
小程序中canvas的drawImage方法参数使用详解

JavaScript+HTML5 canvas实现放大镜效果完整示例

javascript+HTML5 canvas绘制时钟功能示例

微信小程序实现的canvas合成图片功能示例

微信小程序基于canvas渐变实现的彩虹效果示例