其实只是做了简单封装,可以方便进行批量转换.

获取Svg对象坐标的代码请看:根据svg节点对象类型和路径值转换坐标值,

DrawingColor方法是进行颜色填充的.

        /// <summary>/// svg文件转换为图片/// </summary>/// <param name="svgContent">svg内容</param>/// <param name="svgFile">svg文件</param>/// <param name="imgType">图片类型</param>/// <returns>转换成功后的文件路径</returns>public string SvgToImage(string outputDir, string svgContent = "", string svgFile = "", ImageType imgType = ImageType.Png){var fileInfo = new FileInfo(svgFile);string fileName = fileInfo.Name.Split('.')[0];HtmlAgilityPack.HtmlDocument document;if (svgContent.Length > 0){document = new HtmlAgilityPack.HtmlDocument();document.LoadHtml(svgContent);}else{document = this.LoadDocumentFormFile(svgFile);}//初始化Svg对象SvgObject so = new SvgObject(document.DocumentNode.WriteTo());//获取Svg坐标对象集合Dictionary<string, ObjectPosition> dictPosition = so.GetSvgObjectPositions();//进行颜色填充,返回新的Svg文档document = DrawingColor(ref document, dictPosition);//保存document.Save(svgFile, Encoding.Default);string pngFileName = Path.Combine(outputDir, fileName + ".png");//设置命令行参数,详情见该软件帮助文档.//string inkscapeArgs = string.Format("-f {0} -e {1} -b {2}\"", svgFile, pngFileName, "#000000");string inkscapeArgs = string.Format("inkscape {0} --export-png={1} --export-background={2}", svgFile, pngFileName, "#000");//调用 Inkscape 进行svg转图片try{//是否提供了自定义路径if (this.InkscapeApplicationPath.Length == 0)this.InkscapeApplicationPath = "D:\\Program Files (x86)\\Inkscape\\inkscape.exe";//调用本地系统进程Process inkscape = Process.Start(new ProcessStartInfo(this.InkscapeApplicationPath, inkscapeArgs));inkscape.WaitForExit(3000);}catch (Exception){return "";}if (!System.IO.File.Exists(pngFileName))return "";string imageFileName = Path.Combine(outputDir, fileName + ".$");//最后再将png文件转换成其他格式图片文件.Bitmap myImage = new Bitmap(pngFileName);ImageFormat format = ImageFormat.Png;switch (imgType){case ImageType.Png:return pngFileName;case ImageType.Jpg:imageFileName = imageFileName.Replace("$", "jpg");format = ImageFormat.Jpeg;break;case ImageType.Bmp:imageFileName = imageFileName.Replace("$", "bmp");format = ImageFormat.Bmp;break;case ImageType.Gif:break;default:break;}myImage.Save(imageFileName, format);return imageFileName;}

最终图片如下:

保证两两相邻的人物填充颜色不重复.用的算法是简单的四边形是否重叠的算法.

Inkscape下载地址:

http://inkscape.org/

这是一个免费开源的矢量图处理软件.

维基百科:http://zh.wikipedia.org/wiki/Inkscape

.......................................this is a good man

分类: .Net,Javascript

