Svg Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹: Π­Ρ„Ρ„Π΅ΠΊΡ‚Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ SVG. Π§Π°ΡΡ‚ΡŒ 1. SVG Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ 101 / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹. Π§Π°ΡΡ‚ΡŒ 1. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ понятия ΠΈ Ρ‚ΠΈΠΏΡ‹. ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊ изобраТСниям для создания графичСских эффСктов.

SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ – это воистину ΠΌΠΎΡ‰Π½Ρ‹ΠΉ, Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ инструмСнт. A всС ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΈΡΠΏΡ‹Ρ‚Ρ‹Π²Π°ΡŽΡ‚ страх ΠΏΠ΅Ρ€Π΅Π΄ SVG Π² Ρ†Π΅Π»ΠΎΠΌ, Π° ΡƒΠΆ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΡ ΠΈ эффСкты каТутся Ρ‡Π΅ΠΌ-Ρ‚ΠΎ спСцифичСским ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½Ρ‹ΠΌ для изучСния.

Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я ΠΏΠΎΠΏΡ‹Ρ‚Π°ΡŽΡΡŒ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒ Вас Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ, расскаТу ΠΎ возмоТностях ΠΈ Ρ‚ΠΈΠΏΠ°Ρ… SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΈ, Π² частности, ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΈΡ… ΠΊ изобраТСниям Π½Π° Π²Π΅Π±-страницах.

SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎΡ‡Ρ‚ΠΈ всСми соврСмСнными Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Π΅. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ IE9 ΠΈ Android native browser вСрсии Π½ΠΈΠΆΠ΅ 4.4.

svg-filters ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°ΠΌΠΈ

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ прСдставляСт ΠΈΠ· сСбя Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π² SVG, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€. Для Π½Π°Ρ‡Π°Π»Π° ΠΌΡ‹ нарисуСм ΠΊΡ€ΡƒΠ³:

<svg viewbox="0 0 400 300">
    <circle cx="200" cy="200" fill="#3498db" r="80" />
</svg>

Если Π’Ρ‹ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с SVG, Ρ‚ΠΎ сСйчас самоС врСмя ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ πŸ™‚

Π’ΠΊΡ€Π°Ρ‚Ρ†Π΅:

  • Ρ‚Π΅Π³ <circle>
    – это ΠΊΡ€ΡƒΠ³
  • Π°Ρ‚Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ cx, cy – Π·Π°Π΄Π°ΡŽΡ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ†Π΅Π½Ρ‚Ρ€Π° ΠΊΡ€ΡƒΠ³Π°, fill – Π·Π°Π»ΠΈΠ²ΠΊΡƒ, r – радиус.

Π’ΠΎ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ написали, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π³Π»ΡΠ΄Π΅Ρ‚ΡŒ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:

Π”Π°, ΠΊΡ€ΡƒΡ‚ΠΎ. Настоящий, большой ΠΈ синий SVG-ΠΊΡ€ΡƒΠ³. А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ опишСм ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΉ SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, Π·Π°Π΄Π°ΡŽΡ‰ΠΈΠΉ гаусовскоС Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅, ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ этот Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΊ нашСй нСзамысловатой Ρ„ΠΈΠ³ΡƒΡ€Π΅.

<svg viewbox="0 0 400 300">
  <defs>
    <filter>
      <feGaussianBlur stdDeviation="10"/>
    </filter>
  </defs>
  <circle cx="200" cy="150" fill="#3498db" filter="url(#myFilter1)" r="80" />
</svg>

Π‘Π°ΠΌ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ опрСдСляСтся Π² сСкции <defs> с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ‚Π΅Π³Π° <filter>. Π•ΠΌΡƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Ρ‚ΡŒ id (ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π² контСкстС всСго Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°). Π£ нас это id="myFilter1".

Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Ρ‚ΠΈΠΏΡ‹ примСняСмой Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ. Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это <feGaussianBlur>

, Π³Π΄Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ stdDeviation Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ размытия.

ЗабСгая Π²ΠΏΠ΅Ρ€Π΅Π΄, скаТСм, Ρ‡Ρ‚ΠΎ спСцификация опрСдСляСт нСсколько Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ с большим количСством Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² для настройки ΠΈΡ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ².

Π”Π°Π»Π΅Π΅ ΠΊ Ρ‚ΠΎΠΉ части SVG, которая Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ, Π½ΡƒΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ filter="url(#myFilter1)" с ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ id Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°.

И Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ получится:

Π”Π°! Π’ΠΎΡ‚ ΠΎΠ½ – наш ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€. НС Ρ‚Π°ΠΊ слоТно, ΠΊΠ°ΠΊ казалось, Π½Π΅ ΠΏΡ€Π°Π²Π΄Π° Π»ΠΈ? ИдСм дальшС. Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΊ растровой ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ΅. Для этого помСстим ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ красивой Π΄Π΅Π²ΡƒΡˆΠΊΠΈ Π² Π½Π°ΡƒΡˆΠ½ΠΈΠΊΠ°Ρ… Π²Π½ΡƒΡ‚Ρ€ΡŒ SVG:

<svg viewbox="0 0 400 300">
  <image xlink:href="/blogdemo/img/girl.jpg" />
