[英]Can I render SVG to PNG using SkiaSharp?
I'm trying to use SkiaSharp to convert an SVG file to PNG.我正在尝试使用 SkiaSharp 将 SVG 文件转换为 PNG。 I know there are many alternatives, but I wanted to evaluate it's SVG load support.
我知道有很多选择,但我想评估它的 SVG 负载支持。
Is this possible?这可能吗? I tried this:
我试过这个:
var svg = new SKSvg(new SKSize(200, 200));
svg.Load("image.svg");
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(SKImageEncodeFormat.Png, 80))
{
// save the data to a stream
using (var stream = File.OpenWrite("image.png"))
{
data.SaveTo(stream);
}
}
But I just get an empty image.但我只是得到一个空图像。
Yes it can.是的,它可以。 The above code works against test SVG shipped with SkiaSharp.
上面的代码适用于 SkiaSharp 附带的测试 SVG。 https://github.com/mono/SkiaSharp/blob/8ca298b448810cf65ab13cd7b2de94c627a033c1/tests/Content/images/logos.svg .
https://github.com/mono/SkiaSharp/blob/8ca298b448810cf65ab13cd7b2de94c627a033c1/tests/Content/images/logos.svg 。
My SVG may not be supported.可能不支持我的 SVG。 I will post different question if I want to investigate further.
如果我想进一步调查,我会发布不同的问题。
Use this Code.使用此代码。 i painted a flag from a svg web service.
我从 svg 网络服务中绘制了一面旗帜。
var svg = new SkiaSharp.Extended.Svg.SKSvg();
svg.Load(msSvg);
using (var bitMap = new SKBitmap((int)svg.CanvasSize.Width, (int)svg.CanvasSize.Height))
using (SKCanvas canvas = new SKCanvas(bitMap))
{
canvas.DrawPicture(svg.Picture);
canvas.Flush();
canvas.Save();
using (SKImage image = SKImage.FromBitmap(bitMap))
{
using (SKData data = image.Encode(SKEncodedImageFormat.Png, 80))
{
MemoryStream memStream = new MemoryStream();
data.SaveTo(memStream);
memStream.Seek(0, SeekOrigin.Begin);
this._flagImage = ImageSource.FromStream(() => memStream);
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.