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>

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

时间: 2024-08-24 15:30:26

SVG裁切和蒙版的相关文章

SVG图形引用、裁切、蒙版

SVG图形引用.裁切.蒙版,使用三个标签: 1. <use>标签创建图形引用 2. <clipPath>标签裁切图形 3. <mask>标签创建蒙版  <use>标签 <use>标签使用URI引用一个<g>,<svg>或其他具有一个唯一的ID属性和重复的图形元素.复制的是原始的元素,因此文件中的原始存在只是一个参考,原始影响到所有副本的任何改变. <use>标签,使用xlink:href属性引用图形

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

裁剪 在svg中进行剪切,对整个svg元素而言,可以使用<svg>元素的viewbox属性,对于单个元素则可以使用<clipPath>元素.在单个图形元素上使用裁剪,可以在<defs>元素中声明一个<clipPath>元素,在<clipPath>元素中使用图形元素绘制一个选区,然后在要使用裁剪的元素上使用clip-path属性引用声明的<clipPath>元素即可. 示例1: <!DOCTYPE html> <htm

svg蒙版

这个SVG文字遮罩效果的思路是在文字下面放一张图片,然后通过CSS使文字以外的区域不可见.如果单纯的使用HTML代码来完成这种效果,只有使用像Flash/Silverlight之类的工具.而使用SVG来制作则可以十分轻松的完成 第一种是使用CSS来制作.通过CSS的mask属性也可以实现文字遮罩效果: #myImg { mask: url(#myMask); } 这个解决方案十分直接简单,但不幸的是,它不能在webkit内核的浏览器上工作,如google chrome浏览器. 第二种解决方案是使

svg蒙版mask

mask的形状,fill黑色可见,白色不可见. <svg width="400" height="300"> <defs> <mask id="small-rect"> <rect x="0" y="0" width="400" height="300" fill="white"></rect&

HTML学习总结(四)【canvas绘图、WebGL、SVG】

一.Canvas canvas是HTML5中新增一个HTML5标签与操作canvas的javascript API,它可以实现在网页中完成动态的2D与3D图像技术.<canvas> 标记和 SVG以及 VML 之间的一个重要的不同是,<canvas> 有一个基于 JavaScript 的绘图 API,而 SVG 和 VML 使用一个 XML 文档来描述绘图.SVG 绘图很容易编辑与生成,但功能明显要弱一些. canvas可以完成动画.游戏.图表.图像处理等原来需要Flash完成的一

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

HTML5 学习总结(四)--canvas绘图.WebGL.SVG 目录 一.Canvas 1.1.创建canvas元素 1.2.画线 1.3.绘制矩形 1.4.绘制圆弧 1.5.绘制图像 1.6.绘制文字 1.7.随机颜色与简单动画 二.WebGL 2.1.HTML5游戏开发 2.2.1.Cocos2D-HTML5 2.2.2.Egret(白鹭引擎) 三.SVG 3.1.SVG Hello Wrold 3.2.多种引入SVG的方法 3.3.画直线 3.4.画椭圆 3.5.文本与矩形 3.6.向

关于Android中使用SVG特性的探索与总结

前言 引入SVG还需要从图片的数字化说起.一般来说,将图片存储为数据有两种方案.其一.就是我们传统使用的位图(光栅图).即将图片看成在平面上密集排布的点的集合.每个点发出的光有独立的频率和强度,反映在视觉上,就是颜色和亮度.位图拥有一个庞大的家族,包括常见的JPEG/JPG, GIF, TIFF, PNG, BMP等.第二种方案就是矢量图(SVG就是其中的一种).它用抽象的视角看待图形,记录其中展示的模式而不是各个点的原始数据.它将图片看成各个"对象"的组合,用曲线记录对象的轮廓,用某

理解SVG坐标系和变换:视窗,viewBox和preserveAspectRatio

SVG元素不像HTML元素一样由CSS盒模型管理.这使得我们可以更加灵活定位和变换这些元素-也许一眼看上去不太直观.然而,一旦你理解了SVG坐标系和变换,操纵SVG会非常简单并且很有意义.本篇文章中我们将讨论控制SVG坐标系的最重要的三个属性:viewport, viewBox, 和 preserveAspectRatio. 这是本系列三篇文章中的第一篇,这篇文章讨论SVG中的坐标系和变换. 理解SVG坐标系和变换(第一部分)-viewport,viewBox,和preserveAspectRa

icon-font与svg

icon font 使用与svg应用分享 icon font 字体概述 css3增加了@font-face属性,传统的浏览器是通过font-family来设置字体,如果系统里没有的话就用其它字体来代替. 有了@font-face属性就方便多了,可以由开发人员通过设计自定义字体来进行的,加载过程是浏览器通过下载字体,再进行渲染页面 font-face可以设置自定义自体,也可以设置自定义图片字体,font icon由此诞生.@font-face 引入生成好的字体文件 ,然后在网 页中需要使用某个图标