2011-06-06 177 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