分享:Svg文件转换为图片(调用 Inkscape 命令行)
2013-06-20 11:44
393 查看
其实只是做了简单封装,可以方便进行批量转换.
获取Svg对象坐标的代码请看:根据svg节点对象类型和路径值转换坐标值,
DrawingColor方法是进行颜色填充的.
最终图片如下:
保证两两相邻的人物填充颜色不重复.用的算法是简单的四边形是否重叠的算法.
Inkscape下载地址:
http://inkscape.org/
这是一个免费开源的矢量图处理软件.
维基百科:http://zh.wikipedia.org/wiki/Inkscape
获取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
相关文章推荐
- CAD文件转换成图片的方法分享
- 经验分享:C#上传图片转Base64字节存库并支持转换文件提供url读取
- android通过系统调用图片文件的Uri转换为绝对文件路径
- 软件命令行解说:批量转换图片文件格式
- 示例代码:利用Sps提供的remoting服务,把office文档在线转换成html文档(包括页面图片的文件)
- 图片文件和Bitmap之间的转换
- 截取视频文件第一桢的图片和转换视频格式文件为flv(支持文件格式:asf,avi,mpg,flv,3gp,mov,wmv)
- 小猪猪分享:如何将pdf转换成jpg图片
- java将svg图片转换为png格式图片
- java将svg图片转换为png格式图片
- Ueditor 1.4.3 单独调用上传图片,或文件功能
- 如何修改分享菜单的背景图片以及调用无UI方法自定义UI分享
- 使用Linux命令行将txt格式文件转换成pdf
- C#调用OFFICE转换WORD,EXCEL,PPT文件为PDF
- 把图片文件转换成指定大小尺寸格式的文件
- Qt for Android 调用android原生接口分享图片或文字
- 基于java的图片文件格式转换和线性缩放
- C#技术分享【Word转换成图片和PDF——2种方案】
- 命令行调用rar,解压缩文件
- 将图片(二进制文件)存储于数据库,论文件字节流与二进制字符串相互转换