<feComposite>
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Das <feComposite>
SVG Filter-Primitive kombiniert zwei Eingabebilder pixelweise im Bildraum mit einer der Porter-Duff-Kompositionsoperationen: over
, in
, atop
, out
, xor
, lighter
oder arithmetic
.
Wie andere Filter-Primitives verarbeitet es Farbkomponenten standardmäßig im linearRGB
Farbraum. Sie können color-interpolation-filters
verwenden, um stattdessen sRGB
zu verwenden.
Die folgende Tabelle zeigt jede dieser Operationen anhand eines Bildes des MDN-Logos, das mit einem roten Kreis kombiniert wird:
Operation | Beschreibung |
---|---|
over |
Die durch das in Attribut definierte Quellgrafik
(das MDN-Logo) wird über die durch das
in2 Attribut definierte Zielgrafik (der Kreis) gelegt.
Dies ist die Standardoperation, die verwendet wird, wenn keine Operation oder eine nicht unterstützte Operation angegeben wird. |
in |
Die Teile der durch das in Attribut definierten Quellgrafik,
die die im in2 Attribut definierte Zielgrafik überlappen,
ersetzen die Zielgrafik.
|
out |
Die Teile der durch das in Attribut definierten Quellgrafik,
die außerhalb der im in2 Attribut definierten Zielgrafik liegen,
werden angezeigt.
|
atop |
Die Teile der durch das in Attribut definierten Quellgrafik,
die die im in2 Attribut definierte Zielgrafik überlappen,
ersetzen die Zielgrafik. Die Teile der Zielgrafik, die nicht mit der
Quellgrafik überlappen, bleiben unberührt.
|
xor |
Die nicht überlappenden Bereiche der durch das in Attribut
definierten Quellgrafik und der im in2 Attribut definierten
Zielgrafik werden kombiniert.
|
lighter |
Die Summe der durch das in Attribut definierten Quellgrafik
und der im in2 Attribut definierten Zielgrafik wird angezeigt.
|
arithmetic
|
Die result = k1*i1*i2 + k2*i1 + k3*i2 + k4 wobei: |
Verwendungskontext
Attribute
in
: Erste Eingabe für das gegebene Filter-Primitive.in2
: Zweite Eingabe für das gegebene Filter-Primitive (funktioniert genauso wie dasin
Attribut).operator
:over
|in
|out
|atop
|xor
|lighter
|arithmetic
k1
,k2
,k3
,k4
: Werte, die für die Berechnung des Ergebnispixels imarithmetic
operator
Filter-Primitive verwendet werden.
DOM-Schnittstelle
Dieses Element implementiert die SVGFECompositeElement
Schnittstelle.
Beispiel
Dieses Beispiel definiert Filter für jede der unterstützten Operationen (over
, atop
, lighter
, usw.), die eine Eingabe SourceGraphic
mit einem Bild des MDN-Logos kombinieren. Die Filter werden jeweils auf ein Kreiselement angewendet, das dann als SourceGraphic
verwendet wird.
Note:
BackgroundImage
kann in modernen Browsern nicht als Kompositionsquelle verwendet werden, daher können wir keinen Filter definieren, der unter der Annahme-Ebene liegende Pixel als eine der Quellen verwendet. Der hier angewandte Ansatz ist ein Workaround, da wirBackgroundImage
nicht verwenden können.
SVG
<svg
style="width:800px; height:400px; display: inline;"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<filter id="imageOver">
<feImage href="mdn_logo_only_color.png" x="10px" y="10px" width="160px" />
<feComposite in2="SourceGraphic" operator="over" />
</filter>
<filter id="imageIn">
<feImage href="mdn_logo_only_color.png" x="10px" y="10px" width="160px" />
<feComposite in2="SourceGraphic" operator="in" />
</filter>
<filter id="imageOut">
<feImage href="mdn_logo_only_color.png" x="10px" y="10px" width="160px" />
<feComposite in2="SourceGraphic" operator="out" />
</filter>
<filter id="imageAtop">
<feImage href="mdn_logo_only_color.png" x="10px" y="10px" width="160px" />
<feComposite in2="SourceGraphic" operator="atop" />
</filter>
<filter id="imageXor">
<feImage href="mdn_logo_only_color.png" x="10px" y="10px" width="160px" />
<feComposite in2="SourceGraphic" operator="xor" />
</filter>
<filter id="imageArithmetic">
<feImage href="mdn_logo_only_color.png" x="10px" y="10px" width="160px" />
<feComposite
in2="SourceGraphic"
operator="arithmetic"
k1="0.1"
k2="0.2"
k3="0.3"
k4="0.4" />
</filter>
<filter id="imageLighter">
<feImage href="mdn_logo_only_color.png" x="10px" y="10px" width="160px" />
<feComposite in2="SourceGraphic" operator="lighter" />
</filter>
</defs>
<g transform="translate(0,25)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#c00"
style="filter:url(#imageOver)" />
<text x="80" y="-5">over</text>
</g>
<g transform="translate(200,25)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#c00"
style="filter:url(#imageIn)" />
<text x="80" y="-5">in</text>
</g>
<g transform="translate(400,25)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#c00"
style="filter:url(#imageOut)" />
<text x="80" y="-5">out</text>
</g>
<g transform="translate(600,25)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#c00"
style="filter:url(#imageAtop)" />
<text x="80" y="-5">atop</text>
</g>
<g transform="translate(0,240)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#c00"
style="filter:url(#imageXor)" />
<text x="80" y="-5">xor</text>
</g>
<g transform="translate(200,240)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#c00"
style="filter:url(#imageArithmetic)" />
<text x="70" y="-5">arithmetic</text>
</g>
<g transform="translate(400,240)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#c00"
style="filter:url(#imageLighter)" />
<text x="80" y="-5">lighter</text>
</g>
</svg>
Ergebnis
Spezifikationen
Specification |
---|
Filter Effects Module Level 1 # feCompositeElement |
Browser-Kompatibilität
Siehe auch
- SVG-Filter-Primitiv-Attribute
<filter>
<animate>
<set>
<feBlend>
<feColorMatrix>
<feComponentTransfer>
<feConvolveMatrix>
<feDiffuseLighting>
<feDisplacementMap>
<feFlood>
<feGaussianBlur>
<feImage>
<feMerge>
<feMorphology>
<feOffset>
<feSpecularLighting>
<feTile>
<feTurbulence>
- SVG Tutorial: Filtereffekte