Spec-Zone.ru › SVG

<feColorMatrix>

Базовая поддержка Широко доступно

Эта функция хорошо зарекомендовала себя и работает на множестве устройств и версий браузеров. Она доступна во всех браузерах с ⁨июля 2015 года⁩.

  • Подробнее
  • Полная таблица совместимости
  • Оставить отзыв

Элемент фильтра <feColorMatrix> SVG изменяет цвета на основе матрицы преобразования. Значение цвета каждого пикселя [R,G,B,A] умножается на цветовую матрицу размером 5 на 5 с помощью матричного умножения, чтобы получить новые значения цвета [R',G',B',A'].

Примечание: Штрих ' используется в математике для обозначения результата преобразования.

| R' |     | r1 r2 r3 r4 r5 |   | R |
| G' |     | g1 g2 g3 g4 g5 |   | G |
| B' |  =  | b1 b2 b3 b4 b5 | * | B |
| A' |     | a1 a2 a3 a4 a5 |   | A |
| 1  |     | 0  0  0  0  1  |   | 1 |

В упрощённом виде каждый цветовой канал нового пикселя вычисляется следующим образом. Последняя строка игнорируется, поскольку её значения постоянны.

R' = r1*R + r2*G + r3*B + r4*A + r5
G' = g1*R + g2*G + g3*B + g4*A + g5
B' = b1*R + b2*G + b3*B + b4*A + b5
A' = a1*R + a2*G + a3*B + a4*A + a5

Рассмотрим количество красного в новом пикселе, или R':

Оно равно сумме:

  • r1, умноженного на количество красного в старом пикселе R,
  • r2, умноженного на количество зелёного в старом пикселе G,
  • r3, умноженного на количество синего в старом пикселе B,
  • r4, умноженного на альфа-канал старого пикселя A,
  • и смещения r5.

Указанные значения могут быть любыми действительными числами, однако итоговое значение R' будет ограничено диапазоном от 0 до 1. То же относится к G', B' и A'.

R'      =      r1 * R      +        r2 * G      +       r3 * B      +       r4 * A       +       r5
New red = [ r1 * old red ] + [ r2 * old green ] + [ r3 * old Blue ] + [ r4 * old Alpha ] + [ shift of r5 ]

Например, если мы хотим сделать полностью чёрное изображение более красным, можно задать для r5 положительное действительное число x, увеличив красный канал каждого пикселя нового изображения на x.

Единичная матрица выглядит так:

     R G B A W
R' | 1 0 0 0 0 |
G' | 0 1 0 0 0 |
B' | 0 0 1 0 0 |
A' | 0 0 0 1 0 |

В ней каждое новое значение в точности равно старому значению, умноженному на 1, без каких-либо дополнительных слагаемых. Рекомендуется начинать изменение матрицы именно с этого значения.

Как и другие примитивы фильтра, этот элемент по умолчанию обрабатывает цветовые компоненты в linearRGB цветовом пространстве. Чтобы использовать sRGB, можно задать атрибут color-interpolation-filters.

Контекст использования

Категории Элемент-примитив фильтра
Допустимое содержимое Любое количество следующих элементов в любом порядке:
<animate>, <discard>, <set>

Атрибуты

  • in: Допустимые значения: SourceGraphic, SourceAlpha, BackgroundImage, BackgroundAlpha, FillPaint, StrokePaint или ссылка на другой примитив фильтра.
  • type: Допустимые значения: matrix, saturate, hueRotate и luminanceToAlpha.
  • values: Значение матрицы типа, заданного в атрибуте type.

Интерфейс DOM

Этот элемент реализует интерфейс SVGFEColorMatrixElement.

Пример

>

SVG

<svg
  width="100%"
  height="100%"
  viewBox="0 0 150 500"
  preserveAspectRatio="xMidYMid meet"
  xmlns="http://www.w3.org/2000/svg"
  xmlns:xlink="http://www.w3.org/1999/xlink">
  <!-- ref -->
  <defs>
    <g id="circles">
      <circle cx="30" cy="30" r="20" fill="blue" fill-opacity="0.5" />
      <circle cx="20" cy="50" r="20" fill="green" fill-opacity="0.5" />
      <circle cx="40" cy="50" r="20" fill="red" fill-opacity="0.5" />
    </g>
  </defs>
  <use href="#circles" />
  <text x="70" y="50">Reference</text>

  <!-- identity matrix -->
  <filter id="colorMeTheSame">
    <feColorMatrix
      in="SourceGraphic"
      type="matrix"
      values="1 0 0 0 0
              0 1 0 0 0
              0 0 1 0 0
              0 0 0 1 0" />
  </filter>
  <use
    href="#circles"
    transform="translate(0 70)"
    filter="url(#colorMeTheSame)" />
  <text x="70" y="120">Identity matrix</text>

  <!-- Combine RGB into green matrix -->
  <filter id="colorMeGreen">
    <feColorMatrix
      in="SourceGraphic"
      type="matrix"
      values="0 0 0 0 0
              1 1 1 1 0
              0 0 0 0 0
              0 0 0 1 0" />
  </filter>
  <use
    href="#circles"
    transform="translate(0 140)"
    filter="url(#colorMeGreen)" />
  <text x="70" y="190">rgbToGreen</text>

  <!-- saturate -->
  <filter id="colorMeSaturate">
    <feColorMatrix in="SourceGraphic" type="saturate" values="0.2" />
  </filter>
  <use
    href="#circles"
    transform="translate(0 210)"
    filter="url(#colorMeSaturate)" />
  <text x="70" y="260">saturate</text>

  <!-- hueRotate -->
  <filter id="colorMeHueRotate">
    <feColorMatrix in="SourceGraphic" type="hueRotate" values="180" />
  </filter>
  <use
    href="#circles"
    transform="translate(0 280)"
    filter="url(#colorMeHueRotate)" />
  <text x="70" y="330">hueRotate</text>

  <!-- luminanceToAlpha -->
  <filter id="colorMeLTA">
    <feColorMatrix in="SourceGraphic" type="luminanceToAlpha" />
  </filter>
  <use href="#circles" transform="translate(0 350)" filter="url(#colorMeLTA)" />
  <text x="70" y="400">luminanceToAlpha</text>
</svg>

Результат

Спецификации

Спецификация
Filter Effects Module Level 1>
# feColorMatrixElement>

Совместимость с браузерами

Компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari on IOS Samsung Internet WebView Android WebView on iOS
feColorMatrix 5 12 3 15 6 18 4 14 6 1.0 4.4 6
in 5 12 3 15 6 18 4 14 6 1.0 4.4 6
type 5 12 3 15 6 18 4 14 6 1.0 4.4 6
values 5 12 3 15 6 18 4 14 6 1.0 4.4 6

См. также

  • Атрибуты примитивов фильтра SVG
  • <filter>
  • <animate>
  • <set>
  • <feBlend>
  • <feComponentTransfer>
  • <feComposite>
  • <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/feColorMatrix

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API