2017-05-16 8 views
2

フィルタは透過性のある画像に適用されます。私は、このフィルタを不透明な領域にのみ適用する必要があります。言い換えれば、アルファはゼロではないと思います。この例では、現在透過領域が洪水の色で満たされていることがわかります。それは可能でしょうか?SVGフィルタは、不透明領域にのみフィルタを適用します。

svg { 
 
    width: 0; 
 
    height: 0; 
 
} 
 
.myFilter { 
 
    filter: url(#myFilter); 
 
}
<svg> 
 
    <defs> 
 
    <filter id="myFilter" x="0" y="0" width="100%" height="100%" 
 
      color-interpolation-filters="sRGB"> 
 
     <feFlood flood-color="#3a0339" result="flood"/> 
 
     <feBlend mode="exclusion" in="flood" in2="SourceGraphic"/> 
 
    </filter> 
 
    </defs> 
 
</svg> 
 

 
<img class="myFilter" src="https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png">

+0

feBlendはありません「除外」をサポートしていません - 通常の、乗算、画面、ライトのみn&darken。 (あなたはハードライトとソフトライトをより多くの作業で模倣することもできます) –

+0

@MichaelMullany実際には、あなたは自分でサンプルを実行できます。これをチェックしてくださいhttp://stackoverflow.com/questions/43991821/svg-filter-simulate-blending-mode –

+0

はい - これは私にとってはニュースでした!フィルタ1.0の詳細を見るのが大好きで、ブラウザにも反映されます:) –

答えて

2

あなたはfloodフィルタの出力にソースグラフィックのアルファチャネルを適用するfeCompositeノードを使用することができます。

svg { 
 
    width: 0; 
 
    height: 0; 
 
} 
 
.myFilter { 
 
    filter: url(#myFilter); 
 
}
<svg> 
 
    <defs> 
 
    <filter id="myFilter" x="0" y="0" width="100%" height="100%" 
 
      color-interpolation-filters="sRGB"> 
 
     <feFlood flood-color="#3a0339" result="flood"/> 
 
     <feComposite in="flood" in2="SourceAlpha" operator="in" result="flood_alpha"/> 
 
     <feBlend mode="exclusion" in="flood_alpha" in2="SourceGraphic"/> 
 
    </filter> 
 
    </defs> 
 
</svg> 
 

 
<img class="myFilter" src="https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png">

+1

「feComposite」ノードではなく、feBlendノードではないと思うのですが、それはあなたが書いたコードの内容です。 SVG 1.1では、feBlendは "除外"をサポートしていません - 普通の、乗算された、画面の、明るく暗くしかありません。その他のモードは、Web Filters 1.0仕様の一部として追加されています。まだクロスブラウザーではありません。 –

+0

@MichaelMullany申し訳ありません。私の間違い。 –

関連する問題