svg基础(六)滤镜-图像,光照效果(漫反射,镜面反射),组合

1 feImage:图像滤镜

feImage 滤镜从外部来源取得图像数据,并提供像素数据作为输出(意味着如果外部来源是一个 SVG 图像,这个图像将被栅格化。)

1.1 用法:

<feImage x="" y="" width="" height="" externalResourcesRequired ="" 
preserveAspectRatio="" xlink:href=""/>

1.2 属性:

  • x: 用户坐标系中定义x轴坐标
  • y: 用户坐标系中定义y轴坐标
  • width: foreignObject的宽度
  • height: foreignObject的高度
  • externalResourcesRequired: 当前文档中是否需要外部资源。默认值为false
  • preserveAspectRatio: 指示具有提供给定纵横比的viewBox的元素如何必须适合具有不同纵横比的视口
  • xlink:href: 定义对资源的引用
  • crossorigin: 通知浏览器请求具有cross-origin权限的图像文件

在这里插入图片描述

2 feDiffuseLighting:漫反射

2.1 用法:

 <feDiffuseLighting in="SourceGraphic"
    lighting-color=""
    surfaceScale=""
    diffuseConstant=""
    result="">
</feDiffuseLighting>

2.2 属性:

  • 阿尔法乘积因子(surfaceScale)
  • RGB乘积因子(diffuseConstant)
  • 灯光颜色(lighting-color)
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="200" height="200">
    <defs>
        <filter id="diff-light" color-interpolate-filter="sRGB" x="0" y="0">
            <feDiffuseLighting in="SourceGraphic"
                lighting-color="orange"
                surfaceScale="1"
                diffuseConstant="0.5"
                result="diffuseOutput">
                <fePointLight x="100" y="100" z="20"/>
            </feDiffuseLighting>
            <feComposite in1="diffuseOutput" in2="SourceGraphic" operator="in" result="diffuseOutput"></feComposite>
            <feBlend in1="diffuseOutput" in2="SourceGraphic" mode="screen"></feBlend>
        </filter>
    </defs>
    <circle cx="100" cy="100" r="100" filter=url(#diff-light)></circle>
  </svg>

在这里插入图片描述

3 feSpecularLighting:镜面反射

3.1 用法:

 <feSpecularLighting in="SourceGraphic"
    lighting-color=""
    surfaceScale=""
    specularConstant=""
    specularExponent=""
    result=""
    >
</feSpecularLighting>

3.2 属性:

  • 阿尔法乘积因子(surfaceScale)
  • specularConstant
  • 灯光颜色(lighting-color)
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="200" height="200">
    <defs>
        <filter id="spec-light" color-interpolate-filter="sRGB" x="0" y="0">
            <feSpecularLighting in="SourceGraphic"
			lighting-color="orange"
			surfaceScale="1"
			specularConstant="1"
			specularExponent="4"
			result="specOutput"
			>
				<feDistantLight elevation="25" azimuth="0"/>
		</feSpecularLighting>
		<feComposite in1="specOutput" in2="SourceGraphic" operator="in" result="specOutput"></feComposite>
        </filter>
    </defs>
    <circle cx="100" cy="100" r="100" filter=url(#spec-light)></circle>
  </svg>

在这里插入图片描述

4 # feComposite:组合滤镜

该滤镜执行两个输入图像的智能像素组合,在图像空间中使用以下 Porter-Duff 合成操作之一:over、in、atop、xor。另外,还可以应用一个智能组件arithmetic 操作(结果被压到 [0,1] 范围内)。

该 arithmetic 操作对组合来自<feDiffuseLighting>滤镜和来自<feSpecularLighting> 滤镜的输出以及组合纹理数据很有用。如果选择了arithmetic操作,每个结果像素都要经过下面的方程式的计算:

result = k1i1i2 + k2i1 + k3i2 + k4

在这里:

  • i1i2示了输入图像相应的像素通道值,分别映射到inin2 (en-US)`。
  • k1k2k3k4 标示了同名的属性值。

这里有一个例子可以参考:

<svg width="330" height="195" viewBox="0 0 1100 650" version="1.1"
     xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <title>Example feComposite - Examples of feComposite operations</title>
    <desc>Four rows of six pairs of overlapping triangles depicting
        the six different feComposite operators under different
        opacity values and different clearing of the background.</desc>
    <defs>
        <desc>Define two sets of six filters for each of the six compositing operators.
            The first set wipes out the background image by flooding with opaque white.
            The second set does not wipe out the background, with the result
            that the background sometimes shines through and is other cases
            is blended into itself (i.e., "double-counting").</desc>
        <filter id="overFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="over" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="inFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="in" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="outFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="out" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="atopFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="atop" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="xorFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="xor" result="comp"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="arithmeticFlood" filterUnits="objectBoundingBox"
                x="-5%" y="-5%" width="110%" height="110%">
            <feFlood flood-color="#ffffff" flood-opacity="1" result="flood"/>
            <feComposite in="SourceGraphic" in2="BackgroundImage" result="comp"
                         operator="arithmetic" k1=".5" k2=".5" k3=".5" k4=".5"/>
            <feMerge> <feMergeNode in="flood"/> <feMergeNode in="comp"/> </feMerge>
        </filter>
        <filter id="overNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="over" result="comp"/>
        </filter>
        <filter id="inNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="in" result="comp"/>
        </filter>
        <filter id="outNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="out" result="comp"/>
        </filter>
        <filter id="atopNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="atop" result="comp"/>
        </filter>
        <filter id="xorNoFlood" filterUnits="objectBoundingBox" x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" operator="xor" result="comp"/>
        </filter>
        <filter id="arithmeticNoFlood" filterUnits="objectBoundingBox"
                x="-5%" y="-5%" width="110%" height="110%">
            <feComposite in="SourceGraphic" in2="BackgroundImage" result="comp"
                         operator="arithmetic" k1=".5" k2=".5" k3=".5" k4=".5"/>
        </filter>
        <path id="Blue100" d="M 0 0 L 100 0 L 100 100 z" fill="#00ffff" />
        <path id="Red100" d="M 0 0 L 0 100 L 100 0 z" fill="#ff00ff" />
        <path id="Blue50" d="M 0 125 L 100 125 L 100 225 z" fill="#00ffff" fill-opacity=".5" />
        <path id="Red50" d="M 0 125 L 0 225 L 100 125 z" fill="#ff00ff" fill-opacity=".5" />
        <g id="TwoBlueTriangles">
            <use xlink:href="#Blue100"/>
            <use xlink:href="#Blue50"/>
        </g>
        <g id="BlueTriangles">
            <use transform="translate(275,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(400,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(525,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(650,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(775,25)" xlink:href="#TwoBlueTriangles"/>
            <use transform="translate(900,25)" xlink:href="#TwoBlueTriangles"/>
        </g>
    </defs>

    <rect fill="none" stroke="blue" x="1" y="1" width="1098" height="648"/>
    <g font-family="Verdana" font-size="40" shape-rendering="crispEdges">
        <desc>Render the examples using the filters that draw on top of
            an opaque white surface, thus obliterating the background.</desc>
        <g enable-background="new">
            <text x="15" y="75">opacity 1.0</text>
            <text x="15" y="115" font-size="27">(with feFlood)</text>
            <text x="15" y="200">opacity 0.5</text>
            <text x="15" y="240" font-size="27">(with feFlood)</text>
            <use xlink:href="#BlueTriangles"/>
            <g transform="translate(275,25)">
                <use xlink:href="#Red100" filter="url(#overFlood)" />
                <use xlink:href="#Red50" filter="url(#overFlood)" />
                <text x="5" y="275">over</text>
            </g>
            <g transform="translate(400,25)">
                <use xlink:href="#Red100" filter="url(#inFlood)" />
                <use xlink:href="#Red50" filter="url(#inFlood)" />
                <text x="35" y="275">in</text>
            </g>
            <g transform="translate(525,25)">
                <use xlink:href="#Red100" filter="url(#outFlood)" />
                <use xlink:href="#Red50" filter="url(#outFlood)" />
                <text x="15" y="275">out</text>
            </g>
            <g transform="translate(650,25)">
                <use xlink:href="#Red100" filter="url(#atopFlood)" />
                <use xlink:href="#Red50" filter="url(#atopFlood)" />
                <text x="10" y="275">atop</text>
            </g>
            <g transform="translate(775,25)">
                <use xlink:href="#Red100" filter="url(#xorFlood)" />
                <use xlink:href="#Red50" filter="url(#xorFlood)" />
                <text x="15" y="275">xor</text>
            </g>
            <g transform="translate(900,25)">
                <use xlink:href="#Red100" filter="url(#arithmeticFlood)" />
                <use xlink:href="#Red50" filter="url(#arithmeticFlood)" />
                <text x="-25" y="275">arithmetic</text>
            </g>
        </g>
        <g transform="translate(0,325)" enable-background="new">
            <desc>Render the examples using the filters that do not obliterate
                the background, thus sometimes causing the background to continue
                to appear in some cases, and in other cases the background
                image blends into itself ("double-counting").</desc>
            <text x="15" y="75">opacity 1.0</text>
            <text x="15" y="115" font-size="27">(without feFlood)</text>
            <text x="15" y="200">opacity 0.5</text>
            <text x="15" y="240" font-size="27">(without feFlood)</text>
            <use xlink:href="#BlueTriangles"/>
            <g transform="translate(275,25)">
                <use xlink:href="#Red100" filter="url(#overNoFlood)" />
                <use xlink:href="#Red50" filter="url(#overNoFlood)" />
                <text x="5" y="275">over</text>
            </g>
            <g transform="translate(400,25)">
                <use xlink:href="#Red100" filter="url(#inNoFlood)" />
                <use xlink:href="#Red50" filter="url(#inNoFlood)" />
                <text x="35" y="275">in</text>
            </g>
            <g transform="translate(525,25)">
                <use xlink:href="#Red100" filter="url(#outNoFlood)" />
                <use xlink:href="#Red50" filter="url(#outNoFlood)" />
                <text x="15" y="275">out</text>
            </g>
            <g transform="translate(650,25)">
                <use xlink:href="#Red100" filter="url(#atopNoFlood)" />
                <use xlink:href="#Red50" filter="url(#atopNoFlood)" />
                <text x="10" y="275">atop</text>
            </g>
            <g transform="translate(775,25)">
                <use xlink:href="#Red100" filter="url(#xorNoFlood)" />
                <use xlink:href="#Red50" filter="url(#xorNoFlood)" />
                <text x="15" y="275">xor</text>
            </g>
            <g transform="translate(900,25)">
                <use xlink:href="#Red100" filter="url(#arithmeticNoFlood)" />
                <use xlink:href="#Red50" filter="url(#arithmeticNoFlood)" />
                <text x="-25" y="275">arithmetic</text>
            </g>
        </g>
    </g>
</svg>

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/379712.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于鲲鹏服务NodeJs安装

准备工作 查看当前环境 uname -a查看鲲鹏云CPU架构 cat /proc/cpuinfo# 查看CPU architecture项&#xff0c;8表示v8&#xff0c;7表示v7下载Node.js NodeJs 选择 Linux Binaries (ARM) ARMv8 wget -c https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-arm64.tar.xz…

Android用setRectToRect实现Bitmap基于Matrix矩阵scale缩放RectF动画,Kotlin(一)

Android用setRectToRect实现Bitmap基于Matrix矩阵scale缩放RectF动画&#xff0c;Kotlin&#xff08;一&#xff09; 基于Matrix&#xff0c;控制Bitmap的setRectToRect的目标RectF的宽高。从很小的宽高开始&#xff0c;不断迭代增加setRectToRect的目标RectF的宽高&#xff0c…

选调生怎么搜题答案?分享四个可以搜答案的软件 #其他#知识分享#职场发展

大学生活是一个充满挑战和机遇的阶段&#xff0c;在这个阶段&#xff0c;我们需要不断提升自己的学习能力和技巧。而寻找适合自己的学习工具也成为了我们必须面对的任务。幸运的是&#xff0c;现在有许多日常学习工具可以帮助我们更好地组织学习、提高效率。今天&#xff0c;我…

Kubernetes基础(十四)-Cluster Autoscaler

Kubernetes 给出的解决方案就是&#xff1a;自动伸缩&#xff08;auto-scaling&#xff09;&#xff0c;通过自动伸缩组件之间的配合&#xff0c;可以 7*24 小时的监控着k8s集群&#xff0c;动态变化负载&#xff0c;以适应用户需求。 1 自动伸缩组件 1.1 自动伸缩类型 1.1.…

斯巴鲁Subaru EDI需求分析

斯巴鲁Subaru是日本运输集团斯巴鲁公司&#xff08;前身为富士重工&#xff09;的汽车制造部门&#xff0c;以性能而闻名&#xff0c;曾赢得 3 次世界拉力锦标赛和 10 次澳大利亚拉力锦标赛。 斯巴鲁Subaru EDI 需求分析 企业与斯巴鲁Subaru建立EDI连接&#xff0c;首先需要确…

【Linux】进程学习(二):进程状态

目录 1.进程状态1.1 阻塞1.2 挂起 2. 进程状态2.1 运行状态-R进一步理解运行状态 2.2 睡眠状态-S2.3 休眠状态-D2.4 暂停状态-T2.5 僵尸状态-Z僵尸进程的危害 2.6 死亡状态-X2.7 孤儿进程 1.进程状态 1.1 阻塞 阻塞&#xff1a;进程因为等待某种条件就绪&#xff0c;而导致的…

备战蓝桥杯---搜索(完结篇)

再看一道不完全是搜索的题&#xff1a; 解法1&#xff1a;贪心并查集&#xff1a; 把冲突事件从大到小排&#xff0c;判断是否两个在同一集合&#xff0c;在的话就返回&#xff0c;不在的话就合并。 下面是AC代码&#xff1a; #include<bits/stdc.h> using namespace …

飞书上传图片

飞书上传图片 1. 概述1.1 访问凭证2. 上传图片获取image_key1. 概述 飞书开发文档上传图片: https://open.feishu.cn/document/server-docs/im-v1/image/create 上传图片接口,支持上传 JPEG、PNG、WEBP、GIF、TIFF、BMP、ICO格式图片。 在请求头上需要获取token(访问凭证) …

Lua: 一门轻量级、高效的脚本语言

Lua: 一门轻量级、高效的脚本语言 在当今软件开发的领域中&#xff0c;寻找一门既灵活又高效的脚本语言&#xff0c;一直是开发者们追求的目标。Lua作为一门小巧、高效、可嵌入的脚本语言&#xff0c;已经成为了众多开发者的首选之一。无论是游戏开发、嵌入式系统、Web 开发还是…

左叶子之和

给定二叉树的根节点 root &#xff0c;返回所有左叶子之和。 示例 1&#xff1a; 输入: root [3,9,20,null,null,15,7] 输出: 24 解释: 在这个二叉树中&#xff0c;有两个左叶子&#xff0c;分别是 9 和 15&#xff0c;所以返回 24示例 2: 输入: root [1] 输出: 0提示: …

Office2013下载安装教程,保姆级教程,附安装包和工具

前言 Microsoft Office是由Microsoft(微软)公司开发的一套基于 Windows 操作系统的办公软件套装。常用组件有 Word、Excel、PowerPoint、Access、Outlook等。 准备工作 1、Win7 及以上系统 2、提前准备好 Office 2013 安装包 安装步骤 1.鼠标右击【Office2013(64bit)】压缩…

Mac使用AccessClient打开Linux堡垒机跳转闪退问题解决

登录公司的服务器需要使用到堡垒机&#xff0c;但是mac使用AccessClient登录会出现问题 最基础的AccessClient配置 AccessClient启动需要设置目录权限&#xff0c;可以直接设置为 权限 777 chmod 777 /Applications/AccessClient.app注: 如果不是这个路径,可以打开终端,将访达中…

HiveSQL——不及格课程数大于2的学生的平均成绩及其排名

注&#xff1a;参考文章&#xff1a; SQL 不及格课程数大于2的学生的平均成绩及其排名-HQL面试题47【拼多多】_sql 不及格人数超过两人-CSDN博客文章浏览阅读976次。0 问题描述create table scores( sid int, score int, cid int);insert into scores values(1, 90, 1),(1, 59…

Visio2013 下载安装教程,保姆级教程,附安装包和工具

前言 Visio是负责绘制流程图和示意图的软件&#xff0c;便于IT和商务人员就复杂信息、系统和流程进行可视化处理、分析和交流&#xff0c;可以促进对系统和流程的了解&#xff0c;深入了解复杂信息并利用这些知识做出更好的业务决策。帮助您创建具有专业外观的图表&#xff0c…

通过Demo学WPF—数据绑定(二)

准备 今天学习的Demo是Data Binding中的Linq&#xff1a; 创建一个空白解决方案&#xff0c;然后添加现有项目&#xff0c;选择Linq&#xff0c;解决方案如下所示&#xff1a; 查看这个Demo的效果&#xff1a; 开始学习这个Demo xaml部分 查看MainWindow.xaml&#xff1a; …

新型Black Matter勒索病毒,勒索300万美金

前言 BlackMatter勒索病毒是一款基于RAAS模式的新型勒索病毒&#xff0c;该勒索病毒组织成立于2021年7月&#xff0c;该勒索病毒黑客组织对外宣称&#xff0c;已经整合了DarkSide、REvil和LockBit等勒索病毒的最佳功能特点。 勒索病毒黑客组织曾表示不会对医疗保健、关键基础设…

【记录】记一次关于前端单元测试的全英文问卷调查( Survey: Automatically Generated Test Suites for JavaScript)

文章目录 OPENING STATEMENTBackgroundTask background: Fix the failing test casesBefore the task: Task: Fix the failing test casesTask: Executable DocumentationBefore the task: Bonus Opportunity: One more taskTask: Test Cases ClusteringRewardThank You! 原地址…

使用深度学习对视频进行分类

目录 加载预训练卷积网络 加载数据 将帧转换为特征向量 准备训练数据 创建 LSTM 网络 指定训练选项 训练 LSTM 网络 组合视频分类网络 使用新数据进行分类 辅助函数 此示例说明如何通过将预训练图像分类模型和 LSTM 网络相结合来创建视频分类网络。 要为视频…

TS学习与实践

文章目录 学习资料TypeScript 介绍TypeScript 是什么&#xff1f;TypeScript 增加了什么&#xff1f;TypeScript 开发环境搭建 基本类型编译选项类声明属性属性修饰符getter 与 setter方法static 静态方法实例方法 构造函数继承 与 super抽象类接口interface 定义接口implement…

[office] 教你如何用Excel制作施工管理日记 #其他#媒体

教你如何用Excel制作施工管理日记 对于在工地实习或者其他施工人员来说&#xff0c;常常会需要记录施工管理日记&#xff0c;其他软件的用法可以过于复杂&#xff0c;下面小编就来教你如何用Excel制作施工管理日记 对于在工地实习或者其他施工人员来说&#xff0c;常常会需要记…