c# - 如何在 .net 核心上从 SVG 生成 System.Drawing.Image?
问题描述
我找到了许多库来读取 SVG 并将其转换为 C# 框架中的 System.Drawing.Image 或 png,但我在 .net 核心中找不到任何方法。
如果我使用 Image.FromFile,我会得到 OutOfMemoryException(可能是因为 SVG 不是光栅化格式)。
关于如何使用 Image 读取 SVG 或任何在 .net 核心中工作的开源库的任何提示?
解决方案
Xamarin 团队的Skiasharp似乎是一个不错的选择。docs.microsoft.com上已有 API 文档。有关更多详细信息,请参阅Mono/SkiaSharp和Mono/mono/SkiaSharp.Extended
您可以通过以下方式在nuget上安装官方 svg 扩展
dotnet add package SkiaSharp.Svg
:<PackageReference Include="SkiaSharp.Svg" Version="1.60.0" />
演示:
var svgSrc=Path.Combine(Directory.GetCurrentDirectory(),"img.svg"); string svgSaveAs = "xyz.png"; var quality = 100; var svg = new SkiaSharp.Extended.Svg.SKSvg(); var pict = svg.Load(svgSrc); var dimen = new SkiaSharp.SKSizeI( (int) Math.Ceiling(pict.CullRect.Width), (int) Math.Ceiling(pict.CullRect.Height) ); var matrix = SKMatrix.MakeScale(1,1); var img = SKImage.FromPicture(pict,dimen,matrix); // convert to PNG var skdata = img.Encode(SkiaSharp.SKEncodedImageFormat.Png,quality); using(var stream = File.OpenWrite(svgSaveAs)){ skdata.SaveTo(stream); }
截屏:
推荐阅读
- haskell - 在 Haskell 中生成一个类型的所有可能的图灵函数
- powershell - PowerShell Comparison Trouble, can't make compound comparisons
- javascript - Slick Show One 在中心
- macos - 如何在 MacOS Catalyst 应用程序中启用按需资源
- angular-cli - Ionic 4 和 Angular 7/8 CLI 命令生成具有特定模块的组件
- node.js - Nodemailer 图像不使用 gmail 从本地 CDN 呈现
- haskell - 我对以下haskell代码有疑问
- assembly - 添加 2 个数字并让程序显示 2 位数字时遇到问题
- c# - SSRS 共享数据源用户名和密码“保存凭据”自动更改为“不使用凭据”
- angularjs - 如何以编程方式为 angularjs 1.5 设置默认选择值