diff --git a/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs b/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
index f60dee73..7f447397 100644
--- a/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
+++ b/back/src/Kyoo.Core/Controllers/ThumbnailsManager.cs
@@ -24,12 +24,14 @@ using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
+using System.Xml;
using Blurhash.SkiaSharp;
using Kyoo.Abstractions.Controllers;
using Kyoo.Abstractions.Models;
using Kyoo.Abstractions.Models.Exceptions;
using Microsoft.Extensions.Logging;
using SkiaSharp;
+using SKSvg = SkiaSharp.Extended.Svg.SKSvg;
namespace Kyoo.Core.Controllers;
@@ -50,6 +52,27 @@ public class ThumbnailsManager(
await reader.CopyToAsync(file);
}
+ private SKBitmap _SKBitmapFrom(Stream reader, bool isSvg)
+ {
+ if (isSvg)
+ {
+ SKSvg svg = new();
+ svg.Load(reader);
+ SKBitmap bitmap = new((int)svg.CanvasSize.Width, (int)svg.CanvasSize.Height);
+ using SKCanvas canvas = new(bitmap);
+ canvas.DrawPicture(svg.Picture);
+ return bitmap;
+ }
+
+ using SKCodec codec = SKCodec.Create(reader);
+ if (codec == null)
+ throw new NotSupportedException("Unsupported codec");
+
+ SKImageInfo info = codec.Info;
+ info.ColorType = SKColorType.Rgba8888;
+ return SKBitmap.Decode(codec, info);
+ }
+
public async Task DownloadImage(Image? image, string what)
{
if (image == null)
@@ -65,16 +88,10 @@ public class ThumbnailsManager(
HttpResponseMessage response = await client.GetAsync(image.Source);
response.EnsureSuccessStatusCode();
await using Stream reader = await response.Content.ReadAsStreamAsync();
- using SKCodec codec = SKCodec.Create(reader);
- if (codec == null)
- {
- logger.LogError("Unsupported codec for {What}", what);
- return;
- }
-
- SKImageInfo info = codec.Info;
- info.ColorType = SKColorType.Rgba8888;
- using SKBitmap original = SKBitmap.Decode(codec, info);
+ using SKBitmap original = _SKBitmapFrom(
+ reader,
+ isSvg: response.Content.Headers.ContentType?.MediaType?.Contains("svg") == true
+ );
using SKBitmap high = original.Resize(
new SKSizeI(original.Width, original.Height),
diff --git a/back/src/Kyoo.Core/Kyoo.Core.csproj b/back/src/Kyoo.Core/Kyoo.Core.csproj
index 0d347a65..a9b89634 100644
--- a/back/src/Kyoo.Core/Kyoo.Core.csproj
+++ b/back/src/Kyoo.Core/Kyoo.Core.csproj
@@ -27,6 +27,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
+