Register default ImageSharp configuration for application-wide use

This commit is contained in:
Ronald Barendse
2021-08-16 10:35:37 +02:00
parent a0184d5556
commit 42c6aa8d56
5 changed files with 54 additions and 10 deletions

View File

@@ -0,0 +1,30 @@
using Microsoft.Extensions.Options;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Web.Middleware;
namespace Umbraco.Cms.Web.Common.DependencyInjection
{
/// <summary>
/// Configures the ImageSharp middleware options to use the registered configuration.
/// </summary>
/// <seealso cref="Microsoft.Extensions.Options.IConfigureOptions&lt;SixLabors.ImageSharp.Web.Middleware.ImageSharpMiddlewareOptions&gt;" />
internal class ImageSharpConfigurationOptions : IConfigureOptions<ImageSharpMiddlewareOptions>
{
/// <summary>
/// The ImageSharp configuration.
/// </summary>
private readonly Configuration _configuration;
/// <summary>
/// Initializes a new instance of the <see cref="ImageSharpConfigurationOptions" /> class.
/// </summary>
/// <param name="configuration">The ImageSharp configuration.</param>
public ImageSharpConfigurationOptions(Configuration configuration) => _configuration = configuration;
/// <summary>
/// Invoked to configure a <typeparamref name="TOptions" /> instance.
/// </summary>
/// <param name="options">The options instance to configure.</param>
public void Configure(ImageSharpMiddlewareOptions options) => options.Configuration = _configuration;
}
}

View File

@@ -2,13 +2,16 @@ using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using SixLabors.ImageSharp.Web.Caching;
using SixLabors.ImageSharp.Web.Commands;
using SixLabors.ImageSharp.Web.DependencyInjection;
using SixLabors.ImageSharp.Web.Middleware;
using SixLabors.ImageSharp.Web.Processors;
using Umbraco.Cms.Core.Configuration.Models;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Media;
using Umbraco.Cms.Web.Common.DependencyInjection;
using Umbraco.Cms.Web.Common.ImageProcessors;
using Umbraco.Cms.Web.Common.Media;
@@ -29,6 +32,7 @@ namespace Umbraco.Extensions
services.AddImageSharp(options =>
{
// The configuration is set using ImageSharpConfigurationOptions
options.BrowserMaxAge = imagingSettings.Cache.BrowserMaxAge;
options.CacheMaxAge = imagingSettings.Cache.CacheMaxAge;
options.CachedNameLength = imagingSettings.Cache.CachedNameLength;
@@ -52,15 +56,13 @@ namespace Umbraco.Extensions
return Task.CompletedTask;
};
})
.Configure<PhysicalFileSystemCacheOptions>(options =>
{
options.CacheFolder = imagingSettings.Cache.CacheFolder;
})
.Configure<PhysicalFileSystemCacheOptions>(options => options.CacheFolder = imagingSettings.Cache.CacheFolder)
// We need to add CropWebProcessor before ResizeWebProcessor (until https://github.com/SixLabors/ImageSharp.Web/issues/182 is fixed)
.RemoveProcessor<ResizeWebProcessor>()
.AddProcessor<CropWebProcessor>()
.AddProcessor<ResizeWebProcessor>();
builder.Services.AddTransient<IConfigureOptions<ImageSharpMiddlewareOptions>, ImageSharpConfigurationOptions>();
builder.Services.AddUnique<IImageUrlGenerator, ImageSharpImageUrlGenerator>();
return services;

View File

@@ -3,8 +3,7 @@ using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using Microsoft.Extensions.Options;
using SixLabors.ImageSharp.Web.Middleware;
using SixLabors.ImageSharp;
using SixLabors.ImageSharp.Web.Processors;
using Umbraco.Cms.Core.Media;
using Umbraco.Cms.Core.Models;
@@ -24,9 +23,9 @@ namespace Umbraco.Cms.Web.Common.Media
/// <summary>
/// Initializes a new instance of the <see cref="ImageSharpImageUrlGenerator" /> class.
/// </summary>
/// <param name="options">The options.</param>
public ImageSharpImageUrlGenerator(IOptions<ImageSharpMiddlewareOptions> options)
: this(options.Value.Configuration.ImageFormats.SelectMany(f => f.FileExtensions).ToArray())
/// <param name="configuration">The ImageSharp configuration.</param>
public ImageSharpImageUrlGenerator(Configuration configuration)
: this(configuration.ImageFormats.SelectMany(f => f.FileExtensions).ToArray())
{ }
/// <summary>