分享:Svg文件转换为图片(调用 Inkscape 命令行)相关推荐

  1. php生成图片文件流,php如何将base64数据流文件转换为图片文件?

    2017-03-07 在开发中,自己遇到一个前端在上传图片的时候,使用的base64数据流文件显示的图片. 也就是说 ***image/后面的jpg是我们的图片文件格式,(base64,)后面的很大一 ...

  2. 将ts视频文件转换为图片

    利用ffmpeg可以将ts视频文件转换为图片,命令行如下: cd C:\ffmpeg\bin ffmpeg.exe -i video_name.ts -r 1/1 03d.jpg 参考链接: http ...

  3. 微信缓存dat怎么转图片_微信dat文件转换为图片

    微信dat转码软件使用操作说明在线解码,各位同学下载软件后,如何操作?如何找到dat文件?如何使用?又有哪些注意事项呢?这里会为大家一一道来.问题1 :如果下载失败怎么办?请先检查网络,软件并没有放在 ...

  4. linux命令图片,使用Linux命令行查看图像的方法有哪些

    今天小编要跟大家分享的文章是关于使用Linux命令行查看图像的方法有哪些?在 Linux 中有很多 GUI 应用程序可以查看图像,但是这对经常使用命令行来工作的人可能会觉得很繁琐.今天小编要为大家介绍 ...

  5. c++ 调用cmd命令行函数 可隐藏黑框 四种方法总结

    在很多情况下,不得不调用cmd命令行,去实现一系列功能,总结靠谱方法两种如下: 方法一:可接受cmd命令行黑框一闪(推荐星数::可传值几乎任何cmd命令) string string getCmdRe ...

  6. 在windows上解压linux文件夹,Win10如何使用命令行来解压缩文件?

    Win10如何使用命令行来解压缩文件?大家都知道电脑的硬盘空间是有限的,如果你的硬盘空间比较紧张,那么使用命令行来解压缩文件不失为一个好方法.和ZIP文件压缩或者RAR文件压缩相比,使用命令行来解压缩 ...

  7. linux下java命令行参数_Java调用Linux命令行

    Java调用Linux命令行 Java语言以其跨平台性和简易性而著称,在Java里面的lang包里(java.lang.Runtime)提供了一个允许Java程序与该程序所运行的环境交互的接口,这就是 ...

  8. VS配合VSS时,编译报错:未能向文件“....csproj.FileListAbsolute.txt”写入命令行,对路径的访问被拒绝。...

    最近帮别人调试的时候,出现这个问题.环境:VS2008+VSS2005,多人配合完成一个项目. 在编译的时候报错:未能向文件"....csproj.FileListAbsolute.txt& ...

  9. ant调用cmd命令行

    <?xml version="1.0" encoding="utf-8" ?> <!-- ant调用cmd命令行,ant运行参数有空格的jar ...

最新文章

  1. 成都Uber优步司机奖励政策(1月9日)
  2. 30道四则运算题目---课堂作业--软件工程c++
  3. gridview中如果文字太多指点要显示的文字
  4. decode函数的使用
  5. 使用dbUnit,JSON,HSQLDB和JUnit规则进行数据库单元测试
  6. php抽象类继承抽象类,PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)...
  7. Linux DNS视图脑裂的实例操作(四)
  8. 通过代码学 Sutton 强化学习:SARSA、Q-Learning 时序差分算法训练 CartPole
  9. 如何选购一款好的人事档案管理系统
  10. *第十五周*数据结构实践项目三【B-树的基本操作】
  11. 想要成为一名优秀的程序员?这8本书告诉你
  12. reactos操作系统实现(91)
  13. Android地图轨迹抽稀、动态绘制
  14. OMNeT 例程 Tictoc16 学习笔记
  15. 借助科技的力量,让物联网更好的服务鱼虾养殖业
  16. 服务器装系统报0x0000005d,安装Win8系统出现error code 0x0000005d如何解决?
  17. Selenium初级 | 使用navigate系列方法操作网页
  18. 让味蕾动起来的蛋糕甜点
  19. 时钟源系统(NTP时间同步服务器)应用农产品追溯系统
  20. 滤波器:使用Filter solutions设计椭圆函数LC高通滤波器

热门文章

  1. poi 合并单元格_POI数据获取脚本分享
  2. 论新时代软件测试人员的工作之道(四)自动化测试之单元及集成测试
  3. struts.xml web.xml配置正常,访问action时出现404
  4. AntiXSS - 支持Html同时防止XSS攻击
  5. 如何打印Qt中的枚举所对应的字符串
  6. 利用epoll写一个迷你的网络事件库
  7. 自己写的一个tomcat发布脚本
  8. [转] Java快速教程
  9. NetBeans常用快捷键
  10. UVA1455 - Kingdom(并查集 + 线段树)