<feComposite>
Базовый уровень Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с октября 2018 г..
Примитив фильтра <feComposite> SVG попиксельно комбинирует два входных изображения в пространстве изображения, используя одну из операций композитинга Портера — Даффа: over, in, atop, out, xor, lighter или arithmetic.
Как и другие примитивы фильтров, по умолчанию он обрабатывает компоненты цвета в цветовом пространстве linearRGB цветовом пространстве. Можно использовать color-interpolation-filters, чтобы вместо этого использовать sRGB.
В таблице ниже показана каждая из этих операций: изображение логотипа MDN скомпоновано с красным кругом:
| Операция | Описание |
|---|---|
| over | Исходная графика, заданная атрибутом in (логотип MDN), размещается поверх целевой графики, заданной атрибутом in2 (круга). Это операция по умолчанию, которая используется, если операция не указана или указана неподдерживаемая операция. |
| in | Часть исходной графики, заданной атрибутом in, которая перекрывает целевую графику, заданную атрибутом in2, заменяет целевую графику. |
| out | Отображаются части исходной графики, заданной атрибутом in, находящиеся за пределами целевой графики, заданной атрибутом in2. |
| atop | Части исходной графики, заданной атрибутом in и перекрывающие целевую графику, заданную атрибутом in2, заменяют целевую графику. Части целевой графики, не перекрывающиеся с исходной графикой, остаются без изменений. |
| xor | Объединяются неперекрывающиеся области исходной графики, заданной атрибутом in, и целевой графики, заданной атрибутом in2. |
| lighter | Отображается сумма исходной графики, заданной атрибутом in, и целевой графики, заданной атрибутом in2. |
| arithmetic | Операция result = k1*i1*i2 + k2*i1 + k3*i2 + k4 где: |
Контекст использования
Атрибуты
-
in: первый вход для данного примитива фильтра. -
in2: второй вход для данного примитива фильтра (работает так же, как атрибутin). -
operator:over|in|out|atop|xor|lighter|arithmetic -
k1,k2,k3,k4: значения, используемые для вычисления пикселя результата в примитивах фильтраarithmeticoperator.
Интерфейс DOM
Этот элемент реализует интерфейс SVGFECompositeElement.
Пример
В этом примере определены фильтры для каждой из поддерживаемых операций (over, atop, lighter и т. д.), которые композитно объединяют входной SourceGraphic с изображением логотипа MDN. Каждый фильтр применяется к элементу круга, который затем используется как SourceGraphic.
Примечание: BackgroundImage нельзя использовать в качестве источника композитинга в современных браузерах, поэтому мы не можем определить фильтр, который выполняет композитинг с пикселями, находящимися под фильтром, в качестве одного из источников. Приведённый здесь подход — это обходное решение, поскольку нельзя использовать BackgroundImage.
SVG
<svg
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="#cc0000"
filter="url(#imageOver)" />
<text x="80" y="-5">over</text>
</g>
<g transform="translate(200,25)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#cc0000"
filter="url(#imageIn)" />
<text x="80" y="-5">in</text>
</g>
<g transform="translate(400,25)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#cc0000"
filter="url(#imageOut)" />
<text x="80" y="-5">out</text>
</g>
<g transform="translate(600,25)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#cc0000"
filter="url(#imageAtop)" />
<text x="80" y="-5">atop</text>
</g>
<g transform="translate(0,240)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#cc0000"
filter="url(#imageXor)" />
<text x="80" y="-5">xor</text>
</g>
<g transform="translate(200,240)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#cc0000"
filter="url(#imageArithmetic)" />
<text x="70" y="-5">arithmetic</text>
</g>
<g transform="translate(400,240)">
<circle
cx="90px"
cy="80px"
r="70px"
fill="#cc0000"
filter="url(#imageLighter)" />
<text x="80" y="-5">lighter</text>
</g>
</svg>
Результат
Спецификации
| Спецификация |
|---|
| Filter Effects Module Level 1> # feCompositeElement> |
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari для iOS | Samsung Internet | WebView для Android | WebView для iOS | |
feComposite |
5 | ≤18 | 3 | ≤12.1 | 6 | 18 | 4 | ≤12.1 | 6 | 1.5 | 4.4 | 6 |
in |
5 | ≤18До Edge 79 поддерживалисьBackgroundImage и BackgroundAlpha. |
3 | 15 | 6 | 18 | 4 | 14 | 6 | 1.5 | 4.4 | 6 |
in2 |
5 | ≤18До Edge 79 поддерживалисьBackgroundImage и BackgroundAlpha. |
3 | 15 | 6 | 18 | 4 | 14 | 6 | 1.5 | 4.4 | 6 |
k1 |
5 | 79 | 3 | 15 | 6 | 18 | 4 | 14 | 6 | 1.5 | 4.4 | 6 |
k2 |
5 | 79 | 3 | 15 | 6 | 18 | 4 | 14 | 6 | 1.5 | 4.4 | 6 |
k3 |
5 | 79 | 3 | 15 | 6 | 18 | 4 | 14 | 6 | 1.5 | 4.4 | 6 |
k4 |
5 | 79 | 3 | 15 | 6 | 18 | 4 | 14 | 6 | 1.5 | 4.4 | 6 |
operator |
5 | ≤18 | 3 | 15 | 6 | 18 | 4 | 14 | 6 | 1.5 | 4.4 | 6 |
См. также
- Атрибуты примитивов фильтров SVG
<filter><animate><set><feBlend><feColorMatrix><feComponentTransfer><feConvolveMatrix><feDiffuseLighting><feDisplacementMap><feFlood><feGaussianBlur><feImage><feMerge><feMorphology><feOffset><feSpecularLighting><feTile><feTurbulence>- Учебник SVG: эффекты фильтров
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/SVG/Reference/Element/feComposite