diff --git a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
index 3888a17eb..1a2320e15 100644
--- a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
+++ b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
@@ -31,7 +31,7 @@
-
+
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
index 635229d73..6b652b3d0 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
@@ -142,7 +142,7 @@ namespace Squidex.Areas.Api.Controllers.Assets
Response.Headers[HeaderNames.CacheControl] = $"public,max-age={request.CacheDuration}";
}
- var resizeOptions = request.ToResizeOptions(asset, HttpContext.Request);
+ var resizeOptions = request.ToResizeOptions(asset, assetThumbnailGenerator, HttpContext.Request);
var contentLength = (long?)null;
var contentCallback = (FileCallback?)null;
diff --git a/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs
index 55f0bc3fa..4d9413f76 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs
@@ -99,7 +99,7 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models
[FromQuery(Name = "format")]
public ImageFormat? Format { get; set; }
- public ResizeOptions ToResizeOptions(IAssetEntity asset, HttpRequest request)
+ public ResizeOptions ToResizeOptions(IAssetEntity asset, IAssetThumbnailGenerator assetThumbnailGenerator, HttpRequest request)
{
Guard.NotNull(asset);
@@ -111,43 +111,56 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models
result.FocusY = y;
result.TargetWidth = Width;
result.TargetHeight = Height;
+ result.Format = GetFormat(assetThumbnailGenerator, request);
- if (Auto && request.Headers.TryGetValue("Accept", out var accept))
+ return result;
+ }
+
+ private ImageFormat? GetFormat(IAssetThumbnailGenerator assetThumbnailGenerator, HttpRequest request)
+ {
+ if (Format.HasValue || !Auto)
{
- var formats = new List();
+ return Format;
+ }
- if (accept.Any(x => x.Contains("image/avif", StringComparison.OrdinalIgnoreCase)))
- {
- formats.Add(ImageFormat.AVIF);
- }
+ bool Accepts(string mimeType)
+ {
+ request.Headers.TryGetValue("Accept", out var accept);
- if (accept.Any(x => x.Contains("image/webp", StringComparison.OrdinalIgnoreCase)))
- {
- formats.Add(ImageFormat.WEBP);
- }
+ return accept.Any(x => x.Contains(mimeType, StringComparison.OrdinalIgnoreCase)) && assetThumbnailGenerator.CanReadAndWrite(mimeType);
+ }
- result.Formats = formats.ToArray();
+ if (Accepts("image/avif"))
+ {
+ return ImageFormat.AVIF;
}
- return result;
+ if (Accepts("image/webp"))
+ {
+ return ImageFormat.WEBP;
+ }
+
+ return Format;
}
private (float?, float?) GetFocusPoint(IAssetEntity asset)
{
- if (!IgnoreFocus)
+ if (IgnoreFocus)
+ {
+ return (null, null);
+ }
+
+ if (FocusX != null && FocusY != null)
+ {
+ return (FocusX.Value, FocusY.Value);
+ }
+
+ var focusX = asset.Metadata.GetFocusX();
+ var focusY = asset.Metadata.GetFocusY();
+
+ if (focusX != null && focusY != null)
{
- if (FocusX != null && FocusY != null)
- {
- return (FocusX.Value, FocusY.Value);
- }
-
- var focusX = asset.Metadata.GetFocusX();
- var focusY = asset.Metadata.GetFocusY();
-
- if (focusX != null && focusY != null)
- {
- return (focusX.Value, focusY.Value);
- }
+ return (focusX.Value, focusY.Value);
}
return (null, null);
diff --git a/backend/src/Squidex/Squidex.csproj b/backend/src/Squidex/Squidex.csproj
index 858317e06..d1cd2737c 100644
--- a/backend/src/Squidex/Squidex.csproj
+++ b/backend/src/Squidex/Squidex.csproj
@@ -71,14 +71,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+