Как передать XML-файл внутри кода, а не путь к папке? - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь не создавать файл и передать 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(); 
}

Метод загрузки выглядит следующим образом:

public SKPicture Load(
    using (var stream = File.OpenRead(filename))
    {
        return Load(stream);
    }
}

1 Ответ

0 голосов
/ 30 мая 2019

посмотрите код этой библиотеки:

https://github.com/mono/SkiaSharp.Extended/blob/master/SkiaSharp.Extended.Svg/source/SkiaSharp.Extended.Svg.Shared/SKSvg.cs

Посмотрите на метод 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, которая, вероятно, наиболее близка к той, которую вы хотите.

...