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

获取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('.')[]; HtmlAgilityPack.HtmlDocument document;
if (svgContent.Length > )
{
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 == )
this.InkscapeApplicationPath = "D:\\Program Files (x86)\\Inkscape\\inkscape.exe"; //调用本地系统进程
Process inkscape = Process.Start(new ProcessStartInfo(this.InkscapeApplicationPath, inkscapeArgs));
inkscape.WaitForExit();
}
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

分享:Svg文件转换为图片(调用 Inkscape 命令行)的更多相关文章

  1. php从数据库中取二进制流文件转换为图片,图片以二进制流存入数据库实现

    php从数据库中取二进制流文件转换为图片,图片以二进制流存入数据库实现 function data_uri($contents, $mime) { $base64 = base64_encode($c ...

  2. 【使用Itext处理PDF文档(新建PDF文件、修改PDF文件、PDF中插入图片、将PDF文件转换为图片)】

    iText简介 iText是著名的开放源码的站点sourceforge一个项目,是用于生成PDF文档的一个java类库.通过iText不仅可以生成PDF或rtf的文档,而且可以将XML.Html文件转 ...

  3. Python通过调用windows命令行处理sam文件

    Python通过调用windows命令行处理sam文件 以samtools软件为例 一.下载或者索取得到windows版本的samtools软件,解压后如下: 进入文件内部,有如下几个文件: 二.将s ...

  4. Windows 桌面和文件夹的右键->打开命令行窗口

    Windows 桌面和文件夹的右键->打开命令行窗口 1.先按下shift,再点鼠标右键运行CMD,(不是管理员权限) 上图是我已经加了右键的,并且 系统设置了  ps代替cmd,所以是“在此处 ...

  5. scala调用Linux命令行

    在 scala 里面存在 调用 Linux 命令行的函数: import scala.sys.process._ 执行的方法也不难: import scala.sys.process._ /** * ...

  6. IE浏览器中使用js调用cmd命令行demo

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="C ...

  7. 在go中通过cmd调用python命令行参数量级过大问题解决

    问题描述如下: 在go中使用cmd调用python命令行 cmd := exec.Command("python", "dimine/Kriging/matrix.py& ...

  8. 用 C# 实现文件信息统计(wc)命令行程序

    软件的需求分析 程序处理用户需求的模式为: wc.exe [parameter][filename] 在[parameter]中,用户通过输入参数与程序交互,需实现的功能如下: 1.基本功能 支持 - ...

  9. java调用ffmpeg命令行推流遇到的问题

    1.Java调用命令行,如果没有额外环境变量,不指定工作路径,Runtime有两个方法 public Process exec(String command) public Process exec( ...

随机推荐

  1. DevExpress控件学习总结 z

    1.Navigation & Layout 1.1 Bar Manager 如果想在窗体或用户控件(user control)上添加工具条(bars)或弹出菜单(popup menus),我们 ...

  2. 如何当好党支部书记 z

    如何当好党支部书记 党支部书记是党支部一班人的“班长”,一个党支部是否具有坚强的战斗力,能否发挥好战斗堡垒作用,在很大程度上取决于是不是有一个得力的支部书记.在改 革开放,全面建设小康社会,构建社会主 ...

  3. Hay Points

    Hay Points TimeLimit: 1 Second   MemoryLimit: 32 Megabyte Totalsubmit: 1022   Accepted: 602 Descript ...

  4. 《锋利的Jquery第二版》读书笔记 第二章

    本章节主要Jquery选择器 jquery选择器与css选择器十分相似,特别需要注意的是 <script type="text/javascript"> documen ...

  5. Linux I2C设备驱动编写(二)

    在(一)中简述了Linux I2C子系统的三个主要成员i2c_adapter.i2c_driver.i2c_client.三者的关系也在上一节进行了描述.应该已经算是对Linux I2C子系统有了初步 ...

  6. .Net设计模式_工厂模式(1)

    工厂模式有三个模式: 简单工厂(Simple Factory)模式 工厂方法(Factory Method)模式 抽象工厂(Abstract Factory)模式 1.简单工厂 引言: 我是消费者,我 ...

  7. Sublime Text 3 格式代码插件 codeFormatter

    一款可以对html.JS.CSS.PHP.python代码格式化的sublime插件 默认快捷键ctrl+alt+F,默认可以对html.js.css格式代码, 如果想对PHP格式化,需要PHP5.6 ...

  8. SDWebImage原理小结

    先贴上github上的地址:https://github.com/rs/SDWebImage,至于安装方式这里就不多说了,它的框架说明中都有,不过建议使用cocoaPod来安装比较好,方便日后的维护代 ...

  9. 【转】YUV420P的格式以及转换为RGB565的代码(Android摄像头的输出一般为YUV420P)

    http://blog.csdn.net/daisyhd/article/details/38866809 static void cvt_420p_to_rgb565(int width, int  ...

  10. EasyUI-动态添加tab

    layout效果 代码: <%@ page language="java" contentType="text/html; charset=utf-8" ...