Как снизить непрозрачность альфа-слоя в svg-фильтре?
Я пытаюсь создать логотип как SVG. Я экспортировал файл из Illustrator. На логотипе есть тень. Я просматривал XML и нашел фильтр node
<filter filterUnits="objectBoundingBox" width="200%" height="160%" x="-15%" y="-15%" id="AI_Shadow_2">
<feGaussianBlur stdDeviation="2" result="blur" in="SourceAlpha"></feGaussianBlur>
<feOffset result="offsetBlurredAlpha" in="blur" dy="0" dx="0"></feOffset>
<feMerge>
<feMergeNode in="offsetBlurredAlpha"></feMergeNode>
<feMergeNode in="SourceGraphic"></feMergeNode>
</feMerge>
Есть ли способ изменить альфу смещения сгенерированной сглаженной буквы? Я не хочу, чтобы он начинался с чистого черного цвета, я хочу, чтобы он начинался с 50% черного цвета, чтобы эффект тени был достаточно легким вокруг объекта.
Ответы
Ответ 1
Один из способов - добавить примитив фильтра feComponentTransfer
, например:
<filter id="dropshadow">
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
<feOffset dx="2" dy="2"/>
<feComponentTransfer>
<feFuncA type="linear" slope="0.2"/>
</feComponentTransfer>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
Здесь показан живой пример .
Ответ 2
Один из способов - просто использовать opacity: 0.5
. Чтобы сделать это, вместо создания фильтра, который объединяет dropshadow с исходным исходным текстом сверху, создайте фильтр для только dropshadow и примените его к тегу <use>
, который ссылается на форму источника.
Есть и другие преимущества этого подхода. Например, теперь вы можете применять отдельный стиль только к тени.
#arrow-shadow {
opacity:0.5;
}
g:hover #arrow-shadow {
opacity:0.7;
}
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="-50 -50 200 200" width="400px">
<defs>
<filter id="dropshadow" height="130%">
<feGaussianBlur in="SourceAlpha" stdDeviation="3" />
<feOffset dx="2" dy="2" result="offsetblur" />
</filter>
</defs>
<g fill="#EEE">
<use id="arrow-shadow" xlink:href="#polygon" filter="url(#dropshadow)"></use>
<polygon id="polygon"
points="58.263,0.056 100,41.85 58.263,83.641 30.662,83.641 62.438,51.866 0,51.866 0,31.611 62.213,31.611 30.605,0 58.263,0.056"/>
</g>
</svg>
Ответ 3
Альтернативный способ настройки альфа-значения - использовать примитив фильтра feColorMatrix
. Используя это, вы можете одновременно установить значение альфа и цвет тени.
Фильтр ниже умножает значение альфа на 0.2
и в то же время устанавливает цвет тени для печати красным.
<filter id="dropshadow">
<feGaussianBlur in="SourceAlpha" stdDeviation="3"/>
<feOffset dx="2" dy="2"/>
<feColorMatrix values="0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0.2 0"/>
<feMerge>
<feMergeNode/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
Но если вам нужно только изменить значение альфа-канала, возможно, лучшим вариантом будет примитив feComponentTransfer
.