inkscape导出svg html,分享:Svg文件转换为图片(调用 Inkscape 命令行)

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

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

///

/// svg文件转换为图片

///

/// svg内容

/// svg文件

/// 图片类型

/// 转换成功后的文件路径

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 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;

}

最终图片如下:

L3Byb3h5L2h0dHBzL2ltYWdlczAuY25ibG9ncy5jb20vYmxvZy8zNjU1NjQvMjAxMzA2LzIwMTE0MTU5LWNkNDczY2Y3ZTEyZTQ3MTA4NzRlMmUxNjU0MTQxMWY5LnBuZw==.jpg

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

Inkscape下载地址:

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

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

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

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

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

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

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

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

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

scala调用Linux命令行

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

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

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

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

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

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

随机推荐

October 26th Week 44th Wednesday 2016

No matter how far you may fly, never forget where you come from. 无论飞得多高,也不要忘记起飞的地方. I never forget w ...

Oracle分页查询

1.无ORDER BY排序的写法.(效率最高) 经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然! sql语句如下: SELECT * FROM (Sel ...

group_concat函数使用

t1表 语句: select type,group_concat(name) from t1 group by type 结果

C# 基本算法

1.冒泡排序 排序 ,,,,,, }; ; i < ArrayList.Count(); i++) { for (int j = i; j < ArrayList.Count(); j++ ...

Java使用正则表达式获取文本的章节名称

获取文本的章节,首先要确定章节的开始标准,一般中文的章节都是以“第”开头,第一章.第二章等.所以使用“^”字符来确定首位,但是很多时候章节前面会有空白字符,所有以“第”作为章节的开始,进行以下的匹配 ...

a标签调用js的几种方法

我们常用的在a标签中有点击事件: 标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScrip ...

pyDash:一个基于 web 的 Linux 性能监测工具

pyDash 是一个轻量且基于 web 的 Linux 性能监测工具,它是用 Python 和 Django 加上 Chart.js 来写的.经测试,在下面这些主流 Linux 发行版上可运行:Cen ...

1073&period; Scientific Notation &lpar;20&rpar;

题目如下: Scientific notation is the way that scientists easily handle very large numbers or very small ...

git pull命令的用法

git pull用法: git pull命令的作用是:取回远程主机某个分支的更新,再与本地的指定分支合并. 一句话总结git pull和git fetch的区别: git pull = git fet ...

易宝支付Demo&comma;生产中封装成简洁的代付接口,不用request如何获取项目运行时的真实路径

最近项目在做融360引流,涉及到了易宝支付的代扣和代付.易宝官方给出的demo只能简单运行,而且都是通过form表单的形式提交,返回XML格式.同时接口代码都写在了JSP中看起来不友好.项目在生成中想 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值