如何解决canvas在移动端绘制模糊的问题

十年网站开发经验+多家企业客户+靠谱的建站团队

量身定制+运营维护+专业推广+无忧售后,网站问题一站解决

由于一些移动端的兼容性原因,我们某个项目需要前端将pdf转换成在移动端页面可直接观看的界面。为了方便解决,我们采用了pdf.js这个插件,该插件可以将pdf转换成canvas绘制在页面上。不过,在测试过程中却发现,在移动端的浏览器上,绘制的内容展示十分模糊(如下图),经过分析之后发现是由于移动端高清屏幕引起的。在解决问题之后以文字方式记述原因和探究结果

在解释问题之前,首先需要了解一些移动端显示和cavans的小知识,方便后面探究。如果想直接看结果的话看可以拉到最后。

关于屏幕的一些基础知识

物理像素(DP)

物理像素也称设备像素,我们常听到的手机的分辨率及为物理像素,比如iPhone7的物理分辨率为750*1334。屏幕是由像素点组成的,也就是说屏幕的水平方向有750的像素点,垂直方向上有1334个像素点

设备独立像素(DIP)

也称为逻辑像素,比如Iphone4和Iphone3GS的尺寸都是3.5寸,iphone4的物理分辨率是640*980,而3gs只有320*480,假如我们按照真实布局取绘制一个320px宽度的图像时,在iphone4上只有一半有内容,剩下的一半则是一片空白,为了避免这种问题,我们引入了逻辑像素,将两种手机的逻辑像素都设置为320px,方便绘制

设备像素比(DPR)

上面的设备独立像素说到底是为了方便计算,我们统一了设备的逻辑像素,但是每个逻辑像素所代表的物理像素却不是确定的,为了确定在未缩放情况下,物理像素和逻辑像素的关系,我们引入了设备像素比(DPR)这个概念

设备像素比=设备像素/逻辑像素DPR=DP/DIP上面说了很多理论,下面附个图解释一下

从上面的图可以看出,在同样大小的逻辑像素下,高清屏所具有的物理像素更多。普通屏幕下,1个逻辑像素对应1个物理像素,而在dpr=2的高清屏幕下,1个逻辑像素由4个物理像素组成。这也是为什么高清屏更加细腻的原因。

关于canvas的一些基础知识

canvas绘制的是位图

这是一个所有了解过canvas的人都应该知道的知识点,也是接下来我们将要分析问题的核心。

关于位图的解释我们放在后面,现在我们只要知道canvas绘制的图像是位图。

canvas的width和height属性

canvas的width和height属性是初学者非常容易搞错的内容。这两个属性经常会与css中的width和height属性混淆。

比如我们有如下代码(1):

如果还无法理解的话,可以想象成以下的代码(2):

canvas默认的width和height是300*150,对其设置了css之后,canvas会根据设置css宽高进行缩放(注意不是裁剪),这一点和img标签一样

上述代码(1)其实还可以再换一种更通俗的解释方式,就是1个逻辑像素实际上由2个canvas像素填充。

模糊原因的初步探讨

上面是对所需基础知识的一些简介,下面开始正式进行探究。

首先我们提到使用canvas绘制图像的是位图,而我们平常用的jpg,png也是位图。那么什么是位图?

位图又叫像素图或栅格图,它是通过记录图像中每一个点的颜色、深度、透明度等信息来存储和显示图像。具象一点讲,可以将位图想象成一个巨大的拼图,这个拼图有无数的拼块,每个拼块代表了一个纯色的像素点。理论上,1个位图像素对应着1个物理像素。但假如说你使用了高清屏,比如苹果的retina屏去查看一幅图画,又会是什么样子呢?

假设我们有如下代码,该代码将展示在iphone4的retina屏上:

iphone4本身的物理像素为640*980,而设备独立像素为320*480,这代表着1个css像素实际由4个物理像素构成,canvas的像素为320*150,其css像素为320*150,则代表1个css像素将会由1个canvas元素构成,这样进行换算,在retina屏幕下,1个canvas像素(或者说是1个位图像素)将会填充4个物理像素,由于单个位图像素不可以再进一步分割,所以只能就近取色,从而导致图片模糊。

