【问题标题】:Why does SVG feColorMatrix + <use xlink:href="#"/> result in a clipped path?为什么 SVG feColorMatrix + <use xlink:href="#"/> 会导致剪切路径?
【发布时间】:2017-06-25 04:13:17
【问题描述】:

当我在元素上使用过滤器时,为什么从该部分引用的形状看起来不同(剪辑!)?

  • 白色星星显示正确(“尖”角)
  • 但是棕色(过滤)的星星被奇怪地剪掉了

代码片段:

    <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200">
        <filter id="colorScheme">
            <feColorMatrix in="SourceGraphic" type="matrix" color-interpolation-filters="sRGB"  values="0.5 0.0   0.0   0.0 0.0 0.0   0.3 0.0   0.0 0.0 0.0   0.0   0.0   0.0 0.0 0.0   0.0   0.0   1.0 0.0"/>
        </filter>
        <defs>
            <g id="shape_star">
                <path d="M 50.000001,16.850071 60.828477,38.790929 85.041657,42.309326 67.520845,59.387917 71.656934,83.503263 50,72.117556 28.343064,83.503262 32.479155,59.387917 14.958344,42.309324 39.171522,38.790929 Z"/>
            </g>
            <g id="img_star_active">
                <use xlink:href="#shape_star" style="stroke: #FFFFFF; stroke-width: 10; fill: #FFFFFF;"/>
            </g>
            <g id="img_star_inactive">
                <use xlink:href="#shape_star" style="stroke: #FFFFFF; stroke-width: 10; fill: none; "/>
            </g>
        </defs>
        <use xlink:href="#img_star_active" filter="url(#colorScheme)"/>
        <use xlink:href="#img_star_inactive" transform="translate(100,0)" filter="url(#colorScheme)"/>
        <use xlink:href="#img_star_active" transform="translate(0,100)" />
        <use xlink:href="#img_star_inactive" transform="translate(100,100)"/>
    </svg>

参见https://jsfiddle.net/kx2zjnec/3/的示例

【问题讨论】:

    标签: svg svg-filters


    【解决方案1】:

    过滤器结果是clipped 在相对于源图形的边界框描述的边界框,但在这种情况下显然不包括笔画宽度。我不得不承认我不明白为什么会发生这种情况,但解决方案很简单:提高过滤器区域的大小(1 是边界框的宽度/高度):

        <filter id="colorScheme" x="-0.2" y="-0.2" width="1.4" height="1.4">
            <feColorMatrix in="SourceGraphic" type="matrix" color-interpolation-filters="sRGB"  values="0.5 0.0   0.0   0.0 0.0 0.0   0.3 0.0   0.0 0.0 0.0   0.0   0.0   0.0 0.0 0.0   0.0   0.0   1.0 0.0"/>
        </filter>
    

    【讨论】:

    • 谢谢!这就像一个魅力。 (除了必须删除宽度和高度之间的逗号。)
    • 哎呀,这是从哪里来的?
    • 现在完美了:)
    • SVG 在计算边界框时不包括笔画宽度
    猜你喜欢
    • 2015-07-11
    • 2021-11-01
    • 2018-07-18
    • 2017-01-29
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2020-09-13
    • 2013-02-28
    相关资源
    最近更新 更多