SVG裁切和蒙版
前面的话
本文将详细介绍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裁切和蒙版的更多相关文章
- SVG图形引用、裁切、蒙版
SVG图形引用.裁切.蒙版,使用三个标签: 1. <use>标签创建图形引用 2. <clipPath>标签裁切图形 3. <mask>标签创建蒙版 ...
- o'Reill的SVG精髓(第二版)学习笔记——第十章
10.1 裁剪路径 创建SVG文档时,可以通过制定感兴趣区域的宽度和高度建立视口.这会变成默认的裁剪区域,任何绘制在该范围外部的部分都不会显示.你也可以使用<clipPath>元素来建立自 ...
- CSS3全览_动画+滤镜
CSS3全览_动画+滤镜 目录 CSS3全览_动画+滤镜 1. 列表和生成的内容 2. 变形 3. 过渡 4. 动画 5. 滤镜, 混合, 裁剪和遮罩 6. 针对特定媒体的样式 作者: https:/ ...
- 9. svg学习笔记-裁剪和蒙版
裁剪 在svg中进行剪切,对整个svg元素而言,可以使用<svg>元素的viewbox属性,对于单个元素则可以使用<clipPath>元素.在单个图形元素上使用裁剪,可以在&l ...
- svg路径蒙版动画
svg路径蒙版动画,是比较实用的一种动画效果,能够绘制如下图所示的动画. 接下来细说这样的动画是如何做成的: 1.准备工作 2.SVG路径动画 3.SVG路径蒙版动画 4.复杂图形的编辑技巧 1.准备 ...
- css3 svg路径蒙版动画
css3 svg路径蒙版动画 具体看https://www.cnblogs.com/oubenruing/p/9568954.html 还有个更好控制的写法<pre><!DOCTYP ...
- HTML5 学习总结(四)——canvas绘图、WebGL、SVG
一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 ...
- canvas绘图、WebGL、SVG
目录 一.Canvas 1.1.创建canvas元素 1.2.画线 1.3.绘制矩形 1.4.绘制圆弧 1.5.绘制图像 1.6.绘制文字 1.7.随机颜色与简单动画 二.WebGL 2.1.HTML ...
- svg.js教程及使用手册详解(一)
做毕设的时候,因为要使用到画图和自定义动画,所以接触到了SVG.网上关于SVG和Canvas的对比很多,具体的辨析这里就不赘言.网上关于SVG的所谓教程基本上都是SVG本身,但是却没有一个针对svg. ...
随机推荐
- 25. leetcode 217. Contains Duplicate
217. Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your ...
- POJ 1113 Wall (凸包)
Description Once upon a time there was a greedy King who ordered his chief Architect to build a wall ...
- Java面试容易容易出现的一些考点
考点内容是我个人的一点看法,不代表一定是这些,后面会慢慢继续补充 请写出final.finally.finalize的区别 1.final和finally都是关键字.而finalize是一个方法,是属 ...
- Codeforces 556 A Case of the Zeros and Ones
A. Case of the Zeros and Ones time limit per test 1 second memory limit per test 256 megabytes input ...
- 笨办法用js屏蔽被http劫持的浮动广告
最近发现网站经常在右下角弹出一个浮动广告,开始的时候以为只是浏览器的广告. 后来越来越多同事反映在家里不同浏览器也会出现广告.然后深入检查了下,发现网站竟然被劫持了. 然后百度了一大堆资料,什么htt ...
- hdu--1028--Ignatius and the Princess III (母函数)
Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...
- 微信小程序简单入门2
底部tab "tabBar": {"list": [{"pagePath": "pages/lists/lists",& ...
- js调试的时候用console.log("变量"+scrollTop+windowHeight)
console.log("变量"+scrollTop+windowHeight) alert会打断程序,但是console.log("变量"+scrollTop ...
- 关于Thread类的简单使用
线程:线程也被称为轻量级进程,进程和线程都提供一个执行环境,但创建一个新的线程比创建一个新的进程资源要少得多 线程存在进程里,也就是说一个进程至少包括一个线程 线程共享进程的资源,包括内存和打开的文件 ...
- java参数传递
关于方法的参数传递,java中方法的参数传递均为值传递,根据传递的类型以及方法中对参数的处理可以分为2类: 1.传递参数为基本数据类型,因为是值传递,所以方法运行结束后对传递参数的值无影响. 2.传递 ...