美文网首页WEB前端开发技术杂谈
canvas画布解决1px线条模糊问题

canvas画布解决1px线条模糊问题

作者: 传奇狗 | 来源:发表于2017-11-30 16:13 被阅读15次

首先我们要了解这几个属性,他们是用来设置线条样式的。

    lineWidth = value    设置将来绘制的线条的宽度。

    lineCap = type    设置行尾的外观。

    lineJoin = type    设置线条相交处“拐角”的外观。

    miterLimit = value    当两条直线以锐角连接时,建立一个尖角的限制,让您控制交界处变厚的程度。

    getLineDash()    返回包含偶数个非负数的当前行破折号模式数组。

    setLineDash(segments)    设置当前的线条样式。

    lineDashOffset = value    指定在一条线上开始一个破折号阵列的位置。

用来设置线条宽度的属性就是上面的lineWidth = value

    首先我们要了解物理像素在屏幕上是以网格的形式出现的,如下图所示。如果我们填充(2,1)到(5,5)的矩形,它们之间的整个区域(浅红色)落在像素边界上,所以得到的填充矩形将具有清晰的边缘。

    但是,如果我们设置1px的线条,画在(3,1)到(3,5)的坐标上,则可以得到第二个图像中的情况。实际要填充的区域(深蓝色)仅延伸到路径任一侧的像素的一半。必须渲染一个近似值,这意味着这些像素只是部分阴影,并导致整个区域(浅蓝色和深蓝色)填充的颜色只有实际笔触颜色的一半。1.0前面的示例代码中的宽度线会发生这种情况。

像素块

    为了解决这个问题,你必须在创建路径时非常精确。知道1.0宽度线将延伸半个单位到路径的任一侧,创建从(3.5,1)到(3.5,5)的路径导致第三个图像中的情况 -1.0线宽完全并精确地填充一个像素的垂直线。

    我们用实际例子来看一看:

在canvas上画一条1px宽度的线条

代码如下:

var canvas = document.getElementById('tutorial17');

if (canvas.getContext) {

        var ctx = canvas.getContext('2d');

        ctx.lineWidth = 1;

        ctx.beginPath();

        ctx.moveTo(55.5, 5);

        ctx.lineTo(55.5, 140);

        ctx.stroke();

}else{

        console.log('浏览器不支持canvas')

}

效果图如下:

这是定位到半像素的时候,无模糊感

VS:

1px线条定位到,整像素坐标上

效果图如下:

出现模糊

        总结:以上就是解决1像素宽度的线条带来的模糊,解决办法是在定位的时候平移半个像素就可以。但是:对于宽度较宽的线条,每一半都是像素的整数,所以您需要一个位于像素之间(即(3,1)到(3,5))的路径,而不是像素的中间。

相关文章

  • canvas画布解决1px线条模糊问题

    首先我们要了解这几个属性,他们是用来设置线条样式的。 lineWidth = value 设置将来绘制的线条的宽...

  • 前端开发常见问题精选(二)

    一、如何解决Canvas画布在移动端显示模糊的问题? Canvas画布在PC端显示正常,但是放在移动端却发现整个画...

  • canvas

    一、线条画完后,线条显示模糊 原因:html的x,y与canvas的x,y不对应,对应到画布上被拉伸了,对应的画布...

  • canvas学习

    1.创建画布: 您的浏览器不支持 HTML5 canvas 标签。 2.画线条 const canvas = do...

  • 2022-06-14 Canvas画布模糊问题

    【重要】view大小(属性值决定最终上屏时的缩放比例) 画布bufffer大小 gl.viewPort视...

  • canvas模糊解决

    这个是以前开发小程序的时候常见的问题原因是因为移动端的DPR比较高 最近有个同事的PC也是模糊的,他的device...

  • Android-UI控件

    手摸手教你写 Slack 的 Loading 动画 四步实现:画布旋转及线条变化动画(Canvas Rotate ...

  • 可视化基础

    画布元素 canvash5新增canvas地址 浏览器的坐标 直线 三角形 改变线条颜色 改变每根线条的颜色, 重...

  • 2017.12.11

    Canvas 画布

  • Canvas

    第1章 画布元素的使用 第1节 绘制线条 画布的作用Canvas 元素作为HTML5标准的一部分,允许你通过脚本动...

网友评论

    本文标题:canvas画布解决1px线条模糊问题

    本文链接:https://www.haomeiwen.com/subject/nxwvbxtx.html