diff --git a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj
index a20ab3725..80d6d2b83 100644
--- a/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj
+++ b/backend/src/Squidex.Domain.Apps.Entities.MongoDb/Squidex.Domain.Apps.Entities.MongoDb.csproj
@@ -23,7 +23,7 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj b/backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj
index 27c55ccf7..61b6843fa 100644
--- a/backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj
+++ b/backend/src/Squidex.Domain.Users.MongoDb/Squidex.Domain.Users.MongoDb.csproj
@@ -24,7 +24,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
-
+
diff --git a/backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj b/backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj
index 0b55c8a73..735c3d293 100644
--- a/backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj
+++ b/backend/src/Squidex.Infrastructure.MongoDb/Squidex.Infrastructure.MongoDb.csproj
@@ -18,8 +18,8 @@
all
runtime; build; native; contentfiles; analyzers; buildtransitive
-
-
+
+
diff --git a/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj b/backend/src/Squidex.Infrastructure/Squidex.Infrastructure.csproj
index 1f56c70a3..3888a17eb 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 e06b56829..635229d73 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/AssetContentController.cs
@@ -142,19 +142,21 @@ namespace Squidex.Areas.Api.Controllers.Assets
Response.Headers[HeaderNames.CacheControl] = $"public,max-age={request.CacheDuration}";
}
- var resizeOptions = request.ToResizeOptions(asset);
+ var resizeOptions = request.ToResizeOptions(asset, HttpContext.Request);
var contentLength = (long?)null;
var contentCallback = (FileCallback?)null;
- var contentType = request.Format?.ToMimeType() ?? asset.MimeType;
+ var contentType = asset.MimeType;
- if (asset.Type == AssetType.Image && resizeOptions.IsValid)
+ if (asset.Type == AssetType.Image && assetThumbnailGenerator.IsResizable(asset.MimeType, resizeOptions, out var destinationMimeType))
{
+ contentType = destinationMimeType!;
+
contentCallback = async (body, range, ct) =>
{
var suffix = resizeOptions.ToString();
- if (request.ForceResize)
+ if (request.Force)
{
using (Telemetry.Activities.StartActivity("Resize"))
{
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 a689709ea..55f0bc3fa 100644
--- a/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs
+++ b/backend/src/Squidex/Areas/Api/Controllers/Assets/Models/AssetContentQueryDto.cs
@@ -81,11 +81,17 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models
[FromQuery(Name = "nofocus")]
public bool IgnoreFocus { get; set; }
+ ///
+ /// True to use auto format.
+ ///
+ [FromQuery(Name = "auto")]
+ public bool Auto { get; set; }
+
///
/// True to force a new resize even if it already stored.
///
[FromQuery(Name = "force")]
- public bool ForceResize { get; set; }
+ public bool Force { get; set; }
///
/// True to force a new resize even if it already stored.
@@ -93,7 +99,7 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models
[FromQuery(Name = "format")]
public ImageFormat? Format { get; set; }
- public ResizeOptions ToResizeOptions(IAssetEntity asset)
+ public ResizeOptions ToResizeOptions(IAssetEntity asset, HttpRequest request)
{
Guard.NotNull(asset);
@@ -106,6 +112,23 @@ namespace Squidex.Areas.Api.Controllers.Assets.Models
result.TargetWidth = Width;
result.TargetHeight = Height;
+ if (Auto && request.Headers.TryGetValue("Accept", out var accept))
+ {
+ var formats = new List();
+
+ if (accept.Any(x => x.Contains("image/avif", StringComparison.OrdinalIgnoreCase)))
+ {
+ formats.Add(ImageFormat.AVIF);
+ }
+
+ if (accept.Any(x => x.Contains("image/webp", StringComparison.OrdinalIgnoreCase)))
+ {
+ formats.Add(ImageFormat.WEBP);
+ }
+
+ result.Formats = formats.ToArray();
+ }
+
return result;
}
diff --git a/backend/src/Squidex/Squidex.csproj b/backend/src/Squidex/Squidex.csproj
index 91cf649e4..858317e06 100644
--- a/backend/src/Squidex/Squidex.csproj
+++ b/backend/src/Squidex/Squidex.csproj
@@ -57,7 +57,7 @@
-
+
@@ -71,14 +71,14 @@
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+