在Skiasharp中加载带有图像的SVG

时间:2018-02-05 11:48:15

标签: c# svg .net-core skiasharp

如何使用SkiaSharp从SVG渲染Jpeg? SVG包括一个Jpeg。 当我在浏览器中打开文件时,图像将显示,但SkiaSharp生成的Jpeg排除了我想要包含的Jpg。 SVG的其余部分渲染得很好。

这是SVG:

<svg width="580" height="400" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
 <g>
  <g id="svg_3">
   <image width="225" height="100" xlink:href="https://wallpapercave.com/wp/MnyjX3S.jpg" transform="matrix(2.54667, 0, 0, 2.57, 402.947, 108.409)" id="svg_53402_5" y="-14.5428" x="-155.85733"/>
  </g>
 </g>
</svg>

用于呈现jpg的代码如下所示:

    public static byte[] Svg2Jpg(MemoryStream svgReader)
    {
        var output = new MemoryStream();
        var svg = new SKSvg(new SKSize(1000, 1000));

        try
        {
            svgReader.Seek(0, SeekOrigin.Begin);
            svg.Load(svgReader);
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }

        var bitmap = new SKBitmap((int)svg.CanvasSize.Width, (int)svg.CanvasSize.Height);
        var canvas = new SKCanvas(bitmap);
        canvas.DrawPicture(svg.Picture);

        canvas.Flush();
        canvas.Save();

        using (var image = SKImage.FromBitmap(bitmap))
        using (var data = image.Encode(SKEncodedImageFormat.Jpeg, 80))
        {
            data.SaveTo(output);
        }
        return output.ToArray();
    }

0 个答案:

没有答案