Как добавить светящийся фильтр на изображение
Это эффект, который я хочу (2-й):
в фотошопе
1) дубликат слоя
2) уменьшить экспозицию нового слоя
3) добавить размытие
4) Режим наложения линейного уклонения (добавить)
программист, которого я знал, давно достиг этого эффекта, он никогда не говорил, как это делать с кодом, но давал мне инструкции, чтобы добиться того же в фотошопе.
Это было какое-то время, и я начал изучать web dev для себя, и этот эффект вызывает у меня внимание (и да, я потерял все возможные контакты с этим человеком)
сначала я думал, что это было достигнуто с помощью эффектов фильтра CSS https://www.w3schools.com/cssref/css3_pr_filter.asp
однако, несмотря на то, что он содержит размытие (%), я не могу найти способ добиться экспозиции или, что еще хуже, режима линейного наложения dodge.
Кто-нибудь знает, как на земле был сделан этот фильтр? Я предполагаю, что он не использовал CSS и вместо этого сделал это с помощью JavaScript.
Любая помощь приветствуется.
редактировать: о, вы были правы, он просто играл с этими значениями, получил хороший фильтр, но продолжит играть с ними! благодарю вас
1 ответ
Вы можете использовать различные приемы, когда вы размываете одну версию и комбинируете ее поверх оригинала, используя аддитивное смешивание.
Вот один пример использования изображения в качестве фонового изображения, где элемент after наследует изображение, добавляет размытость и композитность, используя смешивание смешивания и lighten
(lighter
AKA "add" AKA "linear-dodge", также можно использовать):
div {
background:url(https://stackru.com/images/bf10f641c552006634baf5a506b70a393b0dcc9e.png);
width:190px;
height:190px;
}
/* Create an overlay blurring the background */
div:after {
position:absolute;
content:"";
width:190px;
height:190px;
background:inherit;
filter:blur(9px); /* glow range */
opacity:0.8;
mix-blend-mode: lighten; /* lighter (add) can be used as well */
}
<div></div>
То же самое может быть достигнуто с помощью элемента canvas вместо, но так как не все браузеры поддерживают новый filter
Свойство 2D-контекста может потребоваться размыть вручную (также добавлена яркость в демонстрацию ниже).
var img = new Image; img.onload = draw; img.src = "https://stackru.com/images/bf10f641c552006634baf5a506b70a393b0dcc9e.png";
var blur = document.getElementById("blur"), blend = document.getElementById("blend"),
luma = document.getElementById("luma");
function draw() {
var ctx = c.getContext("2d");
ctx.drawImage(this, 0, 0);
ctx.filter = "brightness(" + luma.value + ") blur(" + blur.value + "px)"; // note: not all browsers support this yet (FF/Chrome OK)
ctx.globalCompositeOperation = "lighten";
ctx.globalAlpha = +blend.value;
ctx.drawImage(this, 0, 0);
ctx.filter = "none"; // reset
ctx.globalCompositeOperation = "source-over";
}
blur.oninput = blend.oninput = luma.oninput = draw.bind(img);
<div>Blur: <input id=blur type=range min=0 max=30 value=9></div>
<div>Blend: <input id=blend type=range min=0 max=1 step=0.1 value=0.8></div>
<div>Luma: <input id=luma type=range min=0.5 max=2 step=0.1 value=1></div>
<canvas width=190 height=190 id=c></canvas>