ajstarks/svgo

GitHub: ajstarks/svgo

SVGo 是一个遵循 SVG 1.1 规范的 Go 语言库,通过编程方式将矢量图形直接输出到 io.Writer,解决服务端动态生成 SVG 的需求。

Stars: 2248 | Forks: 173

# SVGo:一个用于生成 SVG 的 Go 库 该库按照可缩放矢量图形 (Scalable Vector Graphics) 1.1 规范 () 生成 SVG。 输出将发送到指定的 io.Writer。 ## 支持的 SVG 元素和函数 ### 形状、线条、文本 circle, ellipse, polygon, polyline, rect (包括 roundrects), line, text ### 路径 general, arc, cubic 和 quadratic bezier paths, ### 图像和渐变 image, linearGradient, radialGradient, ### 变换 translate, rotate, scale, skewX, skewY ### 动画 animate, animateMotion, animateTranslate, animateRotate, animateScale, animateSkewX, animateSkewY ### 滤镜效果 filter, feBlend, feColorMatrix, feColorMatrix, feComponentTransfer, feComposite, feConvolveMatrix, feDiffuseLighting, feDisplacementMap, feDistantLight, feFlood, feGaussianBlur, feImage, feMerge, feMorphology, feOffset, fePointLight, feSpecularLighting, feSpotLight,feTile, feTurbulence ### 元数据元素 desc, defs, g (style, transform, id), marker, mask, pattern, title, (a)ddress, link, script, use ## 构建和使用 有关函数调用的图形化视图,请参见 svgdef.[svg|png|pdf] 用法:(假设已设置 GOPATH) ``` go get github.com/ajstarks/svgo go install github.com/ajstarks/svgo/... ``` 你可以使用 godoc 从命令行浏览文档: ``` $ go doc github.com/ajstarks/svgo ``` 一个生成 SVG 到标准输出的极简程序。 ``` package main import ( "github.com/ajstarks/svgo" "os" ) func main() { width := 500 height := 500 canvas := svg.New(os.Stdout) canvas.Start(width, height) canvas.Circle(width/2, height/2, 100) canvas.Text(width/2, height/2, "Hello, SVG", "text-anchor:middle;font-size:30px;fill:white") canvas.End() } ``` 在 Web 服务器中绘图:(http://localhost:2003/circle) ``` package main import ( "log" "github.com/ajstarks/svgo" "net/http" ) func main() { http.Handle("/circle", http.HandlerFunc(circle)) err := http.ListenAndServe(":2003", nil) if err != nil { log.Fatal("ListenAndServe:", err) } } func circle(w http.ResponseWriter, req *http.Request) { w.Header().Set("Content-Type", "image/svg+xml") s := svg.New(w) s.Start(500, 500) s.Circle(250, 250, 125, "fill:none;stroke:black") s.End() } ``` 你可以使用支持 SVG 的浏览器(已在 Chrome, Opera, Firefox 和 Safari 上测试)查看 SVG 输出,或任何其他 SVG 用户代理(例如 Batik Squiggle)。 ### 使用 SVGo 和 svgplay 进行图形草图绘制 结合 svgplay 命令,SVGo 可以用来在浏览器中用代码进行“绘制”。 要使用 svgplay 和 SVGo,首先转到包含你代码的目录,然后运行: ``` $ svgplay 2014/06/25 22:05:28 ☠ ☠ ☠ Warning: this server allows a client connecting to 127.0.0.1:1999 to execute code on this computer ☠ ☠ ☠ ``` 接下来在浏览器中打开你刚刚启动的 svgplay 服务器。 svgplay 仅监听 localhost,默认使用端口 1999(猜猜 SVG 是哪一年首次引入的) ``` http://localhost:1999/ ``` 在文本区域输入你的代码,准备好运行时按 Shift--Enter。代码将被编译,结果显示在右侧。要更新,请更改代码并重复此操作。请注意,编译错误会以红色显示在代码下方。为了使 svgplay/SVGo 正常工作,请确保使用 New 函数指定的 io.Writer 是 os.Stdout。 如果你想对现有文件进行草图绘制,请输入其 URL: ``` http://localhost:1999/foo.go ``` ![SVGplay](https://farm4.staticflickr.com/3859/14322978157_31c0114850.jpg) ### SVGo 论文和演示 * 来自 SVGOpen 2011 的 SVGo 论文 * 使用 SVGo 绘制图片 * SVGo 研讨会 ### 教程视频 可以在 YouTube 上观看描述如何使用该包的视频: ## 包内容 * svg.go: 库 * newsvg: 编码模板命令 * svgdef: 创建 API 的 SVG 表示 * animate: 动画演示 * am: Animate motion 演示 * amt: Animate 变换演示 * android: Android Logo * bubtrail: 气泡轨迹 * bulletgraph: 子弹图 (Bullet Graphs) (通过 Stephen Few) * colortab: 显示带有 RGB 值的 SVG 命名颜色 * compx: 组件图 * flower: 随机“花朵” * fontcompare: 比较两种字体 * f50: 根据查询从 Flickr 获取 50 张照片 * fe: 滤镜效果 * funnel: 由透明圆组成的漏斗 * gradient: 线性和径向渐变 * html5logo: 带有可拖拽元素的 HTML5 Logo * imfade: 显示图像淡入淡出 * lewitt: Sol Lewitt 的墙壁绘画 91 的版本 * ltr: Layer Tennis 混搭 * marker: 测试标记 * paths: 演示 SVG 路径 * pattern: 测试图案 * planets: 展示太阳系的尺度 * pmap: 比例地图 * randcomp: 比较随机数生成器 * richter: Gerhard Richter 的 256 种颜色 * rl: 随机线条 (Processing 演示的移植) * skewabc: 倾斜 ABC * span: 文本跨度 * stockproduct: 可视化产品和股票价格 * svgopher: SVGo 吉祥物 * svgplay: SVGo 草图绘制服务器 * svgplot: 绘制数据 * svgrid: 在网格中组合 SVG 文件 * tsg: Twitter 搜索网格 * tumblrgrid: Tumblr 图片网格 * turbulence: Turbulence 滤镜效果 * vismem: 可视化来自文件的数据 * webfonts: 使用 Google Web Fonts 的 "Hello, World" * websvg: 作为 Web 服务器生成 SVG ## 函数和类型 许多函数使用 x, y 来指定对象的位置,并使用 w, h 来指定对象的宽度和高度。 在适用的情况下,最后一个可选参数指定要应用于对象的样式。 样式字符串遵循 SVG 标准;由分号分隔的 name:value 对,或一系列 name="value" 对。例如:`"fill:none; opacity:0.3"` 或 `fill="none" opacity="0.3"` (参见: ) SVG 类型: ``` type SVG struct { Writer io.Writer } ``` 大多数操作都是此类型的方法,用于指定输出的目标 io.Writer。 Offcolor 类型: ``` type Offcolor struct { Offset uint8 Color string Opacity float64 } ``` 用于指定线性和径向渐变中停止颜色的偏移量、颜色和不透明度 Filterspec 类型: ``` type Filterspec struct { In string In2 string Result string } ``` 用于指定滤镜效果的输入和结果 ### 结构、脚本、元数据、变换和链接 ``` New(w io.Writer) *SVG ``` 构造函数,指定输出目标。 ``` Start(w int, h int, attributes ...string) ``` 以宽度 w 和高度 h 开始 SVG 文档。可选择添加附加元素(例如额外的 namespace 或脚本事件) ``` Startview(w, h, minx, miny, vw, vh int) ``` 以宽度 w、高度 h 开始 SVG 文档,并带有一个位于 minx, miny, vw, vh 的 viewBox。 ``` Startunit(w int, h int, unit string, ns ...string) ``` 开始 SVG 文档,宽度和高度使用指定单位。可选择添加附加元素(例如额外的 namespace 或脚本事件) ``` Startpercent(w int, h int, ns ...string) ``` 开始 SVG 文档,宽度和高度使用百分比。可选择添加附加元素(例如额外的 namespace 或脚本事件) ``` StartviewUnit(w, h int, unit string, minx, miny, vw, vh int) ``` 以宽度 w、高度 h(使用指定单位)开始 SVG 文档,并带有一个位于 minx, miny, vw, vh 的 viewBox。 ``` End() ``` 结束 SVG 文档 ``` Script(scriptype string, data ...string) ``` Script 定义具有指定类型的脚本(例如 "application/javascript")。 如果第一个可变参数是一个 link,则仅使用该 link 引用。 否则,将可变参数视为脚本的文本(标记为 CDATA)。 如果未指定数据,则只需关闭 script 元素。 ``` Style(scriptype string, data ...string) ``` Style 定义具有指定类型的脚本(例如 "text/css")。 如果第一个可变参数是一个 link,则仅使用该 link 引用。 否则,将可变参数视为脚本的文本(标记为 CDATA)。 如果未指定数据,则只需关闭 style 元素。 ``` Group(s ...string) ``` 开始一个带有任意属性的组 ``` Gstyle(s string) ``` 使用指定的 style 开始一个组。 ``` Gid(s string) ``` 使用指定的 id 开始一个组。 ``` Gtransform(s string) ``` 使用指定的 transform 开始一个组,以 Gend() 结束。 ``` Translate(x, y int) ``` 开始将坐标平移到,以 Gend() 结束。 ``` Scale(n float64) ``` 将坐标系缩放 n 倍,以 Gend() 结束。 ``` ScaleXY(x, y float64) ``` 将坐标系按 x, y 缩放。以 Gend() 结束。 ``` SkewX(a float64) ``` SkewX 将 x 坐标系倾斜角度 a,以 Gend() 结束。 ``` SkewY(a float64) ``` SkewY 将 y 坐标系倾斜角度 a,以 Gend() 结束。 ``` SkewXY(ax, ay float64) ``` SkewXY 分别将 x 和 y 坐标系倾斜 ax, ay,以 Gend() 结束。 ``` Rotate(r float64) ``` 将坐标系旋转 r 度,以 Gend() 结束。 ``` TranslateRotate(x, y int, r float64) ``` 将坐标系平移到,然后旋转 r 度,以 Gend() 结束。 ``` RotateTranslate(x, y int, r float64) ``` 将坐标系旋转 r 度,然后平移到,以 Gend() 结束。 ``` Gend() ``` 结束组(必须与 Gstyle, Gtransform, Gid 配对使用)。 ``` ClipPath(s ...string) ``` 开始一个 ClipPath ``` ClipEnd() ``` 结束一个 ClipPath ``` Def() ``` 开始一个定义块。 ``` DefEnd() ``` 结束一个定义块。 ``` Marker(id string, x, y, w, h int, s ...string) ``` 定义一个 marker ``` MarkerEnd() ``` 结束一个 marker ``` Mask(id string, x int, y int, w int, h int, s ...string) ``` 创建一个具有指定 id、尺寸和可选 style 的 mask。 ``` MaskEnd() ``` 结束 Mask 元素。 ``` Pattern(id string, x, y, width, height int, putype string, s ...string) ``` 使用指定的尺寸定义一个 Pattern,putype 可以是 "user" 或 "obj",这会将 patternUnits 属性分别设置为 userSpaceOnUse 或 objectBoundingBox。 ``` Desc(s string) ``` 指定描述的文本。 ``` Title(s string) ``` 指定标题的文本。 ``` Link(href string, title string) ``` 开始一个名为 "href" 的 link,带有指定的 title。 ``` LinkEnd() ``` 结束 link。 ``` Use(x int, y int, link string, s ...string) ``` 将 link 引用的对象放置在 x, y 位置。 ### 形状 ``` Circle(x int, y int, r int, s ...string) ``` 绘制一个圆,以 x,y 为圆心,半径为 r。 ![圆](http://farm5.static.flickr.com/4144/5187953823_01a1741489_m.jpg) ``` Ellipse(x int, y int, w int, h int, s ...string) ``` 绘制一个椭圆,以 x,y 为圆心,x 轴和 y 轴半径分别为 w 和 h。 ![椭圆](http://farm2.static.flickr.com/1271/5187953773_a9d1fc406c_m.jpg) ``` Polygon(x []int, y []int, s ...string) ``` 使用 x, y 坐标数组绘制一系列线段。 ![多边形](http://farm2.static.flickr.com/1006/5187953873_337dc265_m.jpg) ``` Rect(x int, y int, w int, h int, s ...string) ``` 绘制一个矩形,左上角位于 x,y,宽度为 w,高度为 h。 ![矩形](http://farm2.static.flickr.com/1233/5188556032_86c90e354b_m.jpg) ``` CenterRect(x int, y int, w int, h int, s ...string) ``` 绘制一个以 x,y 为中心的矩形,宽度为 w,高度为 h。 ``` Roundrect(x int, y int, w int, h int, rx int, ry int, s ...string) ``` 绘制一个圆角矩形,左上角位于 x,y, 宽度为 w,高度为 h。圆角部分的半径由 rx(宽度)和 ry(高度)指定。 ![圆角矩形](http://farm2.static.flickr.com/1275/5188556120_e2a9998fee_m.jpg) ``` Square(x int, y int, s int, style ...string) ``` 绘制一个正方形,左上角位于 x,y,边长为 s。 ![正方形](http://farm5.static.flickr.com/4110/5187953659_54dcce242e_m.jpg) ### 路径 ``` Path(p string, s ...style) ``` 按照 s 中指定的样式,绘制 p 中指定的任意路径。 ``` Arc(sx int, sy int, ax int, ay int, r int, large bool, sweep bool, ex int, ey int, s ...string) ``` 绘制一个椭圆弧,起始坐标为 sx,sy,结束坐标为 ex, ey 弧的宽度和高度由 ax, ay 指定,x 轴旋转角度为 r 如果 sweep 为 true,则弧将沿“正角度”方向(顺时针)绘制, 如果为 false,则弧沿逆时针方向绘制。 如果 large 为 true,则弧扫掠角度大于或等于 180 度, 否则弧扫掠角度小于 180 度。 ![圆弧](http://farm2.static.flickr.com/1300/5188556148_df1a176074_m.jpg) ``` Bezier(sx int, sy int, cx int, cy int, px int, py int, ex int, ey int, s ...string) ``` 绘制一条三次贝塞尔曲线,起始于 sx,sy,结束于 ex,ey 控制点位于 cx,cy 和 px,py。 ![贝塞尔曲线](http://farm2.static.flickr.com/1233/5188556246_a03e67d013.jpg) ``` Qbezier(sx int, sy int, cx int, cy int, ex int, ey int, tx int, ty int, s ...string) ``` 绘制一条二次贝塞尔曲线,起始于 sx, sy,结束于 tx,ty 控制点位于 cx,cy, ex,ey。 ![二次贝塞尔曲线](http://farm2.static.flickr.com/1018/5187953917_9a43cf64fb.jpg) ``` Qbez(sx int, sy int, cx int, cy int, ex int, ey int, s...string) ``` 绘制一条二次贝塞尔曲线,带有可选 style,起始于 sx,sy,结束于 ex, sy 控制点位于 cx, cy。 ![二次贝塞尔](http://farm6.static.flickr.com/5176/5569879349_5f726aab5e.jpg) ### 线条 ``` Line(x1 int, y1 int, x2 int, y2 int, s ...string) ``` 在 x1,y1 和 x2,y2 之间绘制一条线段。 ![线段](http://farm5.static.flickr.com/4154/5188556080_0be19da0bc.jpg) ``` Polyline(x []int, y []int, s ...string) ``` 使用 x,y 数组中指定的坐标绘制一个多边形。 ![折线](http://farm2.static.flickr.com/1266/5188556384_a863273a69.jpg) ### 图像和文本 ``` Image(x int, y int, w int, h int, link string, s ...string) ``` 将 link 引用的图像放置在 x,y(左上角),宽度为 w,高度为 h。 ![图像](http://farm5.static.flickr.com/4058/5188556346_e5ce3dcbc2_m.jpg) ``` Text(x int, y int, t string, s ...string) ``` 根据 s 中指定的可选 style,将指定的文本 t 放置在 x,y。 ``` Textspan(x int, y int, t string, s ...string) ``` 根据 s 中指定的可选 style,将指定的文本 t 放置在 x,y。 将此方法与 Span(...) 一起使用。以 TextEnd() 结束 ``` Span(t string, s ...string) ``` 使用可选 style s 创建一个文本跨度 t ``` TextEnd() ``` 结束一个文本跨度 ``` Textlines(x, y int, s []string, size, spacing int, fill, align string) ``` 将 s 中的多行文本放置在起始位置 x,y,并指定大小、填充、对齐方式和间距。 ``` Textpath(t string, pathid string, s ...string) ``` 沿着先前定义的路径放置可选的带样式文本。 ![图像](http://farm4.static.flickr.com/3149/5694580737_4b291df768_m.jpg) ### 颜色 ``` RGB(r int, g int, b int) string ``` 为由 (r)ed、g(reen)、(b)lue 分量指定的填充颜色创建样式字符串。 ``` RGBA(r int, g int, b int, a float64) string ``` 同上,但包含颜色的不透明度作为值 介于 0.0(完全透明)和 1.0(不透明)之间。 ### 渐变 ``` LinearGradient(id string, x1, y1, x2, y2 uint8, sc []Offcolor) ``` 构造由 id 标识的线性颜色渐变, 沿由 (x1,y1) 和 (x2,y2) 定义的向量。 sc 中定义了停止颜色序列。坐标以百分比表示。 ![线性渐变](http://farm5.static.flickr.com/4153/5187954033_3972f63fa9.jpg) ``` RadialGradient(id string, cx, cy, r, fx, fy uint8, sc []Offcolor) ``` 构造由 id 标识的径向颜色渐变, 以 为中心,半径为 r。 (fx, fy) 定义光源焦点的位置。 sc 中定义了停止颜色序列。 坐标以百分比表示。 ![径向渐变](http://farm2.static.flickr.com/1302/5187954065_7ddba7b819.jpg) ### 动画 ``` Animate(link, attr string, from, to int, duration float64, repeat int, s ...string) ``` Animate 使用指定的属性为 link 引用的项目设置动画 动画从坐标 from 开始,在 to 结束,并按指定重复。 可根据需要添加附加属性。 ``` AnimateMotion(link, path string, duration float64, repeat int, s ...string) ``` AnimateMotion 使引用的对象 ```link``` 沿着指定的 ```path``` 运动 ``` AnimateTranslate(link string, fx, fy, tx, ty int, duration float64, repeat int, s ...string) ``` AnimateTranslate 为平移变换设置动画(link 指代要设置动画的对象,fx, fy 是起始坐标,tx, ty 是目标坐标) ``` AnimateRotate(link string, fs, fc, fe, ts, tc, te int, duration float64, repeat int, s ...string) ``` AnimateRotate 为旋转变换设置动画(link 指代要设置动画的对象,f[s,c,e] 是起始、中心和结束角度,t[s,c,e] 是起始、中心和结束角度) ``` AnimateScale(link string, from, to, duration float64, repeat int, s ...string) ``` AnimateScale 为缩放变换设置动画(link 指代要设置动画的对象,from 和 to 指定缩放因子) ``` AnimateSkewX(link string, from, to, duration float64, repeat int, s ...string) ``` AnimateSkewX 为 skewX 变换设置动画(link 指代要设置动画的对象,from 和 to 指定倾斜角度) ``` AnimateSkewY(link string, from, to, duration float64, repeat int, s ...string) ``` AnimateSkewY 为 skewY 变换设置动画(link 指代要设置动画的对象,from 和 to 指定倾斜角度) ### 滤镜效果 ``` Filter(id string, s ...string) ``` Filter 开始一个滤镜集 标准参考: ``` Fend() ``` Fend 结束一个滤镜集 标准参考: ``` FeBlend(fs Filterspec, mode string, s ...string) ``` FeBlend 指定一个混合 (Blend) 滤镜原语 标准参考: ``` FeColorMatrix(fs Filterspec, values [20]float64, s ...string) ``` FeColorMatrix 指定一个颜色矩阵 (color matrix) 滤镜原语,带有矩阵值 标准参考: ``` FeColorMatrixHue(fs Filterspec, value float64, s ...string) ``` FeColorMatrix 指定一个颜色矩阵 (color matrix) 滤镜原语,带有色调值 标准参考: ``` FeColorMatrixSaturate(fs Filterspec, value float64, s ...string) ``` FeColorMatrix 指定一个颜色矩阵 (color matrix) 滤镜原语,带有饱和度值 标准参考: ``` FeColorMatrixLuminence(fs Filterspec, s ...string) ``` FeColorMatrix 指定一个颜色矩阵 (color matrix) 滤镜原语,带有亮度值 标准参考: ``` FeComponentTransfer() ``` FeComponentTransfer 开始一个 feComponent 滤镜元素> 标准参考: ``` FeCompEnd() ``` FeCompEnd 结束一个 feComponent 滤镜元素> ``` FeComposite(fs Filterspec, operator string, k1, k2, k3, k4 int, s ...string) ``` FeComposite 指定一个 feComposite 滤镜原语 标准参考: ``` FeConvolveMatrix(fs Filterspec, matrix [9]int, s ...string) ``` FeConvolveMatrix 指定一个 feConvolveMatrix 滤镜原语 标准参考: ``` FeDiffuseLighting(fs Filterspec, scale, constant float64, s ...string) ``` FeDiffuseLighting 指定一个漫反射照明 (diffuse lighting) 滤镜原语, 作为光源元素>的容器,以 DiffuseEnd() 结束 ``` FeDiffEnd() ``` FeDiffuseEnd 结束一个漫反射照明滤镜原语容器 标准参考: ``` FeDisplacementMap(fs Filterspec, scale float64, xchannel, ychannel string, s ...string) ``` FeDisplacementMap 指定一个 feDisplacementMap 滤镜原语 标准参考: ``` FeDistantLight(fs Filterspec, azimuth, elevation float64, s ...string) ``` FeDistantLight 指定一个 feDistantLight 滤镜原语 标准参考: ``` FeFlood(fs Filterspec, color string, opacity float64, s ...string) ``` FeFlood 指定一个填充 (flood) 滤镜原语 标准参考: ``` FeFuncLinear(channel string, slope, intercept float64) ``` FeFuncLinear 是 feFunc 的线性形式 标准参考: ``` FeFuncGamma(channel, amplitude, exponent, offset float64) ``` FeFuncGamma 是 feFunc 的伽马曲线形式 标准参考: ``` FeFuncTable(channel string, tv []float64) ``` FeFuncGamma 是使用值表的 feFunc 形式 标准参考: ``` FeFuncDiscrete(channel string, tv []float64) ``` FeFuncGamma 是使用离散值的 feFunc 形式 标准参考: ``` FeGaussianBlur(fs Filterspec, stdx, stdy float64, s ...string) ``` FeGaussianBlur 指定一个高斯模糊 (Gaussian Blur) 滤镜原语 标准参考: ``` FeImage(href string, result string, s ...string) ``` FeImage 指定一个 feImage 滤镜原语 标准参考: ``` FeMerge(nodes []string, s ...string) ``` FeMerge 指定一个 feMerge 滤镜原语,包含 feMerge 元素> 标准参考: ``` FeMorphology(fs Filterspec, operator string, xradius, yradius float64, s ...string) ``` FeMorphologyLight 指定一个 feMorphologyLight 滤镜原语 标准参考: ``` FeOffset(fs Filterspec, dx, dy int, s ...string) ``` FeOffset 指定 feOffset 滤镜原语 标准参考: ``` FePointLight(x, y, z float64, s ...string) ``` FePointLight 指定一个 fePointLight 镜原语 标准参考: ``` FeSpecularLighting(fs Filterspec, scale, constant float64, exponent int, color string, s ...string) ``` FeSpecularLighting 指定一个镜面照明 (specular lighting) 滤镜原语, 作为光源元素的容器,以 SpecularEnd() 结束 ``` FeSpecEnd() ``` FeSpecularEnd 结束一个镜面照明滤镜原语容器 标准参考: ``` FeSpotLight(fs Filterspec, x, y, z, px, py, pz float64, s ...string) ``` FeSpotLight 指定一个 feSpotLight 滤镜原语 标准参考: ``` FeTile(fs Filterspec, in string, s ...string) ``` FeTile 指定平铺 (tile) 实用滤镜原语 标准参考: ``` FeTurbulence(fs Filterspec, ftype string, bfx, bfy float64, octaves int, seed int64, stitch bool, s ...string) ``` FeTurbulence 指定一个湍流 (turbulence) 滤镜原语 标准参考: ### 滤镜便捷函数(仿照 CSS 滤镜效果) ``` Blur(p float64) ``` 按标准差的模糊 (Blur) 函数 ``` Brightness(p float64) ``` 亮度 (Brightness) 函数 (0-100) ``` Grayscale() ``` 对图像应用灰度滤镜 ``` HueRotate(a float64) ``` 旋转色调 (0-360 度) ``` Invert() ``` 反转图像的颜色 ``` Saturate(p float64) ``` 百分比饱和度,0 为灰度 ``` Sepia() ``` 应用棕褐色滤镜 ### 实用工具 ``` Grid(x int, y int, w int, h int, n int, s ...string) ``` 绘制一个直线网格,起始于 x,y,宽度为 w,高度为 h,尺寸大小为 n。 ![网格](http://farm5.static.flickr.com/4133/5190957924_7a31d0db34.jpg)
标签:EVTX分析, 日志审计