学习SVG(十)滤镜

2023-11-09

什么是滤镜

  • 使用滤镜后,在SVG中不会直接将图形渲染到画布上。是先将图形的像素保存到缓存中,然后将滤镜指定的操作应用图形的像素对象中,然后在把新的图形像素对象展示在画布上。
  • 使用filter元素指定一组(滤镜元素),在渲染图形对象时,将该操作应用在最终图形上。

滤镜元素

feBlend 
feColorMatrix
feComponentTransfer
feComposite
feConvolveMatrix
feDiffuseLighting
feDisplacementMap
feFlood
feGaussianBlur
feImage
feMerge
feMorphology
feOffset
feSpecularLighting
feTile
feTurbulence
feDistantLight
fePointLight
feSpotLight
  • 滤镜元素有很多,每一个元素代表一种功能。

使用滤镜

  • 需要使用 <filter> 标签来定义一个 SVG 滤镜。设置唯一标识id属性,SVG 图形使用这个 id 来引用滤镜。
  1. 使用feGaussianBlur创建模糊效果。in="SourceGraphic"属性定义了模糊效果要应用于整个图片,stdDeviation 属性定义了模糊的程度。
  <defs>
    <filter id="ga" x="0" y="0">
      <feGaussianBlur in="SourceGraphic" stdDeviation="2"></feGaussianBlur>
    </filter>
  </defs>
  <rect x="10" y="10" width="100" height="100" fill="#ccc" filter="url(#ga)"></rect>

在这里插入图片描述

  1. 使用多个滤镜模拟阴影效果。
  <defs>
    <filter id="ga" x="0" y="0">
      <feGaussianBlur in="SourceAlpha" stdDeviation="5" result="blur"></feGaussianBlur>
      <feOffset in="blur" dx="10" dy="10" result="offsetBlur"></feOffset>
      <feMerge>
        <feMergeNode in="offsetBlur" />
        <feMergeNode in="SourceGraphic" />
      </feMerge>
    </filter>
  </defs>
  <rect x="10" y="10" width="100" height="100" fill="black" filter="url(#ga)"></rect>

在这里插入图片描述

2.1 in属性简介:SourceGraphic 表示图形元素自身将作为 <filter> 原始输入。SourceAlpha 图形元素自身将作为 <filter> 原语的原始输入,只使用元素的非透明部分。

2.2 result="blur" 通过 result元素,产出一个中间滤镜,唯一标识为blur。其他滤镜通过in属性引入中间滤镜,在已有的效果上继续操作。

2.3 feOffset元素,创建位移效果。

2.4 feMerge元素,合并多个效果。子元素feMergeNode,获取滤镜的效果输出。

2.5 <feMergeNode in="offsetBlur" /> 输出offsetBlur的结合滤镜效果。

2.6 <feMergeNode in="SourceGraphic" /> 输出SourceGraphic图形元素自身。

  • 到这里一个简单的滤镜应用就完成了。

其他滤镜使用

feColorMatrix滤镜

  • feColorMatrix元素,通过修改矩阵对颜色进行变换。
  <defs>
    <filter id="matrix">
      <feColorMatrix
        type="matrix"
        values="
        0 0 0 0   0
        0 0 0 0.9 0
        0 0 0 0.9 0
        0 0 0 1   0
      "
      ></feColorMatrix>
    </filter>
  </defs>
  <text x="10" y="100" font-size="40" style="filter: url(#matrix)">你好 SVG</text>

在这里插入图片描述

feBlend 滤镜

  • 混合模式滤镜。允许使用任意的JPG\PNG\SVG文件或带有id属性SVG元素作为输入源。
  • 模式:
  1. normal — 正常
  2. multiply — 正片叠底
  3. screen — 滤色
  4. darken — 变暗
  5. lighten— 变亮
  <defs>
    <filter id="ga" x="0" y="0" width="200" height="250">
      <feImage width="200" height="250" xlink:href="1.jpg" result="img1" />
      <feImage width="200" height="250" xlink:href="2.jpg" result="img2" />
      <feBlend mode="lighten" in="img1" in2="img2" />
    </filter>
  </defs>
  <rect x="10" y="10" width="200" height="250" fill="black" filter="url(#ga)"></rect>

在这里插入图片描述

  • 第一张变亮效果,第二张变暗效果。

总结

本文简单的介绍了一下 SVG 滤镜的使用方式。SVG的滤镜很多,有的很复杂能单独开一节将,有的很简单直接就能使用,后面会单独对一些滤镜做讲解。推举大家看张鑫旭大佬的文章。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习SVG(十)滤镜 的相关文章

  • 使用路径id获取SVG路径d属性

    我有单独的 json 包含 SVG 路径 Id 有没有办法使用路径 id 获取 SVG 路径 d 属性 或者有没有办法只使用路径 ID 来填充 SVG 路径 您可以通过调用 document getElementById 来获取路径元素 然
  • 尽管 getBoundingClientRect() 是假的,但如何将事件坐标转换为 SVG 坐标?

    我正在尝试根据鼠标的位置在 SVG 元素上动态绘制内容 不幸的是 我很难将 mousemove 事件中的鼠标坐标转换为 SVG 元素的坐标空间 这是我一直在测试的一个有缺陷的函数 CylinderDemo prototype handleM
  • SVG 剪辑路径在 Safari 上不起作用

    我有一个简单的动画 从下往上填充 svg 然后淡出 填充是使用clipPath随着使用path with a stroke dasharray stroke dashoffset 问题是clipPath在 Safari 上似乎完全被忽略了
  • 使用样式组件更改 SVG 描边的颜色

    我有一个 SVG 用作 img 标签 使用样式组件 我试图达到在悬停时更改描边颜色的程度 我导入了 SVG import BurgerOpenSvg from images burger open svg 我为它创建了一个样式组件 cons
  • 当 SVG 是编码的 CSS 背景图像时,如何更改 SVG 颜色?

    我的 CSS 文件中编码了一个 SVG 图标 如何在悬停时更改其颜色而不具有不同颜色的重复图标 在我的 CSS 文件中 我有 background image url data image svg xml 3Csvg xmlns http
  • 没有宽度/高度的 SVG 以自然尺寸渲染

    我有这个 SVG 但没有width or height属性 我有以下 HTML div class block img src https s3 eu vAmfIxVv kiwi svg div 使用以下CSS block display
  • 具有宽度/高度的 SVG 在 IE9/10/11 上无法缩放

    IE 9 10 11 存在一个已知问题 如果您有一个 SVG 文件
  • ie11 中的 SVG 问题

    我有一个 div 其高度设置为 320 像素 然后它的子元素宽度设置为 100 它的子文件是一个 SVG 文件 我将其宽度设置为容器的 200 在运行良好的 Chrome 和 Firefox 中 我得到了如下所示的漂亮图像 HTML 看起来
  • d3.js:在 SVG 线性渐变中过渡颜色?

    正如标题所说 使用D3 js 是否可以实现线性渐变的颜色过渡 例如 如果我有这个渐变 var gradient svg append svg defs append svg linearGradient attr id gradient a
  • 有没有适用于 Android 的精简版 SVG 查看器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Android 是否支持查看 SVG 文件 或者是否有适用于 Android 平台的第 3 方 SVG
  • 可以在 d3.js 中使用具有固定圆圈大小的圆圈包布局吗?

    此圆形包布局示例 http bl ocks org 4063269 http bl ocks org 4063269 非常适合我正在从事的项目 但是它会调整所有圆圈相对于彼此的大小 有没有一种简单的方法来指定每个圆的固定半径 我已经搜索了源
  • 在 SVG 路径中动态创建渐变层

    我正在使用 SVG 创建动态路径 我现在希望在我的路径中添加渐变 但我被困住了 按照我尝试的方式 我的渐变沿着图 2 所示的路径进行 而我要求它是图 1 中的那种 Current 我的渐变和描边定义如下
  • 自 JRE 1.7.0_25 起,Batik 无法进行转换

    自从我更新到 JAVA 1 7 0 25 以来 蜡染在应用转换时会抛出异常 堆栈跟踪是 java awt image ImagingOpException Unable to transform src image at java awt
  • 使用 jspdf 将 Svg 渲染为 Pdf

    我在使用 jspdf 将 svg 元素渲染为 pdf 时遇到问题 我正在使用插件https github com CBiX svgToPdf js https github com CBiX svgToPdf js 去做这个 下面是我的代码
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对
  • 将 SVG 的高度设置为行高?

    我想将我的 SVG 图像作为图标包含在标题旁边 h1 img src icon sell svg class icon Verkaufen h1 字体大小为h1 is 36px和line heigt is 1 1 我使用检查器工具发现计算出
  • SVG 到 Android 形状 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 有没有办法将 SVG 字符串渲染到 Web Worker 中的 OffscreenCanvas?

    我正在开发一个网页 对 SVG 字符串数据进行一些相当繁重的处理 因为这些字符串的大小可能达到 m bs 所以我想将 SVG 的渲染 取决于浏览器 移至工作人员 以避免阻塞 UI 我的问题是 worker 中无法访问 DOM 元素 有没有办
  • 旋转嵌套 SVG

    我在用SVG js http svgjs com并尝试使用 SVG 进行一些操作 我以前使用过 canvas 但我对其生成的图像质量非常失望 因此我决定使用纯 SVG 我设法将所有内容都改为纯 SVG 方法 除了一件事 旋转 我无法让它发挥
  • 改进 D3 序列旭日示例

    This D3示例作为我的出发点 http bl ocks org kerryrodden 7090426 http bl ocks org kerryrodden 7090426 我想更改提供图表的数据 并且我做了以下新示例 http j

随机推荐

  • 《与韩荆州书》--李白经典求职信

    白闻天下谈士相聚而言曰 生不用封万户侯 但愿一识韩荆州 何令人之景慕 一至于此耶 岂不以有周公之风 躬吐握之事 使海内豪俊奔走而归之 一登龙门 则声誉十倍 所以龙盘凤逸之士 皆欲收名定价于君侯 愿君侯不以富贵而骄之 寒贱而忽之 则三千宾中有
  • 图解Windows10下如何更换Jupyter Notebook 内核Python版本(切换原始的python环境)

    问题描述 启动Jupyter Notebook之后它会自动加载原始的python环境 如下图所示 但是自己又在Anaconda中下载了新的虚拟环境 很多库都在这个虚拟环境中 那么如何让Jupyter Notebook加载自己的这个虚拟环境呢
  • python练习.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?

    high tour hei 100 for i in range 0 10 if i 0 tour append hei else tour append 2 hei hei 2 high append hei print 总高度 tour
  • redis单机,集群搭建教程

    环境准备 Linux 版本 Centos 7 0 2009 Redis版本 redis 5 0 3 tar gz 文章目录 一 redis是什么 二 单机搭建步骤 三 集群搭建步骤 在一台机子搭建一个伪集群 总结 一 redis是什么 通常
  • LaTex 加粗(加黑)的方式

    1 基本 LaTeX技巧458 关于LaTeX数学字体加粗 mathbf 会变为粗体 但也导致数学字母斜体形式的丢失 使用 amsmath package 的 boldmath 命令 boldmath f x y 3 x y y 2xy 7
  • Failed to initialize NVML: Driver/library version mismatch

    nvidia驱动安装之后 nvidia smi 报错 Driver library version mismatch 不重启系统的解决方法 查看系统日志 确定具体报错信息 dmesg tail 8598493 408944 NVRM API
  • Unity2018新功能抢鲜

    本文首发于 洪流学堂 微信公众号 洪流学堂 让你学Unity快人几步 洪流学堂公众号回复节点 获取ShaderGraph节点详解PDF文件 带目录 Shader一直是Unity开发者的一个难关 涉及到数学 图形学 shader语法等多个难题
  • oracle 导出指定表和导入

    导出之前要注意一个问题 版本的问题 所以导出的语句应该指定版本 版本应该是要导入这些表的数据库的版本 expdp user password sid tables table1 table2 file expdp2022111 dmp ve
  • LeetCode力扣热题一百·自我解法记录(JAVA版本·仅代码)

    1 两数之和 哈希表 题目链接 力扣 两数之和 简单 import java util HashMap class Solution public int twoSum int nums int target 创建哈希表 HashMap
  • JavaScript - 插入排序的两种方式

    插入排序1 新建一个新数组 循环遍历原始数据 把原始数组内的每一个逐个插入到新数组内 在插入的时候 按照一定的顺序插入 原始数组 var arr 9 2 5 3 7 6 4 1 8 准备一个新数组 var newarr 循环遍历原始数组 f
  • 大学生团体天梯赛(第六届)

    题目地址 天梯赛 include
  • 高级信息系统项目管理师十大领域

    文章目录 一 项目整合管理 1 制定项目章程 2 制定项目管理计划 3 指导与管理项目工作 4 管理项目知识 5 监控项目工作 6 实施整体变更控制 7 结束项目或阶段 二 项目范围管理 1 规划范围管理 2 收集需求 3 定义范围 项目范
  • Flutter 常用插件

    dio http请求库 flutter swiper carousel slider 图片 轮播组件库 package info url launcher 系统库 app相关信息 打电话 发邮件等 pull to refresh flutt
  • 数据结构题目汇总

    求整数最大间隔 性能 hash算法应用 题目描述 请输出数字序列的最大间隔 请使用以下伪随机数生成函数 rand32 生成伪随机数 int seed int rand return seed seed 214013L 2531011L gt
  • 通过Restful api接口上传文件

    Restful api接口获取文件流的方法如下 from requests toolbelt import MultipartEncoder with open ch01 mp4 rb as f file stream f read m M
  • 计算机视觉实战项目(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别)

    图像分类 教程博客 传送门链接 链接 在本教程中 您将学习如何使用迁移学习训练卷积神经网络以进行图像分类 您可以在 cs231n 上阅读有关迁移学习的更多信息 本文主要目的是教会你如何自己搭建分类模型 耐心看完 相信会有很大收获 废话不多说
  • 初探Javascript模块化开发

    随着简单网页逐渐变成交互复杂的网站应用 网页上的Javascript代码也变得越来越庞大 越来越复杂 加之随即而来的多人协作分工的开发方式 每个人只负责其中一个或者几个很小的功能模块 最终必须通过把各个功能模块组合才能变成一个完整的功能 而
  • 2023.9.6 Redis 的基本介绍

    目录 Redis 的介绍 Redis 用作缓存和存储 session 信息 Redis 用作数据库 消息队列 消息队列是什么 Redis 用作消息队列 Redis 的介绍 特点 内存中存储数据 奠定了 Redis 进行访问和存储时的快 可编
  • Java多线程专题-synchronized的使用

    为什么有线程安全问题 当多个线程同时共享同一个全局变量或静态变量 做写的操作时 可能会发生数据冲突问题 也就是线程安全问题 但是做读操作是不会发生数据冲突问题 使用同步方式解决线程安全 问 如何解决多线程之间线程安全问题 答 使用多线程之间
  • 学习SVG(十)滤镜

    什么是滤镜 使用滤镜后 在SVG中不会直接将图形渲染到画布上 是先将图形的像素保存到缓存中 然后将滤镜指定的操作应用图形的像素对象中 然后在把新的图形像素对象展示在画布上 使用filter元素指定一组 滤镜元素 在渲染图形对象时 将该操作应