2011-06-06 178 views
8

目前存在哪些方法可以通过编程方式使用C#将SVG图像转换为PNG或JPEG?将SVG转换为PNG或JPEG

我已阅读所有关于此主题的现有SO问题,所有这些问题都涉及使用外部过程启动第三方程序。就我而言,这不是一种选择,因为我们很快就会迁移到Azure。

我需要做的是从磁盘加载SVG文件,理想情况下将其转换为我可以使用System.Drawing类进行操作的东西。

任何想法?

+0

http://imagemagick.codeplex.com/可能会有用。 – MGwynne 2011-06-06 15:41:36

+0

你是否解决了你的问题?你会和我们一起玩吗? – Armance 2011-12-05 12:18:27

+0

不,从来没有。我们放弃了这种方法。 – Scott 2011-12-06 18:54:58

回答

4

您可以在CodePlex上查看SVG Rendering Engine。它有一个过载需要一个内存流(您的SVG),然后可以用于convert to an image

+2

谢谢,即时尝试使用你的建议,但我得到的错误'对象引用未设置为对象的实例'可能你[帮助PLZ](http://stackoverflow.com/questions/8414324/convert-svg-to-图像编程方式) – Armance 2011-12-07 11:29:35

+0

当我调用Draw()方法时,我还得到“对象引用未设置为对象的实例”错误。 – 2011-12-13 22:04:17

+0

@FrankHale - 星盘的链接解决方案是否适合你? – keyboardP 2011-12-13 23:46:56

4

好吧。我将与我的解决方案共享,将SVG文件的大小调整为适当的大小。

我安装这个NuGet包

Install-Package Svg 

您可以在GitHub上找到包的源代码here

然后,你可以这样做:

var svgDocument = SvgDocument.Open(path); 
using (var smallBitmap = svgDocument.Draw()) 
{ 
    var width = smallBitmap.Width; 
    var height = smallBitmap.Height; 
    if (width != 2000)// I resize my bitmap 
    { 
     width = 2000; 
     height = 2000/smallBitmap.Width*height; 
    } 

    using (var bitmap = svgDocument.Draw(width, height))//I render again 
    { 
     bitmap.Save(pngPath, ImageFormat.Png); 
    } 
} 

享受!

2

您只需安装SVG Rendering Library nuget包即可。

Install-Package Svg 

然后

 //read svg document from file system 
     var svgDocument = SvgDocument.Open("test.svg"); 
     var bitmap = svgDocument.Draw(); 
     //save converted svg to file system 
     bitmap.Save("test.png", ImageFormat.Png); 

就是这样。

+0

在循环中使用时,会在第一个文件后产生垃圾 – toddmo 2017-09-16 02:04:27