学习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(十)滤镜 的相关文章

  • 为什么媒体查询中的 CSS 旋转不会旋转回来

    我有一个 SVG 其中一些元素根据媒体查询进行旋转 如下所示 media max width 480px rect transform rotate 10deg 该元素旋转得很好 但 至少在 Chrome 中 它拒绝返回 这是为什么 其他指
  • IE11 元元素破坏 SVG

    我已将 SVG 文件数据直接嵌入到我的 html 中 它在 Chrome 和 Firefox 中显示 但在 IE11 中根本不显示 SVG 的 Pastebin 链接是http pastebin com eZpLXFfD http past
  • 2 个 SVG 路径的交集

    我需要检查两个 SVG Path 元素是否相交 检查边界框与 getBBox 太不准确了 我目前正在做的是迭代两条路径 getTotalLength 然后检查是否有两个点 getPointAtLength 是平等的 下面是一个片段 但正如您
  • 如何使用 Selenium webdriver 测试对 SVG 对象的点击?

    我正在尝试编写代码来检查单击 SVG 对象的功能 例如此 URL 上的美国州 http www amcharts com svg maps map usa 这可行 但是有更好的方法吗 不需要物理移动鼠标的东西 robert new Robo
  • 元素不适应 Firefox 上的

    使用 ES6 ish D3js 模块运行 Angular 6 应用程序会导致 Firefox 出现问题 Chromium Chrome Safari 和 IE Edge 工作正常 伪代码看起来类似于 生产代码可以在下面找到
  • 使用 PHP 将 SVG 图像转换为 PNG

    我正在开发一个网络项目 该项目涉及动态生成的美国地图 根据一组数据为不同的州着色 这个 SVG 文件为我提供了一张很好的美国空白地图 并且很容易更改每个州的颜色 困难在于 IE 浏览器不支持 SVG 因此为了让我使用 svg 提供的便捷语法
  • 底部带有三角形的 div 和背景图像

    我想做一个div 有一个底部的三角形 但我需要三角形上的背景图像为了出现 我尝试使用伪元素 after 但它不起作用 homebg after content position absolute top 100 left 0 right 0
  • GeoJson 世界数据库 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 需要使用 d3 js 显示国家和城市的地图 实际上 D3支持GeoJson格式 通常
  • 有没有办法将 SWF 转换为 SVG 格式?

    有没有办法将 FLA 或 SWF 转换为 SVG 格式 它可以是一个软件吗 或者甚至是网络转换器 我尝试了一些方法 但没有一个有效 所有这些似乎都已经过时了 不 SWF 支持的功能太多 而 SVG 格式无法创建有效的 SWF 版本 如果您只
  • 使 html svg 对象也成为可点击的链接(在 iPhone 上)

    这个问题与使 html svg 对象也成为可点击的链接 https stackoverflow com q 11374059 4825796 但给出的答案似乎不适用于 iPhone ios 9 3 safari 和 chrome 浏览器 我
  • 如何在“object”标签内选择 SVG?

    HTML 页面的内容如下所示 方法如下script js looks var tooltip d3 select body append div style position absolute sty
  • SVG线宽问题

    我开始了我的svg学习 我想用svg线做一些技巧吧 但有件事我不明白 我为每个技能创建 2 行 一行是空的 另一行是知识百分比 问题是 前两行的高度是我给出的笔画宽度的一半 其他线都有很好的高度 这是一个 jsbin http jsbin
  • 使用 Google Maps API 旋转 SVG 符号以匹配飞机航向

    我一直在尝试旋转 Google Maps API SVG 飞机符号 以便每次符号移动时都能显示飞机的正确航向 它最初加载时显示正确的标题 我似乎不知道如何将其更新为新标题 我花了两天的时间尝试 但非常失败 我想我可以通过添加来简单地改变它r
  • 高图表的分散工具提示未显示

    我有一个散点图和条形图 我无法查看酒吧上方散点的工具提示 这是小提琴http jsfiddle net tZ9Rt http jsfiddle net tZ9Rt 我正在使用这两个系列 series type scatter index 2
  • Blazor / SVG 实时更新

    我正处于使用 Blazor 开发实时 Web 应用程序的早期阶段 目的是在网页上显示与某些设备的状态有关的实时状态更新 它是机器的 HMI 可以将其视为具有实时数据更新的仪表板 机器的图形模型将使用 SVG 完成并托管在应用程序中 我正在尝
  • SVG 过滤器在 Firefox 中不显示,在 Chrome 中工作正常

    我想要深色背景上的一段深色文本外面有白色的光芒 虽然默认阴影滤镜 https developer mozilla org en US docs Web CSS filter drop shadow 2在 CSS 中 比如filter dro
  • svg 圆形描边上的多种颜色

    我想创建一个彩虹圈 如下图所示 如何绘制弯曲的多色标渐变 这是我当前的代码
  • Dimple.js - 将数据标签添加到条形图的每个条形

    我使用的是dimple js 它基于d3 js 是否可以向本示例中提到的条形图的每个条形添加数据标签http dimplejs org examples viewer html id bars vertical http dimplejs
  • 在 ipython 中使用 igraph 绘制顶点标签时出现问题

    我通常在 IPython 笔记本中工作 我使用以下命令在 Windows 上打开它 ipython qtconsole matplotlib inline 我目前正在使用 IPython QtConsole 3 0 0 Python 2 7
  • SVG 坐标与变换矩阵

    我想在矩形元素上实现像 svg edit 这样的功能 旋转矩形 调整大小 Drag 旋转 SVG 矩形效果很好 但是当我想调整矩形大小时 它就会出现问题 坐标不正确 我使用变换矩阵来旋转targetelement setAttribute

随机推荐

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

    白闻天下谈士相聚而言曰 生不用封万户侯 但愿一识韩荆州 何令人之景慕 一至于此耶 岂不以有周公之风 躬吐握之事 使海内豪俊奔走而归之 一登龙门 则声誉十倍 所以龙盘凤逸之士 皆欲收名定价于君侯 愿君侯不以富贵而骄之 寒贱而忽之 则三千宾中有
  • 图解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元素指定一组 滤镜元素 在渲染图形对象时 将该操作应