美文网首页
第七节 SVG 滤镜 feComposite

第七节 SVG 滤镜 feComposite

作者: CODERLIHAO | 来源:发表于2020-04-06 15:09 被阅读0次
<svg width="330" height="195" viewBox="0 0 1100 650" version="1.1"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <title>Example feComposite - Examples of feComposite operations</title>
    <desc>Four rows of six pairs of overlapping triangles depicting
        the six different feComposite operators under different
        opacity values and different clearing of the background.</desc>
    <defs>
        <desc>Define two sets of six filters for each of the six compositing operators.
            The first set wipes out the background image by flooding with opaque white.
            The second set does not wipe out the background, with the result
            that the background sometimes shines through and is other cases
            is blended into itself (i.e., "double-counting").</desc>
        <filter id="overFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="over" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="inFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="in" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="outFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="out" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="atopFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="atop" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="xorFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="xor" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="arithmeticFlood" filterUnits="objectBoundingBox"
                x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" result="comp"
                         operator="arithmetic" k1=".5" k2=".5" k3=".5" k4=".5"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="overNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="over" result="comp"/>
        </filter>
        <filter id="inNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="in" result="comp"/>
        </filter>
        <filter id="outNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="out" result="comp"/>
        </filter>
        <filter id="atopNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="atop" result="comp"/>
        </filter>
        <filter id="xorNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="xor" result="comp"/>
        </filter>
        <filter id="arithmeticNoFlood" filterUnits="objectBoundingBox"
                x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" result="comp"
                         operator="arithmetic" k1=".5" k2=".5" k3=".5" k4=".5"/>
        </filter>
        <path id="Blue100" d="M 0 0 L 100 0 L 100 100 z" fill="#00ffff" />
        <path id="Red100" d="M 0 0 L 0 100 L 100 0 z" fill="#ff00ff" />
        <path id="Blue50" d="M 0 125 L 100 125 L 100 225 z" fill="#00ffff" fill-opacity=".5" />
        <path id="Red50" d="M 0 125 L 0 225 L 100 125 z" fill="#ff00ff" fill-opacity=".5" />
        <g id="TwoBlueTriangles">
            <use xlink:href="#Blue100"/>
            <use xlink:href="#Blue50"/>
        </g>
        <g id="BlueTriangles">
            <use transform="translate(275,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(400,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(525,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(650,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(775,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(900,25)" xlink:href="#TwoBlueTriangles"/>
        </g>
    </defs>

    <rect fill="none" stroke="blue" x="1" y="1" width="1098" height="648"/>
    <g font-family="Verdana" font-size="40" shape-rendering="crispEdges">
        <desc>Render the examples using the filters that draw on top of
            an opaque white surface, thus obliterating the background.</desc>
        <g enable-background="new">
            <text x="15" y="75">opacity 1.0</text>
            <text x="15" y="115" font-size="27">(with feFlood)</text>
            <text x="15" y="200">opacity 0.5</text>
            <text x="15" y="240" font-size="27">(with feFlood)</text>
            <use xlink:href="#BlueTriangles"/>
            <g transform="translate(275,25)">
                <use xlink:href="#Red100" filter="url(#overFlood)" />
                <use xlink:href="#Red50" filter="url(#overFlood)" />
                <text x="5" y="275">over</text>
            </g>
            <g transform="translate(400,25)">
                <use xlink:href="#Red100" filter="url(#inFlood)" />
                <use xlink:href="#Red50" filter="url(#inFlood)" />
                <text x="35" y="275">in</text>
            </g>
            <g transform="translate(525,25)">
                <use xlink:href="#Red100" filter="url(#outFlood)" />
                <use xlink:href="#Red50" filter="url(#outFlood)" />
                <text x="15" y="275">out</text>
            </g>
            <g transform="translate(650,25)">
                <use xlink:href="#Red100" filter="url(#atopFlood)" />
                <use xlink:href="#Red50" filter="url(#atopFlood)" />
                <text x="10" y="275">atop</text>
            </g>
            <g transform="translate(775,25)">
                <use xlink:href="#Red100" filter="url(#xorFlood)" />
                <use xlink:href="#Red50" filter="url(#xorFlood)" />
                <text x="15" y="275">xor</text>
            </g>
            <g transform="translate(900,25)">
                <use xlink:href="#Red100" filter="url(#arithmeticFlood)" />
                <use xlink:href="#Red50" filter="url(#arithmeticFlood)" />
                <text x="-25" y="275">arithmetic</text>
            </g>
        </g>
        <g transform="translate(0,325)" enable-background="new">
            <desc>Render the examples using the filters that do not obliterate
                the background, thus sometimes causing the background to continue
                to appear in some cases, and in other cases the background
                image blends into itself ("double-counting").</desc>
            <text x="15" y="75">opacity 1.0</text>
            <text x="15" y="115" font-size="27">(without feFlood)</text>
            <text x="15" y="200">opacity 0.5</text>
            <text x="15" y="240" font-size="27">(without feFlood)</text>
            <use xlink:href="#BlueTriangles"/>
            <g transform="translate(275,25)">
                <use xlink:href="#Red100" filter="url(#overNoFlood)" />
                <use xlink:href="#Red50" filter="url(#overNoFlood)" />
                <text x="5" y="275">over</text>
            </g>
            <g transform="translate(400,25)">
                <use xlink:href="#Red100" filter="url(#inNoFlood)" />
                <use xlink:href="#Red50" filter="url(#inNoFlood)" />
                <text x="35" y="275">in</text>
            </g>
            <g transform="translate(525,25)">
                <use xlink:href="#Red100" filter="url(#outNoFlood)" />
                <use xlink:href="#Red50" filter="url(#outNoFlood)" />
                <text x="15" y="275">out</text>
            </g>
            <g transform="translate(650,25)">
                <use xlink:href="#Red100" filter="url(#atopNoFlood)" />
                <use xlink:href="#Red50" filter="url(#atopNoFlood)" />
                <text x="10" y="275">atop</text>
            </g>
            <g transform="translate(775,25)">
                <use xlink:href="#Red100" filter="url(#xorNoFlood)" />
                <use xlink:href="#Red50" filter="url(#xorNoFlood)" />
                <text x="15" y="275">xor</text>
            </g>
            <g transform="translate(900,25)">
                <use xlink:href="#Red100" filter="url(#arithmeticNoFlood)" />
                <use xlink:href="#Red50" filter="url(#arithmeticNoFlood)" />
                <text x="-25" y="275">arithmetic</text>
            </g>
        </g>
    </g>
