web开发中svg图片的使用

一、相关概念

1、位图与矢量图概念及对比

  • 位图 :又叫点阵图或像素图,计算机屏幕上的图你是由屏幕上的发光点(即像素)构成的,每个点用二进制数据来描述其颜色与亮度等信息,这些点是离散的,类似于点阵。多个像素的色彩组合就形成了图像,称之为位图。代表格式.png,.jpg,.gif等。
  • 矢量图: 又叫向量图,是用一系列计算机指令来描述和记录一幅图,一幅图可以解为一系列由点、线、面等到组成的子图,它所记录的是对象的几何形状、线条粗细和色彩等。生成的矢量图文件存储量很小,特别适用于文字设计、图案设计、版式设计、标志设计、计算机辅助设计(CAD)、工艺美术设计、插图等。主流格式 SVG格式、 WMF文件格式、 EMF文件格式、EPS文件格式 、DXF文件格式等。
  • 位图矢量图 的区别:

第一、变现程度的区别, 位图可以用来表现真实事物的真实且详尽的面貌。位图的分辨率越高就能表现得越详尽、越细腻,如,表现某事物的质地、纹理、发丝、毛孔、颜色的细微变化、颜色的千变万化等。矢量图只用来表现真实世界中的事物大概面貌-大概的轮廓与大致的颜色,不能表现千万种不规则变化的真实事物画面。或者用来表现人脑中想向出来的而现实中没有的事物,比如,各种徽标、设计图纸、卡通画。

第二、来源区别,简单的说,一张 位图最初来源于对真实事务的拍摄,而矢量图来源主要来源人工绘制。

第三、计算机上保存的本质不同,位图保存的是构成这张图像的颜色信息(点即像素)。而文件大小会随着像素信息大小变化,例如,存储一个纯红色矩形,如果是100*100的图像,将保存10000个像素信息。如果把图像长宽变为原来的2倍图像保存,则文件大小将增加到原来的4倍。而 矢量图保存在电脑上,保存的是绘制出这张图像的方法,包括图像中某些点的坐标值和需要填
充的颜色。同样保存一个纯红色矩形时,相当于只保存了矩形的四个角坐标值个需要填充的红色这几个信息,如果要把矩形长宽放大到原2倍保存,只是改变了原信息中的4个角的坐标值。文件大小基本没有改变。

2、web开发中常用图片比较

图片格式 压缩方式 透明度 动画 浏览器兼容 适用场景
JPEG 有损压缩 不支持 不支持 所有 适用于层次丰富、色彩较多的照片、摄影等图像
JPEG2000 有、无损压缩 不支持 不支持 所有 适用于层次丰富、色彩较多的照片、摄影等图像;比JPEG更高的压缩率,同时支持有损无损压缩;支持渐变传输,从模糊到清晰(JPEG从上到下显示)
PNG 有、无损压缩 支持 不支持 所有(IE8一下可兼容处理) 适用于色彩简单、对比强烈的图像,像icon图标等;高保真效果,高压缩比,支持透明;支持渐进传输,整体从模糊到清晰
GIF 有、无损压缩 支持 支持 所有 适用于图像动画,兼容性好;体积小,适合网络传输;
SVG 无损压缩 支持 支持 所有(IE9及以下课通过降级兼容) 矢量图形,可缩放;无需多端、多分辨率适配;支持多种编辑,具有较强的交互特性;
WebP 有损压缩 支持 支持 支持chromium内核浏览器 Android4.0+ 其他版本和ios可插件兼容 高压缩比,适合网络快速传输

3、svg格式图片详细介绍

  • 可缩放矢量图形(Scalable Vector Graphics,SVG)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG由W3C制定,是一个开放标准。由于SVG文件可嵌入JavaScript(严格地说,应该是ECMAScript)脚本来控制SVG对象,所以在进行Web中JS绘图时算是考虑的一种。
  • 发展历程
    2001年9月4日,发布SVG 1.0
    2003年1月4日,发布SVG 1.1
    2003年1月14日,推出SVG移动子版本:SVG Tiny和SVG Basic
    2008年12月22日,發布SVG Tiny 1.2
    2011年8月16日,發布SVG 1.1(第2版),成为W3C目前推荐的标准
    W3C目前仍正在研究制定SVG 2
  • 浏览器及终端兼容性


    062126-58634.png

二、svg基本操作

1、svg基本形状绘制

  • 对于 SVG 图形,需要使用 XML 标记来创建形状,下表给出了这些 XML 元素。
元素 描述
line 创建一条简单的线。
polyline 定义由多个线定义构成的形状。
rect 创建一个矩形。
circle 创建一个圆形。
ellipse 创建一个椭圆。
polygon 创建一个多边形。
path 支持任意路径的定义。

示例: 使用path元素创建一个自定义形状

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<path d="M300,200 h-150 a150,150 0 1,0 150,-150 z"
fill="red" stroke="blue" stroke-/>
<path d="M275,175 v-150 a150,150 0 0,0 -150,150 z"
fill="yellow" stroke="blue" stroke-/>
<path d="M600,350 l 50,-25
a25,25 -30 0,1 50,-25 l 50,-25
a25,50 -30 0,1 50,-25 l 50,-25
a25,75 -30 0,1 50,-25 l 50,-25
a25,100 -30 0,1 50,-25 l 50,-25"
fill="none" stroke="red" stroke-/>

</svg>

2、svg渐变效果

  • 渐变 是从一种颜色到另一种颜色逐渐的过渡。渐变具有两种基本形式:线性和径向渐变。所应用的渐变类型由您使用的元素确定。以下示例展示了应用于一个椭圆形的线性和径向渐变

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<linearGradient id="grad1" x1="0%" y1="0%"
x2="100%" y2="0%">
<stop offset="0%"
style="stop-color:rgb(255,255,0);stop-opacity:1"/>
<stop offset="100%"
style="stop-color:rgb(255,0,0);stop-opacity:1"/>
</linearGradient>
</defs>
<ellipse cx="200" cy="70" rx="85" ry="55"
fill="url(#grad1)"/>
</svg>

3、svg滤镜效果

  • 可以使用过滤器向 SVG 图形应用特殊的效果。SVG 支持以下过滤器。

feBlend
feColorMatrix
feComponentTransfer
feComposite
feConvolveMatrix
feDiffuseLighting
feDisplacementMap
feFlood
feGaussianBlur
feImage
feMerge
feMorphology
feOffset
feSpecularLighting
feTile
feTurbulence
feDistantLight
fePointLight
feSpotLight

示例:创建矩形的投影效果

<svg xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<filter id="f1" x="0" y="0"
width="200%" height="200%">
<feOffset result="offOut" in="SourceAlpha"
dx="20" dy="20"/>
<feGaussianBlur result="blurOut"
in="offOut" stdDeviation="10"/>
<feBlend in="SourceGraphic"
in2="blurOut" mode="normal"/>
</filter>
</defs>
<rect stroke="green"
stroke- fill="yellow" filter="url(#f1)"/>
</svg>

三、svg的web编辑

1、参考svg在线编辑器

2、js开源项目

3、php相关处理

  • Imagick2.0 图像处理库,绘制svg格式的矢量图,svg格式转换,支持转换为png等位图格式。参考手册http://php.net/manual/zh/book.imagick.php
  • xml操作,由于svg基于xml文档,可以直接根据规则处理xml文档,达到图形处理的效果。示例(移除指定属性的图片元素):

//读取svg文件
$xmlpatch = './test.svg';
$_id = '888_333';
//初始dom文档类
$doc = new DOMDocument();
$doc -> formatOutput = true;
$domElemsToRemove = [];
if($doc -> load($xmlpatch)) {
$root = $doc->documentElement;
//根据标签读取元素
$elm = $root->getElementsByTagName('path');
foreach ($elm as $new) {
//判断标签内属性值
if ($new->getAttribute('signwith') == $_id) {
$domElemsToRemove[] = $new;
}
}
}
//批量移除匹配到的元素
foreach( $domElemsToRemove as $domElement ){
$domElement->parentNode->removeChild($domElement);
}
//输出
echo $doc->saveXML();

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 这篇文章是一个名为Web和界面设计与矢量系列的一部分。 创建一组光面标签并将其保存为Web 快速提示:如何使用外观...
    平面设计知识库阅读 3,510评论 0 9
  • 图像(image) 常用的图像文件存储格式: CDR格式 该格式是CoreDraw软件专用的一种图形文件存储格式;...
    我才不是稻草人阅读 1,585评论 0 0
  • 一、什么是SVG? SVG指可伸缩矢量图形(Scalable Vector Graphics); SVG用来定义用...
    清心挽风阅读 1,386评论 1 3
  • 1. SVG 简单介绍 1.1 是什么 SVG是指可伸缩矢量图形 (Scalable Vector Graphic...
    皇马船长阅读 7,436评论 0 7
  • 夏夜雨潺潺 不过是让我更思念你 夏日有梧桐 桐花落了 才有桐叶绿绿 第一场夏雨 总让我梦里窥见 你冒暴雨听梧桐的样...
    莫怨东风阅读 668评论 28 19