</svg>

И ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌ ΠΊ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€, описанный Π²Ρ‹ΡˆΠ΅:

<svg>
  <defs>
    <filter>
      <feGaussianBlur stddeviation="5" />
    </filter>
  </defs>
  <image filter="url(#myFilter2)" xlink:href="/blogdemo/img/girl.jpg" />
</svg>

ΠŸΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ β€œΡ€Π°Π·Π±Π»ΡŽΡ€Π΅Π½Π½Π°Ρβ€ Π΄Π΅Π²ΡƒΡˆΠΊΠ°, ΠΊΠ°ΠΊ ΠΌΡ‹ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ. И это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π°Ρ‡Π°Π»ΠΎ. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ!

ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Ρ‹Π΅ SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹. ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅ΠΌ нСсколько эффСктов ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π•Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ Π½Π΅ΠΎΡ‚ΡŠΠ΅ΠΌΠ»Π΅ΠΌΡ‹ΠΌ достоинством SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² являСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сочСтания Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². Π’.Π΅. Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ послС примСнСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ источником изобраТСния для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΈ Ρ‚.Π΄.

Π§Ρ‚ΠΎΠ±Ρ‹ Π±Ρ‹Π»ΠΎ понятнСС, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ‚ΠΈΠΏ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ для β€œΡ€Π°Π·Π±Π»ΡŽΡ€Π΅Π½Π½ΠΎΠΉβ€ Π΄Π΅Π²ΡƒΡˆΠΊΠΈ. НапримСр, сдСлаСм ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π½ΠΎ-Π±Π΅Π»Ρ‹ΠΌ.

<svg viewbox="0 0 400 300">
  <defs>
    <filter>
      <feGaussianBlur in="SourceGraphic" result="a1" stddeviation="3" />
      <feColorMatrix in="a1" type="saturate" values="0"></feColorMatrix>
    </filter>
  </defs>
  <image filter="url(#myFilter3)" xlink:href="/blogdemo/img/girl.jpg" />
</svg>

ГрафичСски эту схСму Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ:

Как Π’Ρ‹ Π²ΠΈΠ΄ΠΈΡ‚Π΅, для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ in ΠΈ result. Если ΠΎΠ½ΠΈ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹, Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² порядкС ΠΈΡ… записи.

Π’ качСствС in для ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ SourceGraphic (Π² нашСм случаС ΠΎΠ½ΠΎ являСтся псСвдонимом <image>)

Π’ΠΈΠΏΡ‹ SVG-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²

Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈ, сущСствуСт нСсколько Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅. Для простоты восприятия ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ΄, находящийся Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ‚Π΅Π³Π° filter. ВсС ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ остаСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ….


feComponentTransfer

Π€ΠΈΠ»ΡŒΡ‚Ρ€ <fecomponenttransfer> позволяСт ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅, Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅, дискрСтныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ изобраТСния, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Π³Π°ΠΌΠΌΡƒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°.

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹:

<!--1-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <feFuncR type="linear" slope="5" intercept="-0.5" />
  <feFuncG type="linear" slope="0.2" />
  <feFuncB type="linear" slope="0.2" />
  <feFuncA type="identity" />
</fecomponenttransfer>
...

Π—Π΄Π΅ΡΡŒ feFuncR, feFuncG, feFuncB, feFuncA – красный, Π·Π΅Π»Π΅Π½Ρ‹ΠΉ, синий ΠΈ ΠΊΠ°Π½Π°Π» прозрачности соотвСтствСнно. type – Ρ‚ΠΈΠΏ прСобразования, slope – ΠΌΠ½ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒ, intercept – добавляСмоС (ΠΎΡ‚Π½ΠΈΠΌΠ°Π΅ΠΌΠΎΠ΅) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. T.Π΅. <feFuncR type="linear" slope="5" intercept="-0.5" /> Π·Π½Π°Ρ‡ΠΈΡ‚: red = red * 5 - 0.5

Π’ΠΎΡ‚ Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ:

<!--2-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefunca type="linear" slope="0.5" />
</fecomponenttransfer>
...

A Π²ΠΎΡ‚ Ρ‚Π°ΠΊ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ синий ΠΊΠ°Π½Π°Π»:

<!--3-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefuncr type="linear" slope="0" />
  <fefuncg type="linear" slope="0" />
  <fefuncb type="linear" slope="1" />
</fecomponenttransfer>
...

Или просто Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ значСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² случайными значСниями ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ интСрСсный эффСкт.

<!--4-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefuncr type="linear" slope="10" intercept="-4" />
  <fefuncg type="linear" slope="1.5" intercept="1" />
  <fefuncb type="linear" slope="2" intercept="-1" />
</fecomponenttransfer>
...

Π’ΠΎΡ‚ Π΄Π΅ΠΌΠΎ всСх ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Ρ… Π²Ρ‹ΡˆΠ΅.

Π€ΠΈΠ»ΡŒΡ‚Ρ€ <fecomponenttransfer> ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Π΅ прСобразования. Π’ΠΈΠΏ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠΉ задаСтся Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ type ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния identity | table | discrete | linear | gamma. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π±Π΅Π³Π»ΠΎ взглянСм, Ρ‡Ρ‚ΠΎ ΠΈΠ· сСбя прСдставляСт ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Ρ‚ΠΈΠΏΠΎΠ².

