前面的话

  本文将详细介绍SVG裁切和蒙版

裁剪

  SVG中的<clipPath>的元素,专门用来定义剪裁路径。必须设置的属性是id属性,被引用时使用

  下面是一个圆形

<svg height="70" version="1.1" xmlns="http://www.w3.org/2000/svg" >
<circle cx="25" cy="25" r="25" fill="#34538b" />
</svg>

  通过引用clipPath进行路径裁剪后,如下所示

<svg height="70" version="1.1" xmlns="http://www.w3.org/2000/svg" >
<defs>
<clipPath id="clipPath1">
<rect x="0" y="0" width="20" height="20" />
</clipPath>
</defs>
<circle cx="25" cy="25" r="25" fill="#34538b" clip-path="url(#clipPath1)"/>
</svg>

  当然了, <clipPath>元素里面除了rect元素, 还可以是circle, ellipse, line, polyline, polygon, ...等等,甚至是text文本

<svg height="70" version="1.1" xmlns="http://www.w3.org/2000/svg" >
<defs>
<clipPath id="clipPath1">
<text y="20" style="font-size: 12px;">小火柴的蓝色理想</text>
</clipPath>
</defs>
<rect x="0" y="0" width="100" height="30" fill="#cd0" clip-path="url(#clipPath1)"/>
</svg>

遮罩

  与裁剪<clipPath>元素相比,遮罩<mask>元素所包含的子元素无须只具有线条性质的元素,可以包含任何可视化元素,甚至是<g>元素。这些可视化的子元素都必须带上透明度的定义,因为<mask>元素是通过透明度来控制图像与背景的遮罩效果的

  蒙版中黑色代表不可见(opacity: 0),白色代表可见(opacity: 100%)

  下面来使用黑白蒙版来制作一轮弯月

  首先制作黑白蒙版

<svg height="70" style="background:gray" version="1.1" xmlns="http://www.w3.org/2000/svg" >
<circle cx="25" cy="25" r="25" fill="white"/>
<circle cx="40" cy="15" r="25" fill="black"/>
</svg>

  接下来,将上面的两个circle元素制作为蒙版,并应用在一个圆形上,制作出一轮弯月

<svg height="70" style="background:gray" version="1.1" xmlns="http://www.w3.org/2000/svg" >
<mask id="moon-mask">
<circle cx="25" cy="25" r="25" fill="white"/>
<circle cx="40" cy="15" r="25" fill="black"/>
</mask>
<circle cx="25" cy="25" r="25" fill="yellow" mask="url(#moon-mask)"/>
</svg>

  那么黑白之间的灰色代表什么呢?从0%到100%是一个线性的变化,所以黑白中间的灰色会是半透明,而且不同灰度代表不同程度的半透明,越趋近白色可见度越高。在蒙版中的黑白渐变,应用到彩色图层上就会产生透明度的渐变

<svg height="70"  version="1.1" xmlns="http://www.w3.org/2000/svg" >
<defs>
<linearGradient id="Gradient1">
<stop offset="0" stop-color="white"/>
<stop offset="100%" stop-color="black"/>
</linearGradient>
<mask id="mask1">
<rect x="0" y="0" width="100" height="50" fill="url(#Gradient1)" />
</mask>
</defs>
<rect x="0" y="0" width="100" height="50" fill="red" mask="url(#mask1)"/>
</svg>

  如果在当前矩形下,再叠加一个其他颜色的矩形,则会出现两种颜色渐变的效果

<svg height="70"  version="1.1" xmlns="http://www.w3.org/2000/svg" >
<defs>
<linearGradient id="Gradient1">
<stop offset="0" stop-color="white"/>
<stop offset="100%" stop-color="black"/>
</linearGradient>
<mask id="mask1">
<rect x="0" y="0" width="100" height="50" fill="url(#Gradient1)" />
</mask>
</defs>
<rect x="0" y="0" width="100" height="50" fill="green"/>
<rect x="0" y="0" width="100" height="50" fill="red" mask="url(#mask1)"/>
</svg>

  [注意]如果绿色的矩形放在红色矩形后面,则不会出现以下这种效果