</svg>
image.png image.png

参考
https://www.w3.org/TR/SVG11/filters.html#feCompositeElement
http://www.graphicalweb.org/2005/papers/abstractsvgopen/index.html#porterduff

相关文章

  • 第七节 SVG 滤镜 feComposite

    参考https://www.w3.org/TR/SVG11/filters.html#feCompositeEle...

  • SVG 滤镜

    本节我们学习 SVG 中滤镜,SVG 滤镜是滤镜中的一个类型,用来向形状和文本添加特殊的效果。 SVG的可用滤镜 ...

  • SVG 滤镜

    SVG 滤镜用来向形状和文本添加特殊的效果。 在 SVG 中,可用的滤镜有: feBlend feColorMat...

  • 第一章 d3基础概念

    svg基础 滤镜 渐变

  • SVG 滤镜

    http://www.w3cplus.com/svg/why-the-svg-filter-is-awesome....

  • SVG滤镜:feColorMatrix

    颜色滤镜就是用来对原图的每个像素点的RGBA颜色进行处理生产新的RGBA颜色.元素通常有两个属性:type和val...

  • SVG 滤镜feImage

    primitiveUnits userSpaceOnUse如果primitiveUnits属性未指定,那么效果就如...

  • 使用SVG Filter 制作粘滞(Gooey)的效果笔记思路

    学习前提知识: 1. SVG滤镜 2. 颜色矩阵滤镜 ColorMatrix 2.1 矩阵 你需要知道矩阵之间是如...

  • SVG基础之内部元素

    说明:SVG概念,元素样式设置等请查看SVG基础 目录 图形元素 文字元素 特殊元素 滤镜元素【需完善】 渐变元素...

  • svg滤镜---颜色矩阵

    ColorMatrixFilter色彩矩阵滤镜; 包 flash.filters类 public final cl...

网友评论

      本文标题:第七节 SVG 滤镜 feComposite

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