fecomponenttransfer с

type="table"

Π’ случаС fecomponenttransfer с Ρ‚ΠΈΠΏΠΎΠΌ table функция прСобразования для ΠΊΠ°Π½Π°Π»Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° ΠΏΡƒΡ‚Π΅ΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΉ интСрполяции ΠΌΠ΅ΠΆΠ΄Ρƒ значСниями, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ tablevalues. А Π²ΠΎΡ‚ Ρ‚Π°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ эффСкта β€œΠ½Π΅Π³Π°Ρ‚ΠΈΠ²Π°β€, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Π΅ значСния:

...
<fecomponenttransfer>
  <fefuncr type="table" tablevalues="1 0" />
  <fefuncg type="table" tablevalues="1 0" />
  <fefuncb type="table" tablevalues="1 0" />
</fecomponenttransfer>
...    

fecomponenttransfer с

type="discrete"

Для Ρ‚ΠΈΠΏΠ° discrete функция Π±ΡƒΠ΄Π΅Ρ‚ ступСнчатой, Π² соотвСтствии со значСниями, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ tablevalues. Π’ΠΎΡ‚ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²:

<!-- 1-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefuncr type="discrete" tablevalues="1 0" />
  <fefuncg type="discrete" tablevalues="0 0" />
  <fefuncb type="discrete" tablevalues="0 0" />
</fecomponenttransfer>
...
<!--2-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefuncr type="discrete" tablevalues="1 0" />
  <fefuncg type="discrete" tablevalues="0 0" />
  <fefuncb type="discrete" tablevalues="0 0" />
</fecomponenttransfer>
...
<!-- 3-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefuncr type="discrete" tablevalues="1 1 1" />
  <fefuncg type="discrete" tablevalues="0 0.8 1" />
  <fefuncb type="discrete" tablevalues="0 0.5 1" />
</fecomponenttransfer>
...
<!-- 4-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefuncr type="discrete" tablevalues="0 0" />
  <fefuncg type="discrete" tablevalues="0.1 0.6" />
  <fefuncb type="discrete" tablevalues="0.
3 0.9" /> </fecomponenttransfer> ...

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ значСния Π³Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ‚ΠΈΠΏΠ° Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° type="gamma" ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² amplitude, exponent ΠΈ offset для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΠΊΠ°Π½Π°Π»ΠΎΠ².

НапримСр, <fefuncg type="gamma" amplitude="1.2" exponent="0.5" offset="0.2" /> Π·Π½Π°Ρ‡ΠΈΡ‚: green = 1.2 * pow(green, 0.5) + 0.2

Π”Π΅ΠΌΠΎ:

<!-- 1-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefuncr type="gamma" amplitude="1.1" exponent="1" offset="0" />
  <fefuncg type="gamma" amplitude="1.1" exponent="1" offset="0" />
  <fefuncB type="gamma" amplitude="1.3" exponent="0.9" offset="0.5" />
</fecomponenttransfer>
...
<!-- 2-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecomponenttransfer>
  <fefuncr type="gamma" amplitude="2" exponent="1" offset="0.1" />
  <fefuncg type="gamma" amplitude="1" exponent="1.2" offset="0.1" />
  <fefuncB type="gamma" amplitude="1.
4" exponent="1" offset="0.1" /> </fecomponenttransfer> ... <!-- 3-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ --> ... <fecomponenttransfer> <fefuncr type="gamma" amplitude="0.1" exponent="1" offset="0.1" /> <fefuncg type="gamma" amplitude="1" exponent="3" offset="0.1" /> <fefuncB type="gamma" amplitude="0.1" exponent="1" offset="0.1" /> </fecomponenttransfer> ... <!-- 4-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ --> ... <fecomponenttransfer> <fefuncr type="gamma" amplitude="0.4" exponent="1" offset="0.4" /> <fefuncg type="gamma" amplitude="1" exponent="0.33" offset="0.33" /> <fefuncB type="gamma" amplitude="0.1" exponent="1" offset="0.1" /> </fecomponenttransfer> ...

feColorMatrix

Π€ΠΈΠ»ΡŒΡ‚Ρ€ позволяСт ΡƒΠΌΠ½ΠΎΠΆΠΈΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ пиксСль исходного изобраТСния Π² Π²ΠΈΠ΄Π΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ R, G, B,

A ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ Π΄ΠΎ размСрности 5, Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 5Γ—5. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΈΠ· сСбя ΠΊΠ°Π½Π°Π»Ρ‹ R', G', B', A' ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ изобраТСния.

  | R' |     | a00 a01 a02 a03 a04 |   | R |
  | G' |     | a10 a11 a12 a13 a14 |   | G |
  | B' |  =  | a20 a21 a22 a23 a24 | * | B |
  | A' |     | a30 a31 a32 a33 a34 |   | A |
  | 1  |     |  0   0   0   0   1  |   | 1 |

