【问题标题】:Additive alpha blending with masks加法 alpha 与蒙版混合
【发布时间】:2014-10-27 01:51:30
【问题描述】:

我想创建在黑暗中发光的错觉,在示例中,我有两个相互叠加的矩形蒙版,但正如您所见,存在 alpha 混合问题。有没有办法将 2 个蒙版矩形合并在一起?

将鼠标悬停在 codepen 链接上的窗口上以了解我的意思。

<svg width="976" height="549" xmlns="http://www.w3.org/2000/svg">
    <defs>
        <radialGradient id="lightsource">
            <stop offset="0%" stop-color="black" />
            <stop offset="50%" stop-color="black" />
            <stop offset="100%" stop-color="white" />
        </radialGradient>
        <mask id="mask1" x="0" y="0" width="976" height="549">
        <rect x="0" y="0" width="976" height="549" fill="white" />
        <ellipse ry="60" rx="64" id="svg_1" cy="122.5" cx="101.5" stroke-width="none" fill="url(#lightsource)"/>
        <ellipse ry="60" rx="64" id="svg_2" cy="175.5" cx="216" stroke-width="none" fill="url(#lightsource)"/>
        </mask>
    </defs>
    <g>
        <rect x="0" y="0" id="cool" width="976" height="549" mask="url(#mask1)" fill="black" />
    </g>
</svg>

http://codepen.io/anon/pen/cFAqx

【问题讨论】:

    标签: jquery html svg svg-filters


    【解决方案1】:

    是的,只需使用 &lt;feBlend&gt; 过滤器。在这种情况下,将同一个渐变蒙版的两个副本在正负 X 方向偏移后混合会更有意义。

    <defs>
      <radialGradient id="lightsource">
        <stop offset="0%" stop-color="black" />
        <stop offset="50%" stop-color="black" />
        <stop offset="100%" stop-color="white" />
      </radialGradient>
      <mask id="mask1" x="0" y="0" width="976" height="549">
        <rect x="0" y="0" width="976" height="549" fill="white" />
        <ellipse filter="url(#f1)" ry="60" rx="64" id="svg" cy="122.5" cx="101.5" stroke-width="none" fill="url(#lightsource)"/>
      </mask>
      <filter id="f1" x="-100%" y="0" width="300%" height="100%">
        <feOffset result="light1" in="SourceGraphic" dx="-50" dy="0" />
        <feOffset result="light2" in="SourceGraphic" dx="50" dy="0" />
        <feBlend in="light1" in2="light2" mode="darken" />
      </filter>
    </defs>
    

    在这里,&lt;filter&gt; 元素创建了椭圆的两个副本,并将它们与darken 过滤器组合在一起。我已经更新了您的 codepen 以显示它可以正常工作:http://codepen.io/anon/pen/LtcIj

    编辑:实际上,multiply 混合可能会更好看。

    【讨论】:

    • 这完全是答案,但在实验中,我打破了密码笔。我可以添加第三个光源图形吗?
    • 一个&lt;feBlend&gt; 元素只能接受两个输入,但您可以通过在其中添加一个result 属性并将其用作inin2 的属性来从一个输入到另一个其他。给你:codepen.io/anon/pen/DnEki
    • 我需要能够以编程方式将它们定位在背景上,但是如果你像这里jsfiddle.net/krazyjakee/Lyaa6894 那样移动一个,它可以移动多远而不会消失在黑暗中的宽度是有限的。过滤器大小有限制吗?
    • nvm,由于某种原因将过滤器的宽度和高度设置为“10”修复了这个...奇怪
    猜你喜欢
    • 2016-02-27
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2017-06-27
    相关资源
    最近更新 更多