svg在线画图代码-我要做一个矢量图编辑器(绘图工具),如何将编辑后的图形保存为svg格式的文件。
SVG和Canvas绘图(一)栅格图形
,也叫做点阵图,位图(bitmap),像素图,图像是由像素构成的,像素的多少将决定图像的显示质量和文件大小,图像的分辨率越高,其显示越清晰,文件所占的空间也就越大。图像放大时会失真,可以看到整个图像是由很多像素组合而成的。
矢量图形
使用XML来描述二维图形和绘图程序,矢量图像在放大或改变尺寸的情况下其图形质量不会有所损失。
<canvas>和<svg>都是HTML5推荐使用的图形技术,Canvas基于像素,提供2D绘制函数,是一种HTML元素类型,依赖于HTML,只能通过脚本绘制图形;SVG为矢量,提供一系列图形元素(Rect,Path,Circle,Line),还有完整的动画,事件机制,本身就能独立使用,也可以嵌入到HTML中,SVG很早就成为了国际标准,目前的稳定版本是1.1CScalableVectorGraphics(SVG)1.1(SecondEdition),两者的主要特点见下面的表格:
SVG
Canvas
图形和图表
svg和Canvas都可以表现图表(如柱状图,散点图,饼图等等),常用的图形图表库中,百度的echarts是基于Canvas实现的,D3是基于svg实现的。
xmlns属性可定义SVG命名空间(如果将SVG内嵌在HTML页面中并作为该页面提供,则不需要xmlns属性)。
使用<g>元素,可以对多个元素进行分组
path元素是SVG基本形状中功能最强大的一个,它不仅能创建其他基本形状,还能创建更多其他形状。你可以用path元素绘制矩形(直角矩形或者圆角矩形)、圆形、椭圆、折线形、多边形,以及一些其他的形状,例如贝塞尔曲线、2次曲线等。
path元素的形状是通过属性d来定义的,属性d的值是一个“命令+参数”的序列。
下面的命令可用于路径数据:(命令详情可查看)
viewBox的四个参数分别代表:最小X轴数值;最小y轴数值;宽度;高度。
用于svg整体缩放
表示虚线描边。可选值为:none,<dasharray>,inherit.其中,none表示不是虚线;<dasharray>为一个逗号或空格分隔的数值列表。表示各个虚线段的长度。可以是固定的长度值,也可以是百分比值;inherit表继承。
表示虚线的起始偏移。可选值为:<percentage>,<length>,inherit.百分比值,长度值,继承。
如果stroke-dasharray值很大,超过了描边路径的总长度,加以css动画改变stroke-dashoffset值,就会出现一段时间内描边显示从无到有。
android图片系列(2)-静态SVG图片SVG图片是一种可支持任意缩放的图片格式,使用xml定义,使用canvas中path路径来完成绘制,和我们传统使用的BitMap位图有很大的区别。
SVG在前端早就普及了,在android中是google是在5.0之后开始支持的,14年出来之后兼容是个大问题,随着2016.2V7包23.2.0版本的发布才算是有个相对完善的兼容使用方案。
SVG的概念我就不写了,拿来主义啦,原文:AndroidVector曲折的兼容之路
不瞎逼逼,我们先来看一看android中的SVG矢量图是个什么东东
看到没有,这就是一个SVG矢量图片,就是一个xml文件,右边是预览,先说下,这东西的好处:缩放不失真,体积小。这一个SVG图片只有970个字节...强大吧,比png格式的图片强的没边了吧,png我们还得适配,做多套,然后一个一个改名字复制到工程里,有了SVG妈妈再也不担心我们写作业啦...
这里需要解释下这里的几个标签:
这里有一分详细的属性说明:
好了下面开始介绍SVG啦
首先,需要讲解两个概念——SVG和Vector。
SVG,即ScalableVectorGraphics矢量图,这种图像格式在前端中已经使用的非常广泛了
Vector,在Android中指的是VectorDrawable,也就是Android中的矢量图
因此,可以说Vector就是Android中的SVG实现,因为Android中的Vector并不是支持全部的SVG语法,也没有必要,因为完整的SVG语法是非常复杂的,但已经支持的SVG语法已经够用了,特别是Path语法,几乎是Android中Vector的标配
Android以一种简化的方式对SVG进行了兼容,这种方式就是通过使用它的Path标签,通过Path标签,几乎可以实现SVG中的其它所有标签,虽然可能会复杂一点,但这些东西都是可以通过工具来完成的,所以,不用担心写起来会很复杂。
Path指令解析如下所示:
支持的指令:
M=moveto(MX,Y):将画笔移动到指定的坐标位置
L=lineto(LX,Y):画直线到指定的坐标位置
H=horizontallineto(HX):画水平线到指定的X坐标位置
V=verticallineto(VY):画垂直线到指定的Y坐标位置
C=curveto(CX1,Y1,X2,Y2,ENDX,ENDY):三次贝赛曲线
S=smoothcurveto(SX2,Y2,ENDX,ENDY)
Q=quadraticBelziercurve(QX,Y,ENDX,ENDY):二次贝赛曲线
T=smoothquadraticBelziercurveto(TENDX,ENDY):映射
A=ellipticalArc(ARX,RY,XROTATION,FLAG1,FLAG2,X,Y):弧线
Z=closepath():关闭路径
坐标轴为以(0,0)为中心,X轴水平向右,Y轴水平向下
所有指令大小写均可。大写绝对定位,参照全局坐标系;小写相对定位,参照父容器坐标系
指令和数据间的空格可以省略
同一指令出现多次可以只用一个
注意,’M’处理时,只是移动了画笔,没有画任何东西。它也可以在后面给出上同时绘制不连续线。
关于这些语法,开发者需要的并不是全部精通,而是能够看懂即可,其它的都可以交给工具来实现。
这里有一篇Androidvector标签PathData画图超详解详细描述了SVG中path的绘制
好了概念性的东西说完了,我们来看看
SVG的使用分2种,一种是静态SVG矢量图,就是本文的主角,本章节主要谈论的东西,另一种是SVG矢量动画,是SVG的高级应用,是给静态SVG加上objectAnimator动画,应用的很广泛,是实现androidicon动态交互的核心做法。
上面的SVG图大家都看到了,我们就是写一个xml的文件,里面承载的标签都是描述如何绘制我们想要的图案的,画布大小,颜色,路径等,然后交给系统去绘制。
现在让我们来看看SVG在andorid中如何应用,如何兼容5.0以下版本。
SVG虽然早早就在前端使用了,但是android上开始支持SVG的使用还是从5.0开始的,在5.0以上系统的使用很简单,和之前一样使用PNG图片一样
首先android中的SVG图片的承载方式是一个xml文件,所以UI给我们的SVG图片是不能直接使用的,这里google给我们提供加载方式
Androidstudio在2.3.3的版本中可以直接使用svg,新建一个SVGDemo项目,新建VectorAsset文件:app->main->New->VectorAsset如图所示:
我们选择LocalFile就是选择本地svg文件进行导入,对文件命名后点击Next->Finish在drawable目录下就添加了一个.xml的文件
好了这样一个svg图片我们算是加入到我们的工程里里了,可以直接使用了。当然在此之前我们把SVG图片放在那个drawable文件夹呢。对于这个问题就要说一下了:
有一点需要解释一下,svg矢量图文件我们放在drawable根目录即可。android系统不会根据你把svg矢量图存放在不同的drawable文件夹,对图片进行分辨率上的缩放,因此我们不用像使用PNG图片时准备多套图片了。我们导入SVG图片默认存放的地址就是drawable根目录,所以我们就放这里就好了,当然也可以自己写SVG图片,都是xml的,自己写完path路径后都是可以查看预览的,一般也不会自己写,都是UI的活。
这样就ok啦,5.0以上的系统SVG你就像一般png图片一样使用就好啦,你可以试一下。
SVG在4.x版本上的兼容根据SVG使用范围的变化,配置也是逐步增加的
这时imageview就不行了,我们需要使用AppCompatActivity或是AppCompatImageView,这时我们需要导入V7包
gradle需要如下配置:
系统会在4.x版本时对SVG自动生成相应的drawable图,此时SVG是没有无限拉伸特性的,gradle的配置目的是去这个
举个例子:
资源设置不能用src了,必须使用srcCompat,这时我们能看到图而不是去SVG的特性了
这时上面的设置就不够了,我们在view所在的activity或是全局添加下面的设置
然后这还不够,我们必须给SVG图片添加一个容器,比如selector,这样我们才能正常使用,比如给textview设置图片,自定义属性设置图片
这个vc_halfstart_24dp就是SVG图片
这个我们必须要添加官方的vectorDrawable支持库了,最低支持到23.2.0
这样基本就没啥问题了
SVG配合自定义view的话,就得我们读取SVG然后转换成path路径来画了,SVG实质上也是xml文件,所以解析xml文件的思路也使用,当然还有其他一些SVG转path的思路
SVG前戏—让你的View多姿多彩一文中提供了一些思路,大家不妨去看看
我要做一个矢量图编辑器(绘图工具),如何将编辑后的图形保存为svg格式的文件。在上面网页中导入SVG格式的图片,在线转换为JPEG格式后下载保存即可。
或者:
SVG查看工具AdobeSVGViewer3.03下载
绛旓細缃戦〉鏂归潰鐨勫彲浠ヨ冭檻涓嬮潰鍑犻」鎶鏈細1.HTML5鐨凜anvas鍙敤浜2d鍜3d锛坥penGL锛2.SVG鍙缉鏀剧煝閲忓浘褰紙Scalable Vector Graphics锛
绛旓細锛嶁滆冪鈥濊〃鎯呯殑缁樺埗鐢变簬鏈H5鐨勯噸鐐规槸鍒荤敾鑰冪鐨勮〃鎯咃紝浠ユ鐩磋琛ㄨ揪鍑哄娴嬭瘯缁撴灉鐨勬佸害銆傚洜姝や负浜嗚兘涓鸿冪閲忚韩瀹氬仛涓濂楅楄叮鐨勮〃鎯咃紝鎴戞眹鎬讳簡甯傞潰涓婂ぇ閮ㄥ垎鍠滈椈涔愯琛ㄦ儏鍖咃紝骞朵笖瀵逛粬浠殑鑳屾櫙杩涙晠浜嬭繘琛屽垎鍒簡瑙c俒杩欎簺琛ㄦ儏鍖呯殑鏁呬簨浣犻兘鐭ラ亾鍚楋紵]鐮旂┒杩囩▼涓垜鍙戠幇锛岀敾涓涓鑳藉鍑嗙‘琛ㄤ箟鐨勮〃鎯呭苟涓嶅鏄撱...
绛旓細鐢SVG瀹炵幇銆備娇鐢<animate>鏍囩鐨勯忔槑搴﹀睘鎬э紙opacity锛変娇涓婇潰閭e紶鍥剧殑閫忔槑搴︿粠1鍙樹负0銆<animate attributeName="opacity" style="box-sizing: border-box;" fill="freeze" dur="0.2" begin="click" from="1" to="0"></animate> 浠g爜缂栬瘧鍚庡氨鍙互澶氭鐐瑰嚮鍒囨崲浜嗐傜绫虫槸涓娆句笓鐢ㄤ簬寰俊骞冲彴鍏紬鍙...
绛旓細鍏嶈垂logo璁捐鍦ㄧ嚎鐢熸垚锛岃交鏉捐璁′笓灞瀕ogo 寮涓瀹跺簵閾哄氨瑕佹湁涓涓ソ鐨刲ogo,杩欐牱鑳藉鍋氬埌鍏嶈垂瀹d紶鐨勬晥鏋,璁╀汉浠湅鍒發ogo鏍囧織灏卞彲浠ヨ仈鎯冲埌浣犵殑鍟嗗搧,閭d箞濡備綍鍋氫竴涓logo鍛?缁欏ぇ瀹舵帹鑽愪竴涓厤璐筶ogo鍦ㄧ嚎鐢熸垚鐨勭綉绔:杩涘叆logo璁捐鐨勭綉绔欎腑,鎴戜滑鍙互鐪嬪埌杩欐槸涓涓笓涓氱殑logo璁捐骞冲彴,鍙互閫夋嫨浜哄伐璁捐,鍚戣璁″笀鎻愬嚭浣犵殑...
绛旓細浣犲彲浠ュ湪缃戜笂鎼滅储杩欎簺搴撶殑瀹樻柟鏂囨。鍜屾暀绋嬫潵瀛︿範濡備綍浣跨敤瀹冧滑銆傝繕鏈変竴浜鍦ㄧ嚎瀛︿範骞冲彴锛屼緥濡俉3School鍜孧DN Web Docs锛屾彁渚涗簡璇︾粏鐨凥TML銆丆SS鍜孞avaScript鏁欑▼銆傚彟澶栵紝浣犱篃鍙互鍙傝冧竴浜涚被浼肩殑椤圭洰鎴栫ず渚浠g爜鏉ヨ幏鍙栫伒鎰熷拰瀛︿範銆傚湪GitHub绛変唬鐮佹墭绠″钩鍙颁笂锛屼綘鍙互鎵惧埌寰堝寮婧愮殑瀹囧畽鏄熺郴鍥捐氨椤圭洰锛屽彲浠ユ煡鐪嬪畠浠殑浠g爜鍜...
绛旓細JSXGraph鏄涓涓璺ㄦ祻瑙堝櫒搴撹繘琛屼簰鍔ㄥ嚑浣曪紝鍑芥暟缁樺浘锛屽埗鍥撅紝骞跺湪Web娴忚鍣ㄤ腑鐨勬暟鎹彲瑙嗗寲銆傚畬鍏ㄥ疄鐜板湪JavaScript涓紝涓嶄緷璧栦簬浠讳綍鍏朵粬鐨勫簱锛屽苟浣跨敤SVG锛孷ML锛屾垨甯嗗竷銆侸SXGraph瀹规槗宓屽叆锛屽叿鏈夊崰鍦伴潰绉皬锛氬皬浜100 K瀛楄妭锛屽鏋滃祵鍏ュ湪缃戦〉涓傛棤鎻掍欢锛佸凡閲囧彇鐗瑰埆鎶ょ悊锛屼互浼樺寲鎬ц兘銆13. Humble Finance HumbleFinance...
绛旓細浣犲ソ锛孉I鏄寚Adobe Illustrator锛屾槸涓娆惧浘褰㈠鐞嗚蒋浠讹紝鎮ㄨ鐨勫浣曞皢AI鍋氬ソ鐨SVG鍥炬爣杞垚web鍙敤鐨勶紝SVG 鎸囧彲浼哥缉鐭㈤噺鍥惧舰锛屽仛鎴怌SS锛岃繖涓渶瑕佺敤HTML,CSS缁撳悎鐫鍘诲仛鐨勶紝浠g爜瀹炵幇銆
绛旓細绠鍗曟潵璇达細灏辨槸缁欏浘鏂囨坊鍔犱簡涓涓鎺у埗璇勮鍖鸿烦鍔ㄧ殑浠g爜銆傛坊鍔犳柟娉曪細1銆佹墦寮i鎺掔増缂栬緫鍣紙缃戝潃锛氱綉椤甸摼鎺ワ級锛岄鍏堢紪杈戞帓濂借嚜宸辩殑姝f枃鍐呭銆2銆佸鍒朵笅鏂规帶鍒惰烦鍔ㄧ殑浠g爜锛屾墦寮i鎺掔増鍙充笂鏂圭殑 HTML锛屽皢浠g爜绮樿创鍦ㄦ渶搴曢儴灏卞彲浠ュ暒銆<svg style="transform: rotateZ(0deg);"> <animate fill="freeze" attribute...
绛旓細涓夌浉琛ュ伩杩涚浉鐢靛閫氬父鏄笁瑙掓帴绾匡紝涓夌浉鍥涚嚎寮忓垎鐩歌ˉ鍋跨數瀹瑰櫒瑕佺敤Y鎺ョ嚎锛屼腑鎬х嚎鎺ョ郴缁熶腑鎬х嚎锛屽叾棣涓夌浉鎺ヤ笁鐩革紝鍒嗙浉涓埆鎶曞叆锛屽氨瑕佸崟鐙帴鐢电寮鍏筹紝濡傛灉鐢ㄨ嚜鍔ㄧ殑璇濓紝涓夌浉涓埆瑕佽鍔熷洜琛紝鍙瀹氳緭鍑虹殑锛屽姛鍥犲灏戝埌澶氬皯锛岃鎶曞叆澶氬ぇ鐨勭數瀹瑰櫒锛瑕佸仛涓鐢靛鍣ㄧ粍鍙脊鎬ц皟鑺傘
绛旓細濡傛灉浣犳槸10KV鐨勮ˉ鍋匡紝鍙閫夌敤瀵瑰簲10KV鐨SVG灏卞彲浠ャ傝繛鎺ョ殑鍙樺帇鍣ㄥ彧鏄捣鍒伴檷鍘嬩綔鐢紝浣嗕笉鏄负浜嗛檷瀹屽悗閫夌敤6KV鐨勮ˉ鍋挎煖 Y/鈻宠〃绀虹殑鎰忔濇槸涓夌浉鍏辫ˉ鍜屽垎鐩歌ˉ鍋跨殑鏂瑰紡锛屽悗鑰呯殑琛ュ伩绮惧害鍐嶉珮锛屽浜庝笁鐩镐笉骞宠 鐨勭幆澧冭ˉ鍋挎晥鏋滄洿鏈夐拡瀵规с傛垜鍙槸鍋氫綆鍘嬭繖涓鍧楋紝鎵浠ヤ綘鐨勪竴閮ㄥ垎闂涔熻В绛斾笉浜嗭紝鎶辨瓑锛佷綘鍙互鍐嶅弬鑰...