Π”Π°Π²Π°ΠΉΡ‚Π΅ сразу ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ. Π—Π½Π°ΠΊΠΎΠΌΡ‹ΠΉ всСм эффСкт β€œΡΠ΅ΠΏΠΈΡβ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹:

  0.343 0.669 0.119 0 0
  0.249 0.626 0.130 0 0
  0.172 0.334 0.111 0 0
  0     0     0     1 0
  0     0     0     0 1

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° записываСтся Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ values Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° <fecolormatrix> с Ρ‚ΠΈΠΏΠΎΠΌ matrix Π² Π²ΠΈΠ΄Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠΌ.

ПослСднюю строку Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‚.ΠΊ. ΠΎΠ½Π° всСгда Ρ€Π°Π²Π½Π° | 0 0 0 0 1 |.

<fecolormatrix type="matrix" values="0.343 0.669 0.119 0 0 0.249 0.626 0.130 0 0 0.172 0.334 0.111 0 0 0 0 0 1 0" />

Для удобства чтСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΎΠΌ Π²ΠΈΠ΄Π΅:

<!-- 1-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecolormatrix type="matrix"
  values="0. 343 0.669 0.119 0 0
          0.249 0.626 0.130 0 0
          0.172 0.334 0.111 0 0
          0     0     0     1 0" />
...

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π΅Ρ‰Π΅ Π½Π° нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ:

  <!-- 2-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
  ...
  <fecolormatrix type="matrix"
    values="0.788 -0.262  0.474  0   0
            0.1    1.032 -0.132 -0.1 0
            -1     2.1    0.912 -2.8 0
            0      0      0      1   0" />
  ...    
  <!-- 3-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
  ...
  <fecolormatrix in="SourceGraphic" type="matrix"
    values="5   0   0 0 -0.2
            0 1.2   0 0 -0.2
            0   5 1.2 0 -0.2
            5   0   0 1    0 "/>
  ...    
  <!-- 4-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
  ...
  <fecolormatrix type="matrix"
    values="1.2 0   0 0 -0.2
            2   0   2 2 -0.2
            2   2 1.2 0 -0.2
            2   0   0 1    0"/>
  ...    

Π’ΠΎΡ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚:

ЧастныС случаи Ρ†Π²Π΅Ρ‚ΠΎΠ²Ρ‹Ρ… ΠΌΠ°Ρ‚Ρ€ΠΈΡ† – это ΠΏΠΎΠ²ΠΎΡ€ΠΎΡ‚ изобраТСния ΠΏΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΌΡƒ ΠΊΡ€ΡƒΠ³Ρƒ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ цвСтности ΠΈ Ρ‚. ΠΏ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ Π½Π΅ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ умноТСния Π½Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ для Ρ‚ΠΈΠΏΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² спСцификации для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² , ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ type=saturate, type=hueRotate, type=luminanceToAlpha. Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… использования:

ΠžΠ±Π΅ΡΡ†Π²Π΅Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅ с type="saturate", Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, Π³Π΄Π΅ Ρ†Π²Π΅Ρ‚Π½ΠΎΡΡ‚ΡŒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½Π° Π² 0, 0.5, 2, 5 Ρ€Π°Π·, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ type="saturate":

<fecolormatrix type="saturate" values="0"   /> <!-- 1-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecolormatrix type="saturate" values="0.5" /> <!-- 2-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecolormatrix type="saturate" values="2"   /> <!-- 3-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecolormatrix type="saturate" values="5"   /> <!-- 4-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->

ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΏΠΎ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΌΡƒ ΠΊΡ€ΡƒΠ³Ρƒ Π½Π° 40, 120, 240, 320 градусов, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ type="hueRotate":

<fecolormatrix type="hueRotate" values="40"  /> <!-- 1-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecolormatrix type="hueRotate" values="120" /> <!-- 2-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
. ..
<fecolormatrix type="hueRotate" values="240" /> <!-- 3-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<fecolormatrix type="hueRotate" values="360" /> <!-- 4-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->

Π‘Π²Π΅Ρ€Ρ‚ΠΊΠ°

feConvolveMatrix

Π’ процСссС свСртки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° коэффициСнтов «умноТаСтся» Π½Π° значСния ΠΊΠ°Π½Π°Π»ΠΎΠ² пиксСлСй изобраТСния. Π‘ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ это графичСски:

ДСйствиС Π½Π°Π΄ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (ΠΈΠ»ΠΈ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ изобраТСния) опрСдСляСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ свСртки m. ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° свСртки опрСдСляСт Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ пиксСль зависит ΠΎΡ‚ сосСдних пиксСлСй Π² процСссС свСртки. ПиксСль Ρƒ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ зависит ΠΎΡ‚ пиксСлСй x0 … x8 исходя ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ„ΠΎΡ€ΠΌΡƒΠ»Ρ‹:

y = x0Γ—m0 + x1Γ—m1 + ... + x8Γ—m8

Π‘Π²Π΅Ρ€Ρ‚ΠΊΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ†Π΅Π»Π΅ΠΉ. Π­Ρ‚ΠΎ Ρ€Π°Π·ΠΌΡ‹Ρ‚ΠΈΠ΅, искусствСнноС ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ рСзкости ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ интСрСсныС эффСкты.

