C# 如何从.net core上的SVG生成System.Drawing.Image?

C# 如何从.net core上的SVG生成System.Drawing.Image?,c#,svg,asp.net-core,C#,Svg,Asp.net Core,我已经找到了许多库来读取SVG并将其转换为C#framework中的System.Drawing.Image或png,但我找不到任何方法在.net core中实现它 如果我使用Image.FromFile,我会得到一个OutOfMemoryException(可能是因为SVG不是光栅化格式) 关于如何使用图像读取SVG或任何在.NETCore中工作的开源库的任何提示 由Xamarin设计的团队似乎是一个不错的选择。上已经有一个API文档。有关详细信息,请参阅和 您可以通过dotnet添加包Ski

我已经找到了许多库来读取SVG并将其转换为C#framework中的System.Drawing.Image或png,但我找不到任何方法在.net core中实现它

如果我使用Image.FromFile,我会得到一个OutOfMemoryException(可能是因为SVG不是光栅化格式)

关于如何使用图像读取SVG或任何在.NETCore中工作的开源库的任何提示

  • 由Xamarin设计的团队似乎是一个不错的选择。上已经有一个API文档。有关详细信息,请参阅和

  • 您可以通过
    dotnet添加包SkiaSharp.svg
    在上安装官方svg扩展:

    <PackageReference Include="SkiaSharp.Svg" Version="1.60.0" />
    
  • 截图:


    您可以使用ImageMagick将svg转换为任何格式

    <PackageReference Include="Magick.NET-Q16-AnyCPU" Version="7.14.0" />
    

    SVG是xml,即文本。用记事本打开并找到包装图像数据的标记。数据是一个base64字符串,在显示图像之前需要将其转换为字节。在我的例子中,我得到了定义良好的SVG,这意味着SVG不多,也不小于XML文件,没有任何包含图形的base64字符串大多数SVG都有一些图像层。如果图像不在文件中,则它是一个URL位置。因此,在xml中搜索文件、图片和图像可能会找到这些项目。再一次,在我使用的文件类型中没有类似的内容:)看起来imagemagick可以做到这一点。目前正在探索目前正在审查,似乎预示着这么多!希望您添加了一个工作示例,我尝试不使用pict.cullrect,结果它出错(返回白色图像),不幸的是,它返回的是空白。它如何处理csv中的图像?@devydasvoroneckis我没有使用csv?你是说SVG吗?
    <PackageReference Include="Magick.NET-Q16-AnyCPU" Version="7.14.0" />
    
    public static string Base64ToImageStream(string base64String)
        {
            byte[] imageBytes = Convert.FromBase64String(base64String);
            using (MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
            {
                using (var msOut = new MemoryStream())
                {
                    MagickReadSettings readSettings = new MagickReadSettings()
                    {
                        Format = MagickFormat.Svg,
                        Width = 60,
                        Height = 40,
                        BackgroundColor = MagickColors.Transparent
                    };
    
                    using (MagickImage image = new MagickImage(imageBytes, readSettings))
                    {
                        image.Format = MagickFormat.Png; // Specify the format you need
                        image.Write(msOut);
                        byte[] data = image.ToByteArray();
                        return Convert.ToBase64String(data);
    
                        // In case if you want the output in stream
                        // byte[] imgByte = Convert.FromBase64String(pngBase64);
                        // var pngStream = new MemoryStream(imgByte, 0, imgByte.Length);
                        // return pngStream;
                    }
                }
            }            
        }