Эффекты Фильтра Svg. Часть 4. Двухцветные Изображения С Использованием Fecomponenttransfer

Это четвертая статья из серии о фильтрах SVG, в которой Сара Суэйдан покажет вам, как их использовать.

feComponentTransfer для создания эффекта двухцветного фильтра.



Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Предлагаемая серия статей «Эффекты фильтрации SVG» Сары Суейдан, внештатного разработчика пользовательского интерфейса и технического писателя из Ливана, посвящена тому, как работают фильтры SVG, и состоит из следующих статей: Эффекты фильтров SVG

  1. Эффекты фильтрации SVG. Часть 1. Фильтры SVG 101
  2. Эффекты фильтрации SVG. Часть 2. Обрисовываем текст с помощью feМорфология
  3. Эффекты фильтрации SVG. Часть 3. Эффект постеризации изображения с помощью feComponentTransfer
  4. Эффекты фильтрации SVG. Часть 4. Использование двухцветных изображений feComponentTransfer .

  5. Эффекты SVG-фильтра: соответствие текста текстуре поверхности с помощью feDisplacementMap



В предыдущей статье этой серии я познакомил вас с примитивом.

feComponentTransfer и мы использовали его, чтобы ограничить количество цветов в изображении и создать эффект постеризации.

В этой статье мы рассмотрим, как этот примитив можно использовать для создания эффекта.

дуотон , аналог Фотошопа.

Мы также научимся использовать его для управления интенсивностью и контрастностью цветов изображения.



Краткий обзор

Давайте немного повторим.

Примитивный feComponentTransfer позволяет изменить каждый из компонентов R, G, B и A, присутствующих в пикселе.

Другими словами, feComponentTransfer обеспечивает независимое манипулирование каждым цветовым каналом, а также альфа-каналом в элементе.

вход .

Компоненты РГБА изменяются путем выполнения различных функций над этими компонентами.

Для этого у каждого компонента есть свой элемент. Эти составные элементы вложены в feComponentTransfer .

Для RGBA это составные элементы feFuncR , feFuncG , feFuncB , И feFuncA .

Атрибут тип используется в элементе компонента для определения типа функции, которую следует использовать для изменения этого компонента.

На данный момент доступно пять типов функций: личность , стол , дискретный , линейный И гамма .

Эти типы функций используются для изменения компонентов RGBA (цвет и альфа) источника графики.

Мы упоминали, что вы можете изменить один или несколько компонентов одновременно и что вы можете менять каналы независимо, применяя разные функции к каждому элементу компонента.

  
  
  
  
  
  
  
  
   

<feComponentTransfer> <!-- The RED component --> <feFuncR type="identity | table | discrete | linear | gamma"></feFuncR> <!-- The GREEN component --> <feFuncG type="identity | table | discrete | linear | gamma"></feFuncG> <!-- The BLUE component --> <feFuncB type="identity | table | discrete | linear | gamma"></feFuncB> <!-- The ALPHA component --> <feFuncA type="identity | table | discrete | linear | gamma"></feFuncA> </feComponentTransfer>">

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

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

Создание двухцветного эффекта в Photoshop

Я не дизайнер и не разбираюсь в графических редакторах типа фотошоп .

Когда я хотел создать двухцветный эффект в SVG, я сначала искал способ создать эффект в графическом редакторе, чтобы посмотреть, смогу ли я воспроизвести его, используя операции фильтрации, доступные в SVG. Как оказалось, шаги по созданию двухцветных изображений в SVG точно такие же, как и в Photoshop. Следующее видео является ускоренной версией.

этот урок , который я нашел на YouTube. В этом видео дизайнер создает двухцветный эффект, выполнив следующие действия:

  • Обесцветьте изображение до оттенков серого.

  • Сопоставьте диапазон оттенков серого с новым диапазоном, который вместо черного и белого имеет два разных цвета на обоих концах, которые вы хотите использовать для создания двухцветного эффекта.

    Другими словами, вам необходимо создать и использовать карту градиента, на которую будут отображаться оттенки серого.

Давайте посмотрим, как эти шаги можно воспроизвести в SVG.

Создание двухцветного эффекта в SVG

Чтобы воссоздать этот эффект в SVG, нам нужно сначала обесцветить изображение.

Это можно сделать с помощью примитива фильтра feColorMatrix .

Далее нам нужно иметь возможность создать и передать карту градиента в браузер для отображения нового изображения в оттенках серого.



Преобразуйте изображение в оттенки серого с помощью feColorMatrix.

Используя feColorMatrix вы можете определить цветовую матрицу, которая определяет количество красного, зеленого и синего в вашем изображении.

Предоставляя равное количество этих трех компонентов, мы создаем матрицу, которая преобразует наше изображение в версию самого себя в оттенках серого:

<svg viewBox="0 0 266 400"> <filter id="duotone"> <feColorMatrix type="matrix" values=".

33 .

33 .

33 0 0 .

33 .

33 .

33 0 0 .

33 .

33 .

