Большой фильтр размытия по Гауссу без раскрытия границы SVG - PullRequest
1 голос
/ 09 мая 2019

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

В настоящее время я применяю размытие по Гауссу filter к элементу mask, который расположен у курсора и показывает части большого image.

Мне бы хотелось иметь более высокую степень размытия, чтобы получить более мягкий край, но когда я увеличиваю значение атрибута stdDeviation внутри фильтра, граница SVG раскрывается - я прикрепил два изображения к проиллюстрируйте, также вы можете увидеть это в этой ручке https://codepen.io/moevbiz/pen/YbwErx

Вот мой код:

<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="100%" height="100%">
  <defs>
    <filter id="filter">
      <feGaussianBlur stdDeviation="50"/>
    </filter>
    <mask id="mask">
      <ellipse id="ellipse" cx="50%" cy="50%" rx="100" ry="100" fill="white" filter="url(#filter)"></ellipse>
    </mask>
  </defs>

  <image xlink:href="https://s3-us-west-2.amazonaws.com/s.cdpn.io/3/Harry-Potter-1-.jpg" width="100%" height="100%" mask="url(#mask)"></image>
</svg>

<img src="https://s3-us-west-2.amazonaws.com/s.cdpn.io/3/Harry-Potter-1-.jpg" alt="" />
body {
  margin: 0;
  padding: 0;
  height: 100vh;
  width: 100vw;
  overflow:hidden;
}

img {
  width: 100vw;
  height: 100vh;
  mask: url(#mask);
}
document.onmousemove=function(e) {
  var mousecoords = getMousePos(e);
  var mouseX = mousecoords.x;
  var mouseY = mousecoords.y;
  var ellipse = document.getElementById('ellipse');
  ellipse.setAttribute('cx', mouseX);
  ellipse.setAttribute('cy', mouseY)
};


function getMousePos(e) {
  return {x:e.clientX,y:e.clientY};
}

current(i want to have a larger blur than this) ток (я хочу, чтобы размытие было , а не просто увеличивать радиус эллипса)

increased blur value with visible borders увеличенное значение размытия с видимыми границами

благодарен за любые подсказки!

1 Ответ

3 голосов
/ 09 мая 2019

Вам необходимо увеличить Регион фильтра .

По умолчанию это <filter x="-10%" y="-10%" width="120%" height="120%">. Но если вы хотите использовать большое размытие, вам нужно увеличить его, чтобы учесть, как размытие расширяет пиксели дальше.

Что-то вроде <filter id="filter" x="-75%" y="-75%" width="250%" Height="250%"> работает для вашего примера.

https://codepen.io/PaulLeBeau/pen/qGboxR

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...