如果还有疑惑的话,以下的图片可以说明位图在retina屏幕下是如何填充的:

上图中左侧的是在普通屏幕下的显示规则,可以看出有4个位图像素点,而右侧的高清屏幕下则有16个像素点。由于像素点不可切割的原因,颜色产生了改变。

但是还有一点没有解释清楚,就是为什么图片会就近取色而不是直接取原值,这也是导致模糊的幕后黑手。

幕后黑手---平滑处理技术

下面是我的某位大佬同学帮我解释的,刚才我们说了每个位图元素实际上一个纯色的像素点。现在假设我们需要在一个css大小为4px*4px,dpr为1普通屏幕上绘制一个数字“0”,那么我们绘制的样子应该如下图,其中1代表黑色像素点,0代表白色像素点。

可以看出在dpr比较小的情况下,我们的“0”这个图案还比较明显,现在假如我们css大小不变,但是改成在retina屏幕下绘制图像,效果又会变成什么样呢?

我们已知在retina屏幕下,一个css像素代表4个物理像素,假如我们不做任何处理,直接按照上面矩阵排列,将矩阵扩大的话,会发现在retina屏幕下,我们的图案锯齿感非常明显,图像明显缺乏了一丝顺化。

假如我们对图像稍作改变,改成下图这样

图像感觉瞬间柔和了,但是原本应该4个0充斥的地方变成了3个1加上1个0。这其实就是所谓的图像平滑处理,为了解决锯齿感觉,将原本的颜色改变,在充斥着较多颜色的图片上,为了更自然,图片的连接处变成了近似的颜色,这也解释了为什么上面填充颜色的时候不是使用本色而是使用近似色。

原因总结

通过了上述的解释,现在我们来总结以下结论,在移动端盛行,高清屏基本上已经普及的现在,1px的css像素实际上代表了4个甚至更多的物理像素。但是由于我们的代码问题,我们1px的css像素和1个canvas像素画上了等号,也就导致了1个canvas像素实际需要填充4个甚至更多物理像素,为了保证图像平滑处理,在填充剩余的物理像素时采用了原先颜色的近似值,导致了图像的模糊。

解决思路

了解了问题出现的原因,解决问题就很容易,解决该问题最重要的一点是让1个canvas像素和一个物理像素挂等号

高版本的浏览器的window对象下都挂着一个devicePixelRatio属性,该属性就是上面所说的dpr,

THE END
1.模板设计模板免费模板图片在线设计软件Canva可画提供了海量的设计模板,涵盖PPT、简历、手抄报、名片、海报、宣传单、邀请函、奖状、荣誉证书、菜单等数十种设计场景,只需选择喜欢的模板,即可轻松在线设计制作。https://www.canva.cn/templates/
2.Canva可画在线设计协作平台平面设计作图软件在线设计协作平台Canva可画提供了海量的设计模板,涵盖海报、简历、名片、Logo、PPT、手抄报、二维码、Banner等数十种平面设计场景,更有千款中英文字体及千万张正版图片素材可供使用。精彩设计,随时随地!http://www.canva.com.tr/
3.Canva可画在线设计协作平台平面设计作图软件在线设计协作平台Canva可画提供了海量的设计模板,涵盖海报、简历、名片、Logo、PPT、手抄报、二维码、Banner等数十种平面设计场景,更有千款中英文字体及千万张正版图片素材可供使用。精彩设计,随时随地!http://www.canva.co/
4.Canva官网版下载app可画canvas官网下载2.238.0安卓版1.Canva官网版下载app让图片设计变得更简单,图片、GIF及视频功能全面支持,支持图片动起来。 2.制作出用于工作、学习和娱乐的精美设计只需要选一喜爱模板,改字换图便可。 3.所以素材均有正版授权,支持商用,无需掌握设计技能就能解决作图需求。 软件点评 https://wfdown.com/soft/10015.htm
5.2024Canva可画v2.291.0老旧历史版本安装包官方免费下载使用上遇到问题:微信关注公众号“Canva可画”,找客服。在Canva可画,随时随地创造精彩设计。15万+原创模板,海报/简历/封面/Logo/PPT/朋友圈配图/电商主图/节日模板,应有尽有。Canva可画平台素材均正版授权,支持商用。 Canva可画介绍 全球每月2亿人在用的设计作图平台。套模板1分钟出图,零基础也能快速上手,https://www.wandoujia.com/apps/7851168/history_v28776326
6.Canva可画iOS苹果版(iPhoneiPadiPodtouch)安装下载Canva 可画是一款多平台的在线平面设计软件,包括网页版、IOS 和安卓应用,支持团队协作等功能。隶属于北京咖瓦信息技术有限公司。 2013 年,梅勒妮在澳大利亚创立了 Canva 可画,2018 年正式进入中国市场,隶属于北京咖瓦信息技术有限公司。2020 年 6 月,Canva 可画完成最新一轮的融资,估值达到 60 亿美元;2021 年 9 https://www.yuduo.cn/app/335/apple
7.可画canvas官网爱问知识人https://www.canva.cn/ Canvas可画是一款掌上图片制作神器能让你的朋友圈低调而又不失优雅,并且软件https://iask.sina.com.cn/b/new2JNnlPUNrVF.html
8.OnlineLogoDesignProduction123HOW Sailing Navigations OfferedOnline Logo Design and Production - Canva CanvasURLs are from the web, links are not guaranteed to be accurate and pointing is not controlled by 123HOW control, in 2024-08-22 02:56 when the inclusion of the URL, the content of the station is compliant andhttp://www.123how.com/en/sites/2452.html/
9.8款好用的商业模式画布工具,实用收藏!提供个人专业版、个人终身版和团队专业版等不同会员版本,价格以官网为准 2.Lucidspark Lucidspark 是一款在线白板工具,可用于绘制商业模式画布,高效呈现出商业8.Lean Canvas Lean Canvas是一种商业画布工具,帮助用户构建和验证商业模式,优化创新方案的可行性和商业可行性。通过填写Lean Canvas,用户可以快速概述创新项目https://boardmix.cn/article/8-business-model-tools/
10.展示路线和marker,以及绘制行政区域边界,并用html2canvas截图1、uniapp中其实已经封装好了map组件,基本的功能都可实现,但我这边需要一个暗黑色的地图,并且要展示行政区域边界信息,如下图所示,在uniapp官网找了一遍,没找到解决方案,于是我就看了原生高德地图api,发现可以实现修改地图的样式。高德官方地址:https://lbs.amap.com/api/javascript-api/summary https://devpress.csdn.net/vue/66cc37890bfad230b8afbfab.html
11.Python画布控件Canvas的用处和用法是什么图1:tkinter Canvas控件 上述示例中涉及了一部分参数,比如 fill、dash、arrow 等,下表对 create_line() 函数的相关参数做了简单介绍: 对于扇形、矩形、三角形、圆形等,这些封闭式图形,它们由轮廓线和填充颜色两部分组成。在绘制这些图形时相关函数的可选参数与上述表格也存在略微差异,下面以绘制扇形的 create_archttps://www.qy.cn/jszx/detail/32337.html
12.可画canvas拍摄美化下载可画canvas是一款超级实用的美图摄影编辑软件,这里有很多精彩的贴纸和模板供您选择,还有众多美妙的细节等着您去体验,可以为照片添加贴纸、滤镜、调色等,还可以制作海报、贺卡等,素材丰富,选择性强。可画canvas内置了大量的模板和丰富的图片材料,免费使用,让您制作出最美丽的照片。不需要掌握设计技巧,也不需要安装复杂http://www.csyz.com/detail/22635.html
13.Mentalcanvas官网下载Mentalcanvas粒子绘画安卓版v1.1Mental canvas怎么导入图片 1、可以在界面左上角选择插入,然后将保存的图片导入就可以了。 2、画布用canvas作画,首先你需要有一块“画布”。 3、如果你的书架里面没有画布,直接写一个canvas即可。 Mental canvas立体画创作教程 1、打开procreate画场景,前、中、远景各一层,要想效果好,你就多分层。 https://www.doyo.cn/app/431894.html
14.网页HTML5也可以画一画(canvas)在日常生活中总喜欢涂涂画画写写,这样可以使表达更加直观,记录的也更加详细,而在HTML5中同样可以画一画。canvas意为画布,现实生活中用它来作画,在HTML5中的canvas与之类似,可以称它为“网页中的画布”,有了这个画布便可以轻松的在网页中绘制图形、文字、图片等。 https://www.360doc.cn/article/71093473_929113036.html
15.Canvas可画下载:释放你的创意在数字化时代,Canvas可画下载成为了许多设计师、艺术家和普通用户的得力工具。Canvas,即HTML5中的一个重要元素,允许开发者在网页上进行动态图形绘制和动画制作。今天,我们就来深入探讨一下Canvas可画下载的功能、应用以及它如何改变了我们的创作方式。 什么是Canvas可画下载? http://jiangyoupai.com/p/d6EdV_Ez-6fYN6E0q_QLQ
16.canva可画app下载canva可画手机版下载v2.249.1安卓手Mental canvas粒子绘画v1.1官方安卓版本 32.09 MB/中文/10.0 文字图片制作appv1.8.7安卓版 24.15 MB/中文/10.0 Canva appv2.244.0安卓中文版 21.27 MB/中文/10.0 Canva 可画IOS版v1.70.1 苹果版 167.30 MB/中文/10.0 文字图制作v1.5.5 安卓版 17.84 MB/中文/10.0 https://www.itmop.com/downinfo/428243.html
17.小程序上下滑动页面时canvas绘制的图出现抖动的情况刚做好了一个需求,但是做测试的时候发现,出现小程序上下滑动页面时canvas绘制的图出现抖动的情况 网上一大堆答案,基本都是解决点击canvas滑动时,不允许下面的页面一起跟着滑动,但是我要的效果是,我不管点击canvas也好,还是点击页面其他地方也好,是可以滑动的,并且canvas不出现抖动的情况 红色选中的部分,是canvas画的,在https://www.pianshen.com/article/95801402011/
18.canvas画数字51CTO博客canvas画数字 1HTML先写一个div给个ID名字 <canvas id="mycanvas"></canvas> 2js中获取元素 var myCanvas = document.getElementById('mycanvas'); 3设置宽度和高度 myCanvas.width = document.documentElement.clientWidth; myCanvas.height = document.documentElement.clientHeight;https://blog.51cto.com/u_12569357/1898875
19.canvas实现百度地图个性化底图绘制H5之家##百度地图底图绘制技术现状 要想绘制上面所示的底图,目前现在主要有两类技术 栅格: 也就是传意义的图片技术,在server端把图片画好。浏览器使用 标签拼出来 矢量:在浏览器使用canvas技术,将矢量的数据,在浏览器完成渲染。它最大的问题在于:只支持高端浏览器 百度地图,目前两种技术都已经实现,如果大家使用的是mapapihttp://www.h5cn.com/html5/canvas/201728436.html
20.家彩至纯画写秘境佐敦涂料2024年全球流行趋势CANVAS「家中画记CANVAS「家中画记」一共23种色彩,向色彩艺术和科学致敬,包括灵感来源于自然元素的绿色系、天空和海洋的蓝色系和灰色系。其中大地色系和米色系营造出稳重踏实的感觉,而黄色系和金色系的颜色则代表活力与愉悦的感觉。 佐敦2024年流行色色彩一览 1376Mist / 薄雾– 温暖的中性色调,明亮且舒适。 https://www.jia360.com/new/238467.html
21.Vue和Canvas技术实现定制化视频播放器界面的方法准备动手了首先,你得先装上Vue的开发环境,它可是做饭的铁锅,没有这个可不行!接着,别忘了Canvas,那可是艺术家的画板,有这东西,啥技术都能施展出来。如果你对这两样东西还不熟悉的话,赶紧去他们的官网上好好学习一番! 二、搭个架子 好了么?那我们来搭个架子!只需要给HTML加点video和Canvas两个小元素就能搞定!https://www.icz.com/technicalinformation/web/2024/07/19774.html