Skip to content

Commit

Permalink
Fix svg rendering error #1430
Browse files Browse the repository at this point in the history
  • Loading branch information
emako committed Jan 1, 2025
1 parent fd60013 commit 57fb7c6
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,9 @@
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using PixelFormat = System.Drawing.Imaging.PixelFormat;
using Size = System.Windows.Size;

namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.

using QuickLook.Common.Helpers;
using QuickLook.Common.Plugin;
using SkiaSharp;
using Svg.Skia;
using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;

namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers;

internal class SvgProvider : ImageMagickProvider
{
public SvgProvider(Uri path, MetaProvider meta, ContextObject contextObject) : base(path, meta, contextObject)
{
}

public override Task<BitmapSource> GetRenderedFrame(int index)
{
return new Task<BitmapSource>(() =>
{
try
{
using var svg = new SKSvg();

if (svg.Load(Path.LocalPath) is SKPicture picture)
{
using var ms = new MemoryStream();

// Render the SVG picture to a bitmap
picture.ToImage(ms, SKColors.Empty, SKEncodedImageFormat.Png, 100, 1f, 1f, SKColorType.Rgba8888, SKAlphaType.Unpremul, null);
return BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
}
catch (Exception e)
{
ProcessHelper.WriteLog(e.ToString());
}

// Fallback to basic one
return base.GetRenderedFrame();
});
}
}
3 changes: 3 additions & 0 deletions QuickLook.Plugin/QuickLook.Plugin.ImageViewer/Plugin.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,9 @@ public void Init()
AnimatedImage.AnimatedImage.Providers.Add(
new KeyValuePair<string[], Type>([".cur", ".ani"],
typeof(CursorProvider)));
AnimatedImage.AnimatedImage.Providers.Add(
new KeyValuePair<string[], Type>([".svg"],
typeof(SvgProvider)));
AnimatedImage.AnimatedImage.Providers.Add(
new KeyValuePair<string[], Type>(["*"],
typeof(ImageMagickProvider)));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,12 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="QuickLook.ImageGlass.WebP" Version="1.4.0" />
<PackageReference Include="QuickLook.ImageGlass.WebP" Version="1.4.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Svg.Skia" Version="2.0.0.4">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Magick.NET-Q8-AnyCPU" Version="14.2.0">
<PrivateAssets>all</PrivateAssets>
</PackageReference>
Expand Down

0 comments on commit 57fb7c6

Please sign in to comment.