【问题标题】:C# .svg file to System.Drawing.ImageC# .svg 文件到 System.Drawing.Image
【发布时间】:2016-06-02 03:10:17
【问题描述】:

我需要将选定的 .svg 文件转换为 System.Drawing.Image 对象,以便调整它的大小并将其保存为 .png。谁能帮我解决这个问题?

这是我目前所拥有的:

Svg.SvgDocument svgDocument = SVGParser.GetSvgDocument(mPath);
image = svgDocument.Draw();

但它给了我内存不足的错误。

【问题讨论】:

  • 我应该如何使用 SVGParser ?有nuget吗??

标签: c# .net svg png


【解决方案1】:

所以,

SVGParser.MaximumSize = new System.Drawing.Size(4000, 4000);
svgDocument = SVGParser.GetSvgDocument(mPath);
var bitmap = svgDocument.Draw();
image = bitmap;

【讨论】:

  • 我应该如何使用 SVGParser ?有nuget吗??
  • 您应该在示例中放置一个指向您正在使用的库的链接,因为没有它,答案将毫无用处
  • 他使用了一个名为 svg 的包。要安装它,只需在包管理器中运行以下命令:Install-Package Svg
【解决方案2】:

您可以使用SVG Rendering Engine Lib:

Install-Package Svg

使用它绘制图像非常容易:

var svgDoc = SvgDocument.Open(imagePath);

using(var Image = new Bitmap(svgDoc.Draw()))
{
    Image.Save(context.Response.OutputStream, ImageFormat.Png);
    context.Response.ContentType = "image/png";
    context.Response.Cache.SetCacheability(HttpCacheability.Public);
    context.Response.Cache.SetExpires(DateTime.Now.AddMonths(1));
}

在此示例中,我使用处理程序在浏览器上显示图像,但您只需更改 Save 方法的第一个参数即可轻松地将其保存在某个文件夹中。

【讨论】:

  • 你如何让它循环工作而不破坏第二个和后续的图像?你知道吗?
  • @toddmo 你说的第二个垃圾是什么意思?您可以尝试将svgDoc 放入using 中,例如Image
  • 您的示例中的上下文是什么?它没有声明
  • @CodingYourLife 上下文是HttpContext,我在处理程序中使用它,所以上下文作为ProcessRequest 方法的参数给出
【解决方案3】:

Miljan Vulovic 使用的资源是 svg (https://archive.codeplex.com/?p=svg)。

链接仅在 2021 年 7 月之前有效,届时可能在 GitHub 上可用,但我不确定。

无论如何他的解决方案对我有用。

【讨论】:

    猜你喜欢
    • 2015-09-28
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 2023-04-02
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-18
    相关资源
    最近更新 更多