33 0 0 0 0 0 1 0"> </feColorMatrix> <!-- .

--> </filter> <image xlink:href=".

" width="100%" x="0" y="0" height="100%" filter="url(#duotone)"></image> </svg>

На следующем изображении изображение справа является результатом применения вышеуказанного фильтра к изображению слева:

Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рисунок 1. Результат (справа) преобразования изображения слева в оттенки серого с помощью операции фильтра.

feColorMatrix .

Вы можете узнать все о feColorMatrix и как его использовать в Эта статья Уна Кравец.

Теперь, когда наше изображение по сути представляет собой серый градиент, нам нужно создать двухцветную карту градиента для отображения серого градиента.



Создание карты градиента с использованием функции переноса компонентов таблицы

В SVG вы можете использовать примитив feComponentTransfer с таблицей типов для создания карты градиента.

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

таблицаЗначения используя функцию дискретный .

Браузер использует наш список таблицаЗначения для создания диапазонов, которые затем используются для сопоставления цветов с предоставленными нами значениями.

При использовании функции стол мы также предоставим значения цвета в атрибуте таблицаЗначения .

И снова браузер будет использовать эти значения для сопоставления цветов изображения.

Однако разница заключается в том, как браузер будет отображать эти цвета.

Вместо сопоставления цветовых диапазонов с дискретным значением цвета он создаст цветовой диапазон из предоставленных значений, а затем сопоставит входной диапазон с этим новым диапазоном.

Допустим, мы хотим использовать два цвета для нашего двухцветного эффекта:

Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_2. Оригинальные два цвета.

Эти два цвета будут использоваться для создания градиентного отображения:

Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_3. Градиент, созданный из двух значений цвета.

.

с которым мы собираемся сопоставить нашу карту в оттенках серого.



Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_4. Отображение двухцветной карты в двухцветном градиенте.

Чтобы использовать эти цвета в feComponentTransfer , нам нужно получить значения каналов R, G и B каждого цвета.

Поскольку таблицаЗначения содержит дробные значения, нам необходимо преобразовать значения RGB в дробные значения.

Значения цвета обычно находятся в диапазоне [0,255].

Чтобы преобразовать их в дроби, разделите их на 255. Например, розовый цвет имеет следующие значения RGB:

R: 254 G: 32 B: 141

Преобразовав их в дробь, получим:

R: 254/255 = .

996078431 G: 32/255 = .

125490196 B: 141/255 = .

552941176

Аналогично для значений желтого цвета получаем:

R: .

984313725 G: .

941176471 B: .

478431373

Теперь, когда у нас есть значения цвета, пришло время создать карту градиента.

Ранее мы упоминали, что когда мы предоставляем значения таблицаЗначения для использования в функции стол , браузер будет использовать таблицаЗначения чтобы создать диапазон.

Итак, начнем с предоставления значений RGB двух цветов в качестве значений RGB для составляющих элементов:

<feComponentTransfer color-interpolation-filters="sRGB"> <feFuncR type="table" tableValues=".

996078431 .

984313725"></feFuncR> <feFuncG type="table" tableValues=".

125490196 .

941176471"></feFuncG> <feFuncB type="table" tableValues=".

552941176 .

478431373"></feFuncB> </feComponentTransfer>



Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

В предыдущей статье мы видели, что при использовании функции дискретный браузер создает н диапазоны для н ценности в таблицаЗначения .

Когда мы используем функцию стол , браузер создает n-1 диапазон для н ценности.

Потому что мы предоставили два таблицаЗначения для каждого компонента это означает, что мы получим один диапазон ([розовый, желтый]) для каждого.

Сейчас feComponentTransfer сделает свое дело: браузер будет последовательно просматривать каждый пиксель источника изображения.

Для каждого пикселя он получит значение красного, зеленого и синего компонентов.

Поскольку наше изображение имеет оттенки серого, значения R/G/B будут находиться в диапазоне [0, 1] = [черный, белый] (0 — полностью черный, 1 — полностью белый и оттенки серого между ними).

Затем значение каждого компонента будет сравниваться с новым диапазоном, указанным в таблицаЗначения .

Так:

  • значение красного компонента будет сопоставлено с диапазоном [.

    996078431,.

    984313725];

  • значение синего компонента будет сопоставлено с диапазоном [.

    125490196,.

    941176471];

  • зеленое значение компонента будет сопоставлено с диапазоном [.

    552941176,.

    478431373].

Таким образом, к тому моменту, когда браузер пройдет все пиксели изображения, вы замените все значения RGB в градиенте оттенков серого на значения RGB двухцветного отображения градиента.

В результате изображение станет двухцветным.



Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_6. Результат (справа) сопоставления изображения в оттенках серого (слева) с нашей картой градиента.

Наш полный код теперь выглядит так:

<svg viewBox="0 0 266 400"> <filter id="duotone"> <!-- Grab the SourceGraphic (implicit) and convert it to grayscale --> <feColorMatrix type="matrix" values=".

33 .

33 .

33 0 0 .

33 .

33 .

33 0 0 .

33 .

33 .

33 0 0 0 0 0 1 0"> </feColorMatrix> <!-- Map the grayscale result to the gradient map provided in tableValues --> <feComponentTransfer color-interpolation-filters="sRGB"> <feFuncR type="table" tableValues=".

996078431 .

984313725"></feFuncR> <feFuncG type="table" tableValues=".

125490196 .

941176471"></feFuncG> <feFuncB type="table" tableValues=".

552941176 .

478431373"></feFuncB> </feComponentTransfer> </filter> <image xlink:href=".

" width="100%" x="0" y="0" height="100%" filter="url(#duotone)"></image> </svg>

Вы можете поиграть с демо здесь: Вы можете пойти дальше и вместо предоставления только двух значений цвета для карты градиента указать три значения цвета в таблицаЗначения , создавая карту градиента с тремя цветами вместо двух.



Управляйте контрастностью и интенсивностью цвета с помощью функции гамма-передачи

Использование функции переноса компонента гамма мы можем выполнить гамма-коррекцию нашего графического источника.

Гамма-коррекция — это функция управления уровнем освещенности изображения.

Функция гамма имеет три атрибута, которые позволяют управлять функцией гамма-коррекции, которая будет использоваться для управления освещением: амплитуда, показатель степени и смещение.

Вместе они составляют следующую передаточную функцию:

C' = amplitude * pow(C, exponent) + offset

гамма можно использовать для управления общим контрастом изображения.

Увеличение атрибута показатель степени делает темные области темнее при увеличении атрибута амплитуда Делает светлые участки более сияющими.

Это, в свою очередь, увеличивает общую контрастность изображения.

Атрибут компенсировать используется для увеличения интенсивности каждого компонента, а также влияет на общее изображение: как на светлые, так и на темные участки.

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

Например, если вы примените фильтр дуотон от предыдущего участка к следующему изображению результат будет не таким «живым», как хотелось бы:

Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_7. Результат работы двухтонового фильтра.

Двухцветное изображение справа выглядит немного размытым, а цвета слегка размытыми.

Я хочу добавить контраст, чтобы он выглядел более живым.

Давайте немного увеличим амплитуда И показатель степени :

<feComponentTransfer color-interpolation-filters="sRGB"> <feFuncR type="gamma" exponent="1.5" amplitude="1.3" offset="0"></feFuncR> <feFuncG type="gamma" exponent="1.5" amplitude="1.3" offset="0"></feFuncG> <feFuncB type="gamma" exponent="1.5" amplitude="1.3" offset="0"></feFuncB> </feComponentTransfer>

Мне удалось сделать светлые области более яркими, а темные — более насыщенными:

Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_8. Результат гамма-коррекции.

Конечно, это всего лишь пример.

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

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

Если я применю ту же операцию гамма-коррекции к версии изображения в оттенках серого, я получу более благоприятное изображение:

Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_9. Результат гамма-коррекции изображения в оттенках серого.

Конечно, можно поступить наоборот и вместо увеличения контраста немного осветлить темные участки.

В этом случае вам следует уменьшить значения атрибутов.

амплитуда и/или показатель степени , а не увеличивать их.

Значение по умолчанию для обоих — 1. Значение атрибута по умолчанию компенсировать равно 0. Поиграйтесь со значениями функций гамма в следующей демонстрации, чтобы лучше понять, как они влияют на яркость и контрастность изображения:

Инструмент карты градиента SVG

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

Это отличный инструмент для дальнейшего изучения.

feComponentTransfer .



Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_10. Инструмент SVG-фильтра Карта градиента из Йокселя.

Инструмент даже позволяет настроить эффект оттенков серого, созданный с помощью feColorMatrix .

В нашем коде мы использовали равное количество каналов R, G и B для достижения эффекта оттенков серого.

Это один из способов создания изображения в оттенках серого.

Но есть и другие способы.

Например, вы можете создать эффект оттенков серого для каждого канала, что приведет к получению разных результатов в оттенках серого для каждого канала:

Эффекты фильтра SVG. Часть 4. Двухцветные изображения с использованием feComponentTransfer

Рис_11. Результат создания изображения в оттенках серого другими методами.

Я рекомендую немного поиграть с этим инструментом и проверить, как выбор эффектов меняет базовый код, поскольку это один из лучших способов узнать больше о фильтрах SVG.

Заключение

Примитивный feComponentTransfer дает нам полный контроль над цветом и альфа-компонентами наших изображений и позволяет создавать эффекты уровня Photoshop, не выходя из наших редакторов кода.

В следующей статье этой серии мы рассмотрим еще несколько примитивов, которые позволят нам воспроизвести другой эффект Photoshop, используя почти те же шаги, что и в Photoshop, и еще раз покажем, как SVG может перенести возможности редакторов изображений в Интернет. Платформа.

Мы научимся смешивать текст с цветом и текстурой фонового изображения для получения привлекательных результатов.

Оставайтесь с нами.

Теги: #CSS #веб-дизайн #svg

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.