SVG裁切和蒙版的更多相关文章

  1. SVG图形引用、裁切、蒙版

    SVG图形引用.裁切.蒙版,使用三个标签: 1. <use>标签创建图形引用 2. <clipPath>标签裁切图形 3. <mask>标签创建蒙版  ...

  2. o'Reill的SVG精髓(第二版)学习笔记——第十章

    10.1 裁剪路径 创建SVG文档时,可以通过制定感兴趣区域的宽度和高度建立视口.这会变成默认的裁剪区域,任何绘制在该范围外部的部分都不会显示.你也可以使用<clipPath>元素来建立自 ...

  3. CSS3全览_动画+滤镜

    CSS3全览_动画+滤镜 目录 CSS3全览_动画+滤镜 1. 列表和生成的内容 2. 变形 3. 过渡 4. 动画 5. 滤镜, 混合, 裁剪和遮罩 6. 针对特定媒体的样式 作者: https:/ ...

  4. 9. svg学习笔记-裁剪和蒙版

    裁剪 在svg中进行剪切,对整个svg元素而言,可以使用<svg>元素的viewbox属性,对于单个元素则可以使用<clipPath>元素.在单个图形元素上使用裁剪,可以在&l ...

  5. svg路径蒙版动画

    svg路径蒙版动画,是比较实用的一种动画效果,能够绘制如下图所示的动画. 接下来细说这样的动画是如何做成的: 1.准备工作 2.SVG路径动画 3.SVG路径蒙版动画 4.复杂图形的编辑技巧 1.准备 ...

  6. css3 svg路径蒙版动画

    css3 svg路径蒙版动画 具体看https://www.cnblogs.com/oubenruing/p/9568954.html 还有个更好控制的写法<pre><!DOCTYP ...

  7. HTML5 学习总结(四)——canvas绘图、WebGL、SVG

    一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 ...

  8. canvas绘图、WebGL、SVG

    目录 一.Canvas 1.1.创建canvas元素 1.2.画线 1.3.绘制矩形 1.4.绘制圆弧 1.5.绘制图像 1.6.绘制文字 1.7.随机颜色与简单动画 二.WebGL 2.1.HTML ...

  9. svg.js教程及使用手册详解(一)

    做毕设的时候,因为要使用到画图和自定义动画,所以接触到了SVG.网上关于SVG和Canvas的对比很多,具体的辨析这里就不赘言.网上关于SVG的所谓教程基本上都是SVG本身,但是却没有一个针对svg. ...

随机推荐

  1. 在同一个sql语句中,统计不同条件的Count数量

    前几天帮同事优化了个SQL,原写法使用多个子查询这里不再重现了,大家都遇到过这样一种情况,在项目后期的维护中, 修改别人的SQL代码,超过30行的语句,多层子查询,读起来很坑,时间久的项目伴随着人员的 ...

  2. 双向循环链表(C语言描述)(三)

    代码清单 // linkedlist.h #ifndef __LINKEDLIST_H__ #define __LINKEDLIST_H__ #include <assert.h> #in ...

  3. NYOJ 128 前缀表达式的计算

    前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式. 而把中缀式按运算顺序加上括 ...

  4. 35. Search Insert Position【leetcode】

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  5. ChromeDriver,IEDriver,Firefox配置

    ChromeDriver: 下载ChromeDriver.exe,放入某个文件夹,如C:\Program Files (x86)\Google\Chrome\Application,把此路径加入pat ...

  6. C/C++ 知识点---排序实现

    1.冒泡排序冒泡排序是O(N^2)复杂度的排序算法,效率较低,需要N趟遍历,每次将候选集中最小的数通过交换浮到最上面: template <typename Type> void Bubb ...

  7. Centos7安装mysql-5.7.19

    Centos7安装Mysql 一 mysql下载 地址: https://dev.mysql.com/downloads/mysql/#downloads 二 在centos7上创建安装文件存放.解压 ...

  8. 关于php文件读取的一些学习记录

    初学PHP的时候使用了一些文件读取API,但是没有真正弄清楚各API的区别以及差异,于是找了一篇学习了一下,贴在这里,引用自IBM社区的一篇文章, 整体整理测试如下 <?php /** * Cr ...

  9. 【Ubuntu Desktop】安装主流桌面

    ubuntu的桌面环境实在多,在这里选了几款主流的桌面环境,大家可以按需安装使用. 1.GNOME 2 Classic 经典老界面 gnome2   after reboot,choose GNOME ...

  10. APP跨进程数据通信-访问手机联系人

    1. 简述 在实际开发中,常常需要进行不同应用程序之间的数据通信,例如读取联系人列表等等,ContentProvider就是Android提供的用于实现不同进程之间进行数据通信的类. ContentP ...