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. ...
随机推荐
- 整合微信小程序的Web API接口层的架构设计
在我前面有很多篇随笔介绍了Web API 接口层的架构设计,以及对微信公众号.企业号.小程序等模块的分类划分.例如在<C#开发微信门户及应用(43)--微信各个项目模块的定义和相互关系>介 ...
- Java工程师书单(初级、中级、高级)
简介 怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序员经常会问到的问题 ...
- goroutine 加 channel 代替递归调用,突破递归调用的层级限制
package main import ( "fmt" "github.com/davecgh/go-spew/spew" "github.com/B ...
- git push解决办法: ! [remote rejected] master -> master (pre-receive hook declined)
前天准备上传一个project到GitLab上,但是试了很多次都上传不上去,报错如下: ! [remote rejected] master -> master (pre-receive hoo ...
- 拓扑排序下的有无环判定 STL方法
bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { vector<se ...
- Maven的下载和安装
1. Maven作用: 管理项目和jar包 2. jdk环境要求: maven3.3+需要jdk1.7以上的版本 3. 下载地址: http://maven.apache.org/download.c ...
- Android -- 从源码的角度一步步打造自己的TextView
1,自定义控件一直是我们的痛点,今天就和大家一点点去了解了解,首先一般的自定义控件都是继承于View类,所以我们先来看看view的一些重要的方法,这是官方文档,大家想了解更多也可以去看看,这里我展示对 ...
- String对象常用的一些方法
anchor() 创建 HTML 锚. big() 用大号字体显示字符串. blink() 显示闪动字符串. bold() 使用粗体显示字符串. charAt() 返回在指定位置的字符. charCo ...
- vs2010等宽字体设置
VS2010自带的字体非等宽,不同行的代码采用同样的缩进空格时,可能左侧未对齐. 这个里有一款字体很帮,字体名字叫Fixedsys Excelsior 3.01,下载地址:http://www.fix ...
- SQL-三级分类查询
/*SQLyog 企业版 - MySQL GUI v8.14 MySQL - 5.5.40 : Database - appinfodb******************************** ...