我尽量不创建文件,而是直接将xml文档传递给SkiaSharp方法Load。我的意思是,有没有办法模仿一条路呢?下面是代码:
public IActionResult svgToPng(string itemId, string mode = "
{
var svgSrc = new XmlDocument();
svgSrc.LoadXml(/*Some xml code*/);
string svgSaveAs = "save file path";
var quality = 100;
var svg = new SkiaSharp.Extended.Svg.SKSvg();
var pict = svg.Load(svgSrc); // HERE, it needs to be a path, not XmlDocument, but i want to pass straight
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 = System.IO.File.OpenWrite(svgSaveAs))
{
skdata.SaveTo(stream);
}
ViewData["Content"] = "PNG file was created out of SVG.";
return View();
}Load方法似乎是这样的:
public SKPicture Load(
using (var stream = File.OpenRead(filename))
{
return Load(stream);
}
}发布于 2019-05-30 17:48:29
看看这个库的代码:
看看Load方法,它有多个实现:
public SKPicture Load(string filename)
{
using (var stream = File.OpenRead(filename))
{
return Load(stream);
}
}
public SKPicture Load(Stream stream)
{
using (var reader = XmlReader.Create(stream, xmlReaderSettings, CreateSvgXmlContext()))
{
return Load(reader);
}
}
public SKPicture Load(XmlReader reader)
{
return Load(XDocument.Load(reader));
}您需要选择其中一个并使用它。现在,没有什么可以阻止您获取代码并为XML字符串添加额外的加载,但是由于这是一个您无法控制的库,所以我将坚持您得到的东西。
你可以使用XmlReader版本,这可能是最接近你想要的版本。
https://stackoverflow.com/questions/56375433
复制相似问题