Π”Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Β«ΠΏΠΎΠ΄Ρ‚ΡΠ½ΡƒΡ‚ΡŒΒ» Ρ€Π΅Π·ΠΊΠΎΡΡ‚ΡŒ классичСского Π½Π΅Ρ‡Π΅Ρ‚ΠΊΠΎΠ³ΠΎ #duckface изобраТСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Π²ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° свСртки с Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒΡŽ 3:

. ..
<feConvolveMatrix 
  order="3" 
  kernelMatrix=" 1  -1   1 
                -1  -1  -1 
                 1  -1   1">
</feConvolveMatrix>
...

ΠžΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (слСва) ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ (справа)

Π”Π°Π»Π΅Π΅ прСдставлСны Π΅Ρ‰Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² свСртки:

<!-- 1-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<feConvolveMatrix order="3" kernelMatrix="1 -1 1 -1 -0.1 -1 1 -1 1"></feConvolveMatrix>
...
<!-- 2-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<feConvolveMatrix order="3" kernelMatrix="9 0 0 0 1 0 0 0 -9"></feConvolveMatrix>
...
<!-- 3-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<feConvolveMatrix order="3" kernelMatrix="-1 -1 -1 -1 7 -1 -1 -1 -1"></feConvolveMatrix>
...
<!-- 4-ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ -->
...
<feConvolveMatrix order="5" kernelMatrix="1 1 1 1 1 1 -2 -2 -2 1 1 -2 .01 -2 1 1 -2 -2 -2 1 1 1 1 1 1"></feConvolveMatrix>
...

ΠšΠΎΠΌΠΏΠΎΠ·ΠΈΡ‚Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ c

feComposite

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ feComposite ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ арифмСтичСскиС ΠΈ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ слоями Π² svg.

<feComposite
    in="source1"
    in2="source2"
    operator="xor"/>

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…:

over

in

out

atop

xor

arithmetic
k1=”0β€³ k2=”1β€³ k3=”-1β€³ k4=”1β€³

arithmetic
k1=”.5β€³ k2=”.5β€³ k3=”.5β€³ k4=”.5β€³

arithmetic
k1=”0β€³ k2=”1β€³ k3=”1β€³ k4=”0β€³

Π Π΅ΠΆΠΈΠΌΡ‹ смСшивания слоСв с

feBlend

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ feBlend ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ смСшиваниС слоСв Π² svg.

<feBlend
    in="source1"
    in2="source2"
    mode="lighten"/>

Π”Π°Π²Π°ΠΉΡ‚Π΅ рассмотрим Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…. Π˜Ρ… Π½Π΅ Ρ‚Π°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π² photoshop ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°Ρ…, Π½ΠΎ всС ΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅:

normal

screen

multiply

lighten

darken

ВСкстура (ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ΡΡ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅) с

feTile

feTile позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π² svg тСкстуру. Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΡ…ΠΎΠΆΠ΅ Π½Π° background-repeat: repeat; Π² html

<feTile in="source" />

Π”Π΅ΠΌΠΎ c svg-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ:

Π’ качСствС Π΄Π΅ΠΌΠΎ посмотритС, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π΄Π΅Π»Π°Π»ΠΈ Π½Π° halloween

Π•Ρ‰Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ Π² блиТайшСС врСмя ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΡΡ‚Π°Ρ‚ΡŒΡΠΌΠΈ.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅:

Π­Ρ‚ΠΎ пСрвая ΡΡ‚Π°Ρ‚ΡŒΡ с основами SVG Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ². ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ сСдуСт…

ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° наши Π³Ρ€ΡƒΠΏΠΏΡ‹ Π² Π’Π°ΡˆΠΈΡ… Π»ΡŽΠ±ΠΈΠΌΡ‹Ρ… соц. сСтях.

Posted on ΠžΠΊΡ‚ΡΠ±Ρ€ΡŒ 31, 2014
by Nedudi Π”ΡƒΠ΄ΠΈΠ½ Π”ΠΌΠΈΡ‚Ρ€ΠΈΠΉ
11 Comments ↓
37,634 views

SVG Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹

SVG Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ графичСскиС эффСкты SVG Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅.

<defs> ΠΈ <filter>

ВсС SVG Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ элСмСнта <defs>. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ <defs> это сокращСниС ΠΎΡ‚ английского слова «definitions» (ΠΏΠ΅Ρ€. «ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡ») ΠΈ содСрТит ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов (Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹).

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ <filter> ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для опрСдСлСния SVG Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. Π£ элСмСнта <filter> Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π΄Π°Π½ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ id, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€. ГрафичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Π·Π°Ρ‚Π΅ΠΌ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° этот Ρ„ΠΈΠ»ΡŒΡ‚Ρ€.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ SVG Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²

Π’ SVG доступны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²:

  • <feBlend> — Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для комбинирования ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ
  • <feColorMatrix> — Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для трансформации Ρ†Π²Π΅Ρ‚ΠΎΠ²
  • <feComponentTransfer>
  • <feComposite>
  • <feConvolveMatrix>
  • <feDiffuseLighting>
  • <feDisplacementMap>
  • <feFlood>
  • <feGaussianBlur>
  • <feImage>
  • <feMerge>
  • <feMorphology>
  • <feOffset> — Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для создания Ρ‚Π΅Π½Π΅ΠΉ
  • <feSpecularLighting>
  • <feTile>
  • <feTurbulence>
  • <feDistantLight> — Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для освСщСния
  • <fePointLight> — Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для освСщСния
  • <feSpotLight> — Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ для освСщСния

Π‘ Π»ΡŽΠ±Ρ‹ΠΌ элСмСнтом SVG ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ любоС количСство Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²!

Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ Π£Ρ‡Π΅Π±Π½ΠΈΠΊΠ° ΠΏΠΎ SVG Π³Ρ€Π°Ρ„ΠΈΠΊΠ΅ ΠΌΡ‹ всСго лишь продСмонстрируСм нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования SVG Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ смогли сСбС ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ возмоТности SVG Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ.

Π­Ρ„Ρ„Π΅ΠΊΡ‚ размытия

Π€ΠΈΠ»ΡŒΡ‚Ρ€ <feGaussianBlur>.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ элСмСнт <feGaussianBlur>, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ эффСкт размытия:

Π’Π°Ρˆ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ HTML Ρ‚Π΅Π³ SVG.

SVG ΠΊΠΎΠ΄:

<svg>
   <defs>
     <filter x="0" y="0">
       <feGaussianBlur in="SourceGraphic" stdDeviation="15" />
     </filter>
   </defs>
   <rect stroke="green" stroke-width="3" fill="yellow" filter="url(#f0)" />
</svg> 

ОбъяснСниС:

  • Атрибут id элСмСнта <filter> опрСдСляСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°
  • Π­Ρ„Ρ„Π΅ΠΊΡ‚ размытия создаСтся ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ элСмСнта <feGaussianBlur>
  • Π§Π°ΡΡ‚ΡŒ in=»SourceGraphic» опрСдСляСт, Ρ‡Ρ‚ΠΎ эффСкт создаСтся для всСго элСмСнта
  • Атрибут stdDeviation опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ размытия
  • Атрибут filter элСмСнта <rect> связываСт ссылкой элСмСнт с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ «f1»

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Ρ‚Π΅Π½ΠΈ (<feOffset>)

Для создания эффСкта Ρ‚Π΅Π½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ элСмСнт <feOffset>. ИдСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ бСрСтся графичСский ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ SVG (ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ графичСский элСмСнт) ΠΈ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ сдвигаСтся Π² XY плоскостях.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€

Π‘Π½Π°Ρ‡Π°Π»Π° сдвигаСтся ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ (ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ элСмСнта <feOffset>), Π° Π·Π°Ρ‚Π΅ΠΌ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ накладываСтся Π½Π° сдвинутоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ (ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ элСмСнта <feBlend>):

Π’Π°Ρˆ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ HTML Ρ‚Π΅Π³ SVG.

SVG ΠΊΠΎΠ΄:

<svg>
   <defs>
     <filter x="0" y="0">
       <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
       <feBlend in="SourceGraphic" in2="offOut" mode="normal" />
     </filter>
   </defs>
   <rect stroke="green" stroke-width="3" fill="yellow" filter="url(#f1)" />
</svg> 

ОбъяснСниС:

  • Атрибут id элСмСнта <filter> опрСдСляСт ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ имя Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°
  • Атрибут filter элСмСнта <rect> связываСт ссылкой элСмСнт с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠΌ «f1»

Π’Π΅ΠΏΠ΅Ρ€ΡŒ сдвинутоС ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄Π΅Π»Π°Π΅ΠΌ Ρ€Π°Π·ΠΌΡ‹Ρ‚Ρ‹ΠΌ (ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ элСмСнта <feGaussianBlur>):

Π’Π°Ρˆ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ HTML Ρ‚Π΅Π³ SVG.

SVG ΠΊΠΎΠ΄:

<svg>
   <defs>
     <filter x="0" y="0">
       <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
       <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
       <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
     </filter>
   </defs>
   <rect stroke="green" stroke-width="3" fill="yellow" filter="url(#f2)" />
</svg> 

ОбъяснСниС:

  • Атрибут stdDeviation элСмСнта <feGaussianBlur> опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ размытия

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π΅Π»Π°Π΅ΠΌ Ρ‚Π΅Π½ΡŒ Ρ‡Π΅Ρ€Π½ΠΎΠΉ:

Π’Π°Ρˆ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ HTML Ρ‚Π΅Π³ SVG.

SVG ΠΊΠΎΠ΄:

<svg>
   <defs>
     <filter x="0" y="0">
       <feOffset result="offOut" in="SourceAlpha" dx="20" dy="20" />
       <feGaussianBlur result="blurOut" in="offOut" stdDeviation="10" />
       <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
     </filter>
   </defs>
   <rect stroke="green" stroke-width="3" fill="yellow" filter="url(#f3)" />
</svg> 

ОбъяснСниС:

  • Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° in элСмСнта <feOffset> ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ Π½Π° «SourceAlpha», ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π» вмСсто всСго RGBA Π½Π°Π±ΠΎΡ€Π° пиксСля для создания размытия

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Ρ‚Π΅Π½ΡŒ ΠΊΠ°ΠΊ Ρ†Π²Π΅Ρ‚:

Π’Π°Ρˆ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ HTML Ρ‚Π΅Π³ SVG.

SVG ΠΊΠΎΠ΄:

<svg>
   <defs>
     <filter x="0" y="0">
       <feOffset result="offOut" in="SourceGraphic" dx="20" dy="20" />
       <feColorMatrix result="matrixOut" in="offOut" type="matrix"
       values="0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0" />
       <feGaussianBlur result="blurOut" in="matrixOut" stdDeviation="10" />
       <feBlend in="SourceGraphic" in2="blurOut" mode="normal" />
     </filter>
   </defs>
   <rect stroke="green" stroke-width="3" fill="yellow" filter="url(#f4)" />
</svg> 

ОбъяснСниС:

  • Π€ΠΈΠ»ΡŒΡ‚Ρ€ <feColorMatrix> ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для трансформации Ρ†Π²Π΅Ρ‚ΠΎΠ² сдвинутого изобраТСния Π² сторону Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π°. Π’Ρ€ΠΈ значСния ‘0.2’ Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽΡ‚ΡΡ Π½Π° значСния красного, Π·Π΅Π»Π΅Π½ΠΎΠ³ΠΎ ΠΈ синСго ΠΊΠ°Π½Π°Π»ΠΎΠ². УмСньшСниС ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ сдвигаСт Ρ†Π²Π΅Ρ‚ Π² сторону Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ (Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° = 0)

— SVG: ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ вСкторная Π³Ρ€Π°Ρ„ΠΈΠΊΠ°

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ SVG опрСдСляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ эффСкт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° ΠΏΡƒΡ‚Π΅ΠΌ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠΈ Π°Ρ‚ΠΎΠΌΠ°Ρ€Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°. Он Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ отобраТаСтся сам ΠΏΠΎ сСбС, Π½ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ filter для элСмСнтов SVG ΠΈΠ»ΠΈ свойством CSS filter для элСмСнтов SVG/HTML.

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ НСт
Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π›ΡŽΠ±ΠΎΠ΅ количСство ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов Π² любом порядкС:
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ описания
Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹-ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°
,

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹

  • ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹
  • Атрибуты ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
  • Атрибуты XLink
  • класс
  • ΡΡ‚ΠΈΠ»ΡŒ

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹

  • x
  • Π³
  • ΡˆΠΈΡ€ΠΈΠ½Π°
  • высота
  • Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π Π΅Π· Π£ΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΉ
  • Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹
  • ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹Π΅ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹
  • ссылка: href

Π­Ρ‚ΠΎΡ‚ элСмСнт Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс SVGFilterElement .

SVG

 
  <Ρ„ΠΈΠ»ΡŒΡ‚Ρ€>
    
  
  
  

 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

БпСцификация
ΠœΠΎΠ΄ΡƒΠ»ΡŒ эффСктов Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ 1
# Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°

Π’Π°Π±Π»ΠΈΡ†Ρ‹ BCD Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ JavaScript. Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ JavaScript для просмотра Π΄Π°Π½Π½Ρ‹Ρ….

  • <фСморфология>
  • Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС ΠΏΠΎ SVG: эффСкты Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°

ΠžΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ с содСрТаниСм этой страницы?

  • Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ страницу Π½Π° GitHub.
  • Π‘ΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ с содСрТимым.
  • ΠŸΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ исходный ΠΊΠΎΠ΄ Π½Π° GitHub.
Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠ½ΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ участиС?

Π£Π·Π½Π°ΠΉΡ‚Π΅, ΠΊΠ°ΠΊ внСсти свой Π²ΠΊΠ»Π°Π΄.

ПослСдний Ρ€Π°Π· эта страница измСнялась ΠΎΡ‚ участников MDN.

— SVG: ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΠ°Ρ вСкторная Π³Ρ€Π°Ρ„ΠΈΠΊΠ°

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° SVG измСняСт Ρ†Π²Π΅Ρ‚Π° Π½Π° основС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ прСобразования. Π¦Π²Π΅Ρ‚ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля [R, G, B, A] являСтся ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ, ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ Π½Π° Ρ†Π²Π΅Ρ‚ΠΎΠ²ΡƒΡŽ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ 5 Π½Π° 5 для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° [R', G', B', A'] .

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: Π‘ΠΈΠΌΠ²ΠΎΠ» ΡˆΡ‚Ρ€ΠΈΡ…Π° ' ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ для обозначСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π° прСобразования.

 | Π ' | | r1 r2 r3 r4 r5 | | Π  |
| Π“' | | g1 g2 g3 g4 g5 | | Π³ |
| Π‘' | = | b1 b2 b3 b4 b5 | * | Π‘ |
| А' | | а1 а2 а3 а4 а5 | | А |
| 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
Π’' = b1*R + b2*G + b3*B + b4*A + b5
А' = Π°1*R + Π°2*G + Π°3*Π’ + Π°4*А + Π°5
 

Π’ΠΎΠ·ΡŒΠΌΠΈΡ‚Π΅ количСство красного Ρ†Π²Π΅Ρ‚Π° Π² Π½ΠΎΠ²ΠΎΠΌ пиксСлС ΠΈΠ»ΠΈ 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
Новый красный = [r1 * старый красный] + [r2 * старый Π·Π΅Π»Π΅Π½Ρ‹ΠΉ] + [r3 * старый синий] + [r4 * старый Π°Π»ΡŒΡ„Π°] + [сдвиг r5]
 

Если, скаТСм, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Ρ‡Π΅Ρ€Π½ΠΎΠ΅ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ красным, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ r5 ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом x , ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ² красноту ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ пиксСля Π½ΠΎΠ²ΠΎΠ³ΠΎ изобраТСния Π½Π° Ρ… .

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ‡Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

 R G B A W
Π ' | 1 0 0 0 0 |
Π“' | 0 1 0 0 0 |
Π‘' | 0 0 1 0 0 |
А' | 0 0 0 1 0 |
 

Π’ Π½Π΅ΠΌ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€ΠΎΠ²Π½ΠΎ Π² 1 Ρ€Π°Π· ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ староС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΈ большС Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ добавляСтся. ΠžΡ‚ΡΡŽΠ΄Π° рСкомСндуСтся Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ манипуляции с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ.

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ ΠŸΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ элСмСнт Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°
Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚ Π›ΡŽΠ±ΠΎΠ΅ количСство ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… элСмСнтов Π² любом порядкС:
,

Π“Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹

  • ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹
  • Атрибуты ΠΏΡ€Π΅Π·Π΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
  • Атрибуты ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²ΠΎΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ x , y , ΡˆΠΈΡ€ΠΈΠ½Π° , высота ΠΈ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹.
  • класс
  • ΡΡ‚ΠΈΠ»ΡŒ

Π‘ΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹

  • Π² : ЗначСния Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ SourceGraphic , SourceAlpha , BackgroundImage , BackgroundAlpha , FillPaint , StrokePaint ΠΈΠ»ΠΈ ссылку Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ² Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π° .
  • Ρ‚ΠΈΠΏ : значСния Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ , Π½Π°ΡΡ‹Ρ‰Π΅Π½Π½ΠΎΡΡ‚ΡŒ , ΠΎΡ‚Ρ‚Π΅Π½ΠΎΠΊ Rotate ΠΈ ΡΡ€ΠΊΠΎΡΡ‚ΡŒ Π΄ΠΎ Π°Π»ΡŒΡ„Π°-ΠΊΠ°Π½Π°Π»Π° .
  • значСния : Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для Ρ‚ΠΈΠΏΠ° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, установлСнноС Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π΅ Ρ‚ΠΈΠΏΠ° .

Π­Ρ‚ΠΎΡ‚ элСмСнт Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ интСрфСйс SVGFEColorMatrixElement .

SVG

 
  
  <опрСдСлСния>
    <Π³>
      
      
      
    
  
  <ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ href="#ΠΊΡ€ΡƒΠ³ΠΈ" />
  Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ
  
  <Ρ„ΠΈΠ»ΡŒΡ‚Ρ€>
    
  
  <ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
    href="#ΠΊΡ€ΡƒΠ³ΠΈ"
    Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ = "пСрСвСсти (0 70)"
    filter="url(#colorMeTheSame)" />
  Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°
  
  <Ρ„ΠΈΠ»ΡŒΡ‚Ρ€>
    
  
  <ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
    href="#ΠΊΡ€ΡƒΠ³ΠΈ"
    Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ = "пСрСвСсти (0 140)"
    filter="url(#colorMeGreen)" />
  <тСкст Ρ…="70" Ρƒ="190">rgbToGreen
  
  <Ρ„ΠΈΠ»ΡŒΡ‚Ρ€>
     2" />
  
  <ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
    href="#ΠΊΡ€ΡƒΠ³ΠΈ"
    Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ = "пСрСвСсти (0 210)"
    filter="url(#colorMeSaturate)" />
  насыщСниС
  
  <Ρ„ΠΈΠ»ΡŒΡ‚Ρ€>
    
  
  <ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
    href="#ΠΊΡ€ΡƒΠ³ΠΈ"
    Ρ‚Ρ€Π°Π½ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ = "пСрСвСсти (0 280)"
    filter="url(#colorMeHueRotate)" />
  hueRotate
  
  <Ρ„ΠΈΠ»ΡŒΡ‚Ρ€>
    
  
  
  ΡΡ€ΠΊΠΎΡΡ‚ΡŒ Π΄ΠΎ Π°Π»ΡŒΡ„Ρ‹

 

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚

90 034
Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚ Π–ΠΈΠ²ΠΎΠΉ ΠΎΠ±Ρ€Π°Π·Π΅Ρ†
БпСцификация
ΠœΠΎΠ΄ΡƒΠ»ΡŒ эффСктов Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°, ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ 1
# feColorMatrixElement
9 0002 Π’Π°Π±Π»ΠΈΡ†Ρ‹ BCD Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π΅ с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ JavaScript.
ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *