svg anti-blur shape-rendering 存在的问题

对于直线一般是希望浏览器关闭反锯齿 而圆这类的则希望平滑,在svg中提供了 shape-rendering参数来控制浏览器渲染方式,但是在实际有些应用场景下却不起作用。
反锯齿似的颜色和像素都进行了平滑

stroke-width为1piexl 时加shape-rendering="crispEdges"可以关闭反锯齿

<line x1="0" y1="0" x2="0" y2="200" stroke-width="1" shape-rendering="crispEdges"></line>

在一个带viewBox、filter等复杂的SVG上却发现只有fireFox保持了1个像素的宽度,说明设置并没有对浏览器起作用。fireFox起效果的原因只是在于其对X和Y轴方向采用的策略。
一种方法是在svg root加 参数,但这会影响整个svg
另一种是在viewBox上x,y各自添加0.5 , 但是该方法也不能解决存在viewBox和 svg原始大小不一致情况下的反锯齿问题。
在stackoverflow 上找到的http://jsbin.com/aritem/4/edit?html,js,output

image.png
<style>svg { margin-bottom:5px; border:1px solid #ccc; } </style>

<!-- example 1 tweak viewBox's origin and size //-->

<svg width="450" height="230" viewBox="-0.5 -0.5 451 231">
  <!-- straight line //-->
  <path d="M 100 79 l -56 0 " stroke="rgba(0,0,0,1)" stroke-width="1"></path>
  <!-- rect(s) //-->
  <path d="M 215 122 l 204.95 0 l 0 89 l -316.95 0 l 0 -89 l 64 0 M 167 122 l 0 -40 l 48 0 l 0 40 M 215 122 l 0 45 l -48 0 l 0 -45" fill="rgba(0,0,0,0)" stroke="blue"stroke-width="1"></path>
  <!-- rounded 10px line //-->
  <path d="M 40 39 l 339.95 0" stroke="red" stroke-width="10"></path> 
</svg>

<!-- example 2 tweak viewBox's origin //-->

<svg width="450" height="230" viewBox="-0.5 -0.5 450 230">
  <!-- straight line //-->
  <path d="M 100 79 l -56 0 " stroke="rgba(0,0,0,1)" stroke-width="1"></path>
  <!-- rect(s) //-->
  <path d="M 215 122 l 204.95 0 l 0 89 l -316.95 0 l 0 -89 l 64 0 M 167 122 l 0 -40 l 48 0 l 0 40 M 215 122 l 0 45 l -48 0 l 0 -45" fill="rgba(0,0,0,0)" stroke="blue"stroke-width="1"></path>
  <!-- rounded 10px line //-->
  <path d="M 40 39 l 339.95 0" stroke="red" stroke-width="10"></path> 
</svg>

<!-- example 3 round moveTo commands and stroke-width //-->

<svg width="450" height="230">
  <!-- straight line //-->
  <path d="M 100.5 79.5 l -56 0 " stroke="rgba(0,0,0,1)" stroke-width="1"></path>
  <!-- rect(s) //-->
  <path d="M 215.5 122.5 l 204.95 0 l 0 89 l -316.95 0 l 0 -89 l 64 0 M 167.5 122.5 l 0 -40 l 48 0 l 0 40 M 215.5 122.5 l 0 45 l -48 0 l 0 -45" fill="rgba(0,0,0,0)" stroke="blue"stroke-width="1"></path>
  <!-- rounded 10px line //-->
  <path d="M 40.5 39.5 l 339.95 0" stroke="red" stroke-width="10.5"></path> 
</svg>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 转载请声明 原文链接 关注公众号获取更多资讯 这篇文章主要总结H5的一些新增的功能以及一些基础归纳,这里只是一个提...
    前端进阶之旅阅读 12,966评论 22 225
  • 一:什么是SVG? 对于SVG的定义如下: ①:SVG 指的是可伸缩矢量图形 (Scalable Vector G...
    GreenHand1阅读 4,288评论 0 1
  • 请参看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon阅读 12,159评论 2 19
  • 这篇文章是一个名为Web和界面设计与矢量系列的一部分。 创建一组光面标签并将其保存为Web 快速提示:如何使用外观...
    平面设计知识库阅读 9,107评论 0 9
  • 七里香肆意渲染 整个山谷浸润在馥郁的花香里 我沿小路过来 如一粒石子惊碎了平静的湖面 凝滞的气息开始流动 我的脸上...
    流浪猫70s阅读 2,540评论 0 2

友情链接更多精彩内容