花潮论坛

搜索
热搜: 活动 交友 discuz
查看: 143|回复: 45

svgdr教程·滤镜

[复制链接]
  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

    发表于 2024-11-16 09:42 | 显示全部楼层 |阅读模式

    请马上登录,朋友们都在花潮里等着你哦:)

    您需要 登录 才可以下载或查看,没有账号?立即注册

    x
    本帖最后由 马黑黑 于 2024-11-16 20:44 编辑

    滤镜

    一、滤镜指令 filter

    指令:filter()

    参数:(fId, fecode)

    语法:filter(fId, fecode) 或简写成 f(fId, fecode)

    参数解释:

    ① fId - 必须,所创建滤镜 filter 元素的id标识符,字符型
    ② fecode - 必须,字符型,具体滤镜 HTML代码,例如 :<feOffset in="SourceGraphic" dx="5" dy="5" />
    * 具体滤镜代码建议使用反引号``包裹,这样代码可以分行书写、代码内的小角引号可以正常使用,详见后面的示例代码

    二、使用滤镜指令 filterTo

    指令:filterTo()

    参数:id

    语法:filterTo(fId) 或简写为 f2(fId)

    参数解释:

    fId 参数为事先使用 filter() 或 f() 指令创建的 filter 元素的id,必须,字符型
    * filterTo() 或 f2() 意为为当前所创建的实体元素(例如rect、circle)等添加前面所创建的 id="fId" 的 filter 滤镜

    下面举例说明:代码示例中,先创建 id="f1" 的 filter 滤镜,具体滤镜是 feColorMatrix,接着绘制两张图片来源一致的图片,第一张图片原始输出,第二张图片使用 f1 滤镜修饰,代码和效果如下——

    //f('f1', `...`); //简写也可以
    dr.filter('f1', `
    	<feColorMatrix type="hueRotate" values="180" in="SourceGraphic" />
    `);
    dr.image('https://638183.freep.cn/638183/small/sunbirds.jpg')
    dr.image('https://638183.freep.cn/638183/small/sunbirds.jpg', 160).filterTo('f1');
    	

    svgdr绘制指令生成的SVG代码:

    feColorMatrix 滤镜使用矩阵原理对目标对象进行颜色转换,type 属性为转换类型,示例使用了业已存在的矩阵封装 hueRotate 即色相转换,可选值还有诸多个封装好的类型,另有一个自由度极高的 matrix 类型交由用户自己封装 4*5 的矩阵转换机制;values 属性指转换类型的值,示例中设为180,即将图像颜色体系每一个像素的色相通过矩阵运算都加上180度;in 属性是滤镜的作用对象,一般而言,常用到的值是 SourceGraphic(图像)或 SourceAlpha(alpha通道),示例使用前者,表示直接作用于目标图像即后面用 image() 指令绘制的第二张图片。更多的 feColorMatrix 滤镜知识可自行查阅。

    svg滤镜数量并不太多,可用的滤镜加起来也就是二、三十个,常用的十来个。不过svg滤镜有一定的学习难度,掌握他们需要较多的学习成本,感兴趣的朋友可以量体裁衣,通过 简单教程·svg滤镜 或其他资源逐一了解学习。以下是较为常见的20个svg滤镜:

    feBlend - 混合滤镜
    feColorMatrix - 色彩矩阵变换滤镜
    feComponentTransfer 颜色通道转换函数滤镜 ?
    feComposite - 图像像素智能组合滤镜
    feConvolveMatrix - 矩阵卷积滤镜
    feDiffuseLighting - 光滤镜 :漫反射滤镜
    feDisplacementMap - 映射置换滤镜
    feDropShadow - 投影滤镜
    feFlood - 纯色填充滤镜
    feGaussianBlur - 高斯模糊滤镜
    feImage - 图像滤镜(获取外部图像作为滤镜源)
    feMerge - 叠加滤镜(将多个滤镜进行叠加)
    feMorphology - 生态学滤镜
    feOffset - 偏移滤镜
    feSpecularLighting 光滤镜 :镜面反射滤镜
    feTile - 填充矩形滤镜(类似于pattern)
    feTurbulence - 湍流滤镜
    feDistantLight - 光源滤镜 :距离光源
    fePointLight 光源滤镜 :点滤镜
    feSpotLight - 光源滤镜 :聚光灯光源

    svgdr 没有封装创建具体滤镜 fe* 的指令,但可以使用 draw() 指令先创建 filter,再创建 fe* 滤镜并添加到 filter 中。下面以创建文本阴影为例加以说明:/p>

    dr.draw('filter', {id: 'f2'}); //创建 id="f2" 的filter标签
    //创建 feDropShadow 滤镜
    dr.draw('feDropShadow', {
    	dx: 2,
    	dy: 2,
    	stdDeviation: 4,
    	'flood-color': '#000',
    	'flood-opacity': .75
    }).addTo('f2');
    //绘制文本并应用 id="f2" 的滤镜
    dr.text('Hello', 50, 120, 'red').style('font: bold 100px Arial, sans-serif').f2('f2');
    	

    效果如下:

    上述效果的SVG代码:

    返回目录

    评分

    参与人数 5威望 +200 金钱 +400 经验 +200 收起 理由
    小辣椒 + 50 + 100 + 50 赞一个!
    梦江南 + 30 + 60 + 30 很给力!
    樵歌 + 50 + 100 + 50 赞一个!
    红影 + 50 + 100 + 50 赞一个!
    泡沫 + 20 + 40 + 20 很给力!

    查看全部评分

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2024-11-16 11:47 | 显示全部楼层
    先创建 id="f1" 的 filter 滤镜,再filterTo('f1')添加到相应实体元素。。这个结构先理解再说。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2024-11-16 11:50 | 显示全部楼层
    至于滤镜二、三十个常用滤镜样式,看单词结尾部分,能想起个大概。。
    比如阴影,模糊,亮度对比度,颜色等,好象每一部分里又有更多种小项,需要慢慢熟悉。

    这个滤镜看着篇幅不大,内容很不少
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2024-11-16 11:55 | 显示全部楼层
    文本添加阴影滤镜跟图片添加滤镜绘制代码有点区别。。SVG代码结构无二。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2024-11-16 12:15 | 显示全部楼层
    feBlend
    feColorMatrix
    feComponentTransfer
    feComposite
    feConvolveMatrix
    feDiffuseLighting
    feDisplacementMap
    feDropShadow
    feFlood
    feGaussianBlur
    feImage
    feMerge
    feMorphology
    feOffset
    feSpecularLighting
    feTile
    feTurbulence
    feDistantLight
    fePointLight
    feSpotLight

    认出来几个,多数不认得,
    刚看到老师昨天的美女贴,里面介绍 ” feMorphology 滤镜被称为生态学滤镜“
    小白申请中文对应翻译。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-11-16 12:16 | 显示全部楼层
    先知道一下svgdr的滤镜的简写,否则以后会迷糊:
    也就是 滤镜指令中可以把filter('名称', `...`)简写为 f('名称', `...`)
               滤镜使用中可以把filterTo('名称')简写为 f2('名称')
    当然不简写也可以,这样理一下防止看到简写时迷糊
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-1 20:32
  • 签到天数: 1052 天

    [LV.10]以坛为家III

    1881

    主题

    32万

    回帖

    37万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女虎龙狗猪多彩人生星月交辉海样胸怀火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀相遇之美一往情深花好月圆心香一瓣紫色情节飞龙在天金剪刀天籁妙音妙笔生花风雨同行我心永远天长地久幸福快乐绚丽缤纷喜乐安康中秋征文周年庆指尖上的流年舞会之星分析(喊冤)章总结章杀人王小强章最佳杀刺临屏写诗七夕诗钟活动第五届风云第六届风云情人节花潮管理

    发表于 2024-11-16 12:24 | 显示全部楼层
    “svg滤镜数量并不太多,可用的滤镜加起来也就是二、三十个,常用的十来个。”
    这还不多啊,每一个里面还有分类呢。去搜了一下例子中用到的feColorMatrix,type也分hueRotate、saturate、luminanceToAlpha、matrix等,能弄明白一个都不容易呢,何况那么多个
     
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-11-16 12:35 | 显示全部楼层
    红影 发表于 2024-11-16 12:24
    “svg滤镜数量并不太多,可用的滤镜加起来也就是二、三十个,常用的十来个。”
    这还不多啊,每一个里面还 ...

    滤镜是svg高级应用之一,对滤镜不熟悉的可能感觉很难,熟悉的瞧一眼就能在代码 中用上
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-11-16 12:37 | 显示全部楼层
    红影 发表于 2024-11-16 12:16
    先知道一下svgdr的滤镜的简写,否则以后会迷糊:
    也就是 滤镜指令中可以把filter('名称', `...`)简写为 f( ...

    svgdr 里有不少简写的指令,多数简写指令不带全写的,比如 w() 、h() 就没有对应的 width()、height()
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-11-16 12:38 | 显示全部楼层
    泡沫 发表于 2024-11-16 11:47
    先创建 id="f1" 的 filter 滤镜,再filterTo('f1')添加到相应实体元素。。这个结构先理解再说。。

    这个不难理解吧?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-11-16 12:39 | 显示全部楼层
    泡沫 发表于 2024-11-16 11:50
    至于滤镜二、三十个常用滤镜样式,看单词结尾部分,能想起个大概。。
    比如阴影,模糊,亮度对比度,颜色等 ...

    每一个滤镜作用不一样,所以,除了共通的属性,还有私有属性
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-11-16 12:40 | 显示全部楼层
    泡沫 发表于 2024-11-16 12:15
    feBlend
    feColorMatrix
    feComponentTransfer

    这个需要整理一下:目前对应的中文滤镜名称没有多少个,老的w3c官网和简单教程里,也就给了一小半不到的名称
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-11-16 12:41 | 显示全部楼层
    泡沫 发表于 2024-11-16 11:55
    文本添加阴影滤镜跟图片添加滤镜绘制代码有点区别。。SVG代码结构无二。

    其实这是通用的,例子中滤镜都可以用于图形和文本。

    在svg,实现阴影的方法有很多种
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-16 07:14
  • 签到天数: 648 天

    [LV.9]以坛为家II

    1376

    主题

    7万

    回帖

    13万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥多彩人生海样胸怀春风拂面青草情怀心曲飞扬七彩绚丽活泼开朗男儿情怀鹰傲苍穹共看流星风雨同行我心永远天长地久幸福快乐春意盎然喜乐安康心想事成周年庆指尖上的流年舞会之星情人节花潮管理

    发表于 2024-11-16 13:15 | 显示全部楼层
    来把分分加起
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-11-16 13:25 | 显示全部楼层
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2025-12-14 08:25
  • 签到天数: 600 天

    [LV.9]以坛为家II

    379

    主题

    1万

    回帖

    3万

    积分

    贵宾

    Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7Rank: 7

    花潮美女鼠牛虎兔龙蛇马羊猴鸡狗猪缤纷心情心曲飞扬花好月圆飞龙在天音画大师花潮贵宾

    发表于 2024-11-16 14:04 | 显示全部楼层
    来听老师讲代码。辛苦了!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2019-11-25 21:11
  • 签到天数: 1 天

    [LV.1]初来乍到

    1421

    主题

    6万

    回帖

    12万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮美女多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫缤纷心情草莓情怀青草情怀蝴蝶情怀心曲飞扬星星情怀七彩绚丽活泼开朗女儿情怀男儿情怀鹰傲苍穹心香一瓣音画大师天籁妙音风雨同行我心永远喜乐安康中秋征文指尖上的流年花潮管理

    发表于 2024-11-16 15:08 | 显示全部楼层
    这些还真的要记笔记才会记住的
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    慵懒
    2025-12-15 08:01
  • 签到天数: 1670 天

    [LV.Master]伴坛终老

    3050

    主题

    13万

    回帖

    28万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9Rank: 9

    花潮帅哥鼠牛虎兔龙蛇马羊猴鸡狗猪多彩人生星月交辉奔放热烈海样胸怀春风拂面火热情怀优雅迷人神秘浪漫相遇之美鹰傲苍穹花好月圆紫色情节飞龙在天王者至尊大将风范音画大师天籁妙音共看流星风雨同行我心永远幸福快乐喜乐安康侠骨柔肠心想事成开朗大方花潮管理

     楼主| 发表于 2024-11-16 16:13 | 显示全部楼层
    小辣椒 发表于 2024-11-16 15:08
    这些还真的要记笔记才会记住的

    关键是滤镜比较难以理解
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2024-11-16 20:37 | 显示全部楼层
    马黑黑 发表于 2024-11-16 12:38
    这个不难理解吧?

    嗯哪,毕竟先打了两个地基了都
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2023-1-13 17:25
  • 签到天数: 28 天

    [LV.4]偶尔看看III

    4

    主题

    484

    回帖

    1626

    积分

    金牌会员

    Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60Rank: 60

    多彩人生春风拂面

    发表于 2024-11-16 20:38 | 显示全部楼层
    马黑黑 发表于 2024-11-16 12:39
    每一个滤镜作用不一样,所以,除了共通的属性,还有私有属性

    且私有属性也挺多,跟子分类一样
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|服务支持:DZ动力|huachaowang.com Inc. ( 蜀ICP备17032287号-1 )

    GMT+8, 2025-12-16 07:42 , Processed in 0.282211 second(s), 25 queries .

    Powered by Discuz! X3.4

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表