2017-05-15 22 views
0

SVGフィルタが動作している様子を、私は別の結果が予想されるときには理解できません。ここで はフィルタコードです:サイズが100%のSVGフィルタが正しくサイズ変更されていない

<svg> 
<defs> 
<filter id="myFilter"> <feFlood result="floodFill" x="0" y="0" width="100%" height="100%" flood-color="green" flood-opacity="1"></feFlood> 
<feBlend in="SourceGraphic" in2="floodFill" mode="multiply"></feBlend> </filter> 
</defs> 
</svg> 

私がイメージにこの方法を適用する:

<img style="filter: url(#myFilter);" src="https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png"> 

私はこれを参照することを期待:

enter image description here

をしかし、私は実際にこれを参照してください。

enter image description here

元画像はこれです:

enter image description here

なぜこれが起こっている、誰かが説明していただけますか?

答えて

2

クロムでは、少なくとも、フラッディングプリミティブ100%は、含まれるSVG要素のデフォルトサイズの100%として計算されます(明示的にディメンション化されていない場合は300px x 150px - すべてのHTMLのデフォルトサイズimg、object、iframeなどの要素が置き換えられました。

feFloodからサイジングを削除すると、フィルタリングされた要素の領域に+ 10%のオーバーフロー(デフォルトのフィルタ領域)が適用されます。オーバーフローを取り除きたい場合は、フィルタのサイズを明示的に指定する必要があります。

(これはFirefoxでも機能しますが、EdgeはCSSフィルタをサポートしていないので、Edgeで動作させたい場合は、SVG <image>タグを使用して画像をSVG本体に移動し、属性。)

<svg> 
 
<defs> 
 
<filter id="myFilter" x="0%" y="0%" width="100%" height="100%"> 
 
    <feFlood result="floodFill" flood-color="green" flood-opacity="1"> 
 
    </feFlood> 
 
<feBlend in="SourceGraphic" in2="floodFill" mode="multiply"></feBlend> </filter> 
 
</defs> 
 
</svg> 
 

 
<img style="filter: url(#myFilter);" src="https://mdn.mozillademos.org/files/6457/mdn_logo_only_color.png">

+0

良い点。しかし、私はまだそれがいくつかの意図やマージンを持っているように、イメージ空間から出て行く浸水層を見ることができます。そこには何がありますか?サイジングを指定するかどうかは関係ありません –

+1

フィルタにはデフォルトで10%のオーバーフローがあります。明示的にx/y/width/heightを追加することで元のボックスに制約を付けることができます。これは私が今追加したものです。 –

関連する問題