SVG网页设计工具开发指南

随着互联网技术的发展,网页设计变得越来越重要。SVG(Scalable Vector Graphics,可缩放矢量图形)因其优秀的缩放性能和灵活性,成为了网页设计中不可或缺的一部分。然而,现有的大多数SVG设计工具,如Adobe Illustrator、Inkscape、SVG-Edit等,都是从设计师的角度出发,而非程序员。对于开发者来说,需要一个能够将JavaScript、HTML与SVG集成在一起,实现完整功能的网页设计工具。此外,即时预览和调试功能对于快速开发也是必不可少的。

在Windows Forms开发环境中,希望简化SVG风格的网页设计。本文将介绍如何开发这样一个工具,它将包括以下组件及其功能:

  • 一个语法高亮的编辑器,便于SVG/HTML/JavaScript编码。
  • 一个嵌入式浏览器,用于预览代码结果。
  • 一个轻量级的HTTP服务器,用于解析网页。
  • 能够轻松地从数百个网站复制和粘贴SVG艺术片段,例如openclipart、IconFinder等。

开发步骤

首先,选择了ICSharpCode.TextEditor作为SVG/HTML/JavaScript编辑器,它具有漂亮的语法高亮功能,但缺少SVG文件设置。修改了源代码中的SyntaxModes.xml,添加了.svg扩展名。重建项目后,svg文件将显示语法高亮。

public MyUserControl() { InitializeComponent(); // 添加ICSharpCode.TextEditor到panel1 editor = new TextEditorControl(); editor.Dock = DockStyle.Fill; editor.FileName = defaultNewFileName; editor.IsReadOnly = false; editor.Text = File.ReadAllText(Path.Combine(Application.StartupPath, "template.svg")).Replace("@content", ""); editor.Document.DocumentChanged += new DocumentEventHandler((sender, e) => { SetModifiedFlag(true); }); this.splitContainer1.Panel1.Controls.Add(editor); // 添加chrome到panel2 browser = new ChromiumWebBrowser(""); this.splitContainer1.Panel2.Controls.Add(browser); splitContainer1.Panel2.Resize += Panel2_Resize; // 允许浏览器使用本地资源 BrowserSettings browserSettings = new BrowserSettings(); browserSettings.FileAccessFromFileUrls = CefState.Enabled; browserSettings.UniversalAccessFromFileUrls = CefState.Enabled; browser.BrowserSettings = browserSettings; browser.IsBrowserInitializedChanged += BrowserInitializedChanged; }

其次,使用CefSharp.WinForms作为浏览器,而不是VS标准WebBrowser,因为CefSharp采用了Google Chrome,能够更好地渲染复杂的SVG。但有一些限制,需要指定项目平台目标为x86或x64,并且仅支持.net framework 5.5.2。可以使用以下命令在NuGet Package Manager Console中添加引用到项目:

PM> Install-Package CefSharp.WinForms

然后,将上述组件包装到SplitContainer控件中,并打包为一个用户控件MyUserControl.cs:

public MyUserControl() { InitializeComponent(); // 添加ICSharpCode.TextEditor到panel1 editor = new TextEditorControl(); editor.Dock = DockStyle.Fill; editor.FileName = defaultNewFileName; editor.IsReadOnly = false; editor.Text = File.ReadAllText(Path.Combine(Application.StartupPath, "template.svg")).Replace("@content", ""); editor.Document.DocumentChanged += new DocumentEventHandler((sender, e) => { SetModifiedFlag(true); }); this.splitContainer1.Panel1.Controls.Add(editor); // 添加chrome到panel2 browser = new ChromiumWebBrowser(""); this.splitContainer1.Panel2.Controls.Add(browser); splitContainer1.Panel2.Resize += Panel2_Resize; // 允许浏览器使用本地资源 BrowserSettings browserSettings = new BrowserSettings(); browserSettings.FileAccessFromFileUrls = CefState.Enabled; browserSettings.UniversalAccessFromFileUrls = CefState.Enabled; browser.BrowserSettings = browserSettings; browser.IsBrowserInitializedChanged += BrowserInitializedChanged; }

最后,使用SimpleHTTPServer作为轻量级服务器,非常容易调用。将该类复制到项目中,并在Form_load/Form_Closing事件处理器中调用start/stop。如果出现“访问被拒绝”的错误,请以管理员身份运行以下命令:

netsh http add urlacl url=http://localhost:8085/ user=Everyone listen=yes

所有组件集成后,创建了一个Windows Forms项目来打包它们,并在该项目中提供了文件新建/打开/保存/刷新等功能。不想浪费时间来解释细节,可以运行并跟踪每个功能以了解细节。

使用工具

所有功能都在工具栏中定义。

  • 新建:添加一个新的SVG模板文件。可以使用“切换”按钮切换到HTML模板。在模板中,使用了raphael.js和svg-pan-zoom.js来演示如何以编程方式操作SVG元素。
  • 切换SVG/HTML模板。HTML模板包含SVG用法和用于操作SVG对象的JavaScript
  • 打开:加载一个现有的文件,可以是SVG/HTML/JavaScript文件。
  • 保存/另存为:在活动标签中保存文件,并将文件及其包含的文件复制到HTTP服务器,并在嵌入式浏览器(右侧面板)中渲染它。该工具将自动在源代码中找到svg/css/javascript文件,并将它们复制到服务器。
  • 关闭:关闭活动标签。
  • 刷新:刷新浏览器以预览最新代码的结果。
  • 幻灯片:最大化浏览区域以预览结果。
  • 浏览器:激活默认浏览器以查看结果。
  • XPath表达式:对于搜索SVG文件的片段非常有用,因为SVG是基于XML的内容。可以搜索具有ID或其他属性的标签。找到结果后,该工具会将其复制到剪贴板。之后,可以将其粘贴到另一个文件中。
  • JavaScript:CefSharp浏览器支持JavaScript以在其中更改页面,因此可以在工具栏中运行JavaScript。测试后,可以将这些代码添加到页面中。
  • 显示DevTools:可以按这个按钮或按F12显示Chrome开发者工具,以追踪源代码或调试。

此外,为编辑器添加了上下文菜单,大部分代码来自ICSharpCode的示例项目。它提供了书签、查找/替换和XML片段提取功能。

最后,想与分享如何通过YouTube视频使用这个工具来剪切/粘贴其他SVG艺术作品的片段到作品中。

视频链接:

视频中的示例文件来自openclipart.org。

有趣的SVG应用

发现了一些有趣的SVG应用:

  • Wobbly Slideshow Effect:类似PowerPoint的幻灯片演示。
  • Graph2d:2D/3D图表库。
  • London Tube Map:MRT地图。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485