您现在的位置是:网站首页> 编程资料编程资料
关于canvas绘制模糊问题的解决方法高清屏中使用Canvas绘图出现模糊的问题及解决方法深入了解canvas在移动端绘制模糊的问题解决HTML5 Canvas图像模糊完美解决办法html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2021-08-31
998人已围观
简介 这篇文章主要介绍了关于canvas绘制模糊问题的解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
模糊原因
首先,需要理解canvas的展示机制。
我绘制了一张375px的canvas,iphone6的宽度也是375px,ok,canvas铺满了整个屏幕。
那么canvas的大小就是375px,canvas类似于图片,一张375px的图片,我们就把它当做是图片来看就好了。我,尖沙咀段坤说的。
如果遇到了屏幕宽度400px的手机,那么图片会 拉伸,canvas也会拉伸,拉伸则必然会模糊。
那么iphone6确实是375px宽度的手机,还是会出现模糊问题,为什么呢?手机端会存在高清屏的问题。也就是我们说的2倍屏或者3倍屏,也叫作屏幕的DPI。高清屏在绘制界面时,会把2px的宽度渲染成1px,也就达到了高清的效果。也就是说,我们在高清屏下看到的375px其实是750个像素点绘制出来的,canvas其实是375px被拉伸到了750px再展示出来的,拉伸则必然会模糊。
好了,模糊的原因知道了,其实就是高清屏所带来的麻烦,怎么解决呢?
解决方法
如果是2倍屏,我们把设计图上375px的canvas画成750px不就解决了?
设置canvas样式
这里我们不写width和height,而直接写style。把它看成是图片,我们先不管图片原宽高是多少,不管拉伸还是压缩,直接让他铺满整个屏幕。style里写的宽高不是图片的原宽高,也就是style里写的宽高并不是canvas的真实宽高
设置canvas宽高
上面的style并不是canvas的真实宽高,那么我们如何设置它的宽高呢?
普通屏,2倍屏,3倍屏如果分别适配?
那么canvas的宽高就变成了下图这样,750宽度的canvas,如果你是2倍屏我就刚好能够适应!!!
![]()
设置后的宽高
开始画点
比如,375的设计图上,有一个半径为2px的圆点,点的位置是x:100,y:100。
那么我们现在canvas的宽度是750,宽高变成了之前的2倍。为了视觉上位置保持不变,我们画点的位置就应该是x:100*pixelRatio,y:100*pixelRatio。
完整代码如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关内容
- html svg生成环形进度条的实现方法HTML5超炫酷粒子效果的进度条的实现示例HTML5触摸事件实现移动端简易进度条的实现方法HTML5实现自带进度条和滑块滑杆效果网页加载进度条详解(推荐)HTML页面缩小后显示滚动条的示例代码
- html2 canvas生成清晰的图片实现打印功能html2canvas生成的图片偏移不完整的解决方法html2canvas截图空白问题的解决使用html2canvas实现将html内容写入到canvas中生成图片html2canvas.js 实现页面截图html2 canvas svg不能识别的解决方案
- 将SVG图引入到HTML页面的实现HTML5如何使用SVG的方法示例Html5之svg可缩放矢量图形_动力节点Java学院整理使用HTML5进行SVG矢量图形绘制的入门教程深入浅析HTML5中的SVGhtml5+svg学习指南之SVG基础知识html5中svg canvas和图片之间相互转化思路代码HTML中使用SVG与SVG预定义形状元素介绍
- 解析浏览器的一些“滚动”行为鉴赏 CSS3改变浏览器滚动条样式纯css修改浏览器scrollbar滚动条样式示例纯CSS改变webkit内核浏览器的滚动条样式强制显示、隐藏(IE\Mozilla)浏览器的滚动条实现代码CSS自定义WebKit内核浏览器滚动条实现代码JS+CSS实现侧边栏跟随浏览器滚动效果FireFox火狐浏览器与IE兼容问题 - 透明滤镜 DIV滚动条
- html5移动端价格输入键盘的实现可能这些是你想要的H5软键盘兼容方案(小结)HTML5 虚拟键盘出现挡住输入框的解决办法利用HTML5 Canvas制作键盘及鼠标动画的实例分享HTML5 Canvas鼠标与键盘事件demo示例
- canvas生成带二维码海报的踩坑记录canvas实现二维码和图片合成的示例代码canvas 下载二维码和图片加水印的方法基于html5 canvas生成指定图案的js二维码插件qart.js基于HTML5 Canvas的纯JS二维码生成特效源码
- html5写一个BUI折叠菜单插件的实现方法HTML5在微信内置浏览器下右上角菜单的调整字体导致页面显示错乱的问题HTML5单选框、复选框、下拉菜单、文本域的实现代码Html+Css+Jquery实现左侧滑动拉伸导航菜单栏的示例代码html滑动仿悬浮球菜单效果的实现
- html5借用repeating-linear-gradient实现一把刻度尺(ruler)js实现移动端H5页面手指滑动刻度尺功能
- 做一个能自适应高度的textarea的示例代码如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度textarea文本域宽度和高度width及height自动适应实现代码div模拟textarea文本域实现高度自适应效果代码css textarea 高度自适应,无滚动条
- 3种方式实现瀑布流布局小结详解纯css实现瀑布流(multi-column多列及flex布局)css3 column实现卡片瀑布流布局的示例代码用CSS3实现瀑布流布局的示例代码CSS3实现瀑布流布局与无限加载图片相册的实例代码瀑布流布局的两种实现方式:传统多列浮动和绝对定位布局waterfall瀑布流布局+动态渲染的实现
