diff options
| author | JPVenson <github@jpb.email> | 2025-07-27 21:15:18 +0000 |
|---|---|---|
| committer | JPVenson <github@jpb.email> | 2025-07-27 21:15:18 +0000 |
| commit | 96a05276a627607e246fbc85e19f841ef8d24bf5 (patch) | |
| tree | 85d7db3f66e436854c333ec3c86669f08a0371e4 /Jellyfin.Api/Controllers/ImageController.cs | |
| parent | 0b6f4b2bd9d162ee5d415425ab07bd9520b1487f (diff) | |
Removed all server side processing options from public endpoints for image gen
Diffstat (limited to 'Jellyfin.Api/Controllers/ImageController.cs')
| -rw-r--r-- | Jellyfin.Api/Controllers/ImageController.cs | 159 |
1 files changed, 41 insertions, 118 deletions
diff --git a/Jellyfin.Api/Controllers/ImageController.cs b/Jellyfin.Api/Controllers/ImageController.cs index abda053d3..c175ce8b1 100644 --- a/Jellyfin.Api/Controllers/ImageController.cs +++ b/Jellyfin.Api/Controllers/ImageController.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Collections.Immutable; using System.ComponentModel.DataAnnotations; using System.Diagnostics.CodeAnalysis; +using System.Drawing; using System.Globalization; using System.IO; using System.Linq; @@ -32,6 +33,15 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using Microsoft.Net.Http.Headers; +using ImageArgument = ( + int? Width, + int? Height, + int? FillWidth, + int? FillHeight, + int? Blur, + string? BackgroundColor, + string? ForegroundLayer, + int Quality); namespace Jellyfin.Api.Controllers; @@ -1457,20 +1467,6 @@ public class ImageController : BaseJellyfinApiController /// </summary> /// <param name="userId">User id.</param> /// <param name="tag">Optional. Supply the cache tag from the item object to receive strong caching headers.</param> - /// <param name="format">Determines the output format of the image - original,gif,jpg,png.</param> - /// <param name="maxWidth">The maximum image width to return.</param> - /// <param name="maxHeight">The maximum image height to return.</param> - /// <param name="percentPlayed">Optional. Percent to render for the percent played overlay.</param> - /// <param name="unplayedCount">Optional. Unplayed count overlay to render.</param> - /// <param name="width">The fixed image width to return.</param> - /// <param name="height">The fixed image height to return.</param> - /// <param name="quality">Optional. Quality setting, from 0-100. Defaults to 90 and should suffice in most cases.</param> - /// <param name="fillWidth">Width of box to fill.</param> - /// <param name="fillHeight">Height of box to fill.</param> - /// <param name="blur">Optional. Blur image.</param> - /// <param name="backgroundColor">Optional. Apply a background color for transparent images.</param> - /// <param name="foregroundLayer">Optional. Apply a foreground layer on top of the image.</param> - /// <param name="imageIndex">Image index.</param> /// <response code="200">Image stream returned.</response> /// <response code="400">User id not provided.</response> /// <response code="404">Item not found.</response> @@ -1486,21 +1482,7 @@ public class ImageController : BaseJellyfinApiController [ProducesImageFile] public async Task<ActionResult> GetUserImage( [FromQuery] Guid? userId, - [FromQuery] string? tag, - [FromQuery] ImageFormat? format, - [FromQuery] int? maxWidth, - [FromQuery] int? maxHeight, - [FromQuery] double? percentPlayed, - [FromQuery] int? unplayedCount, - [FromQuery] int? width, - [FromQuery] int? height, - [FromQuery] int? quality, - [FromQuery] int? fillWidth, - [FromQuery] int? fillHeight, - [FromQuery] int? blur, - [FromQuery] string? backgroundColor, - [FromQuery] string? foregroundLayer, - [FromQuery] int? imageIndex) + [FromQuery] string? tag) { var requestUserId = userId ?? User.GetUserId(); if (requestUserId.IsEmpty()) @@ -1521,34 +1503,24 @@ public class ImageController : BaseJellyfinApiController DateModified = user.ProfileImage.LastModified }; - if (width.HasValue) - { - info.Width = width.Value; - } - - if (height.HasValue) - { - info.Height = height.Value; - } - return await GetImageInternal( user.Id, ImageType.Profile, - imageIndex, + null, tag, - format, - maxWidth, - maxHeight, - percentPlayed, - unplayedCount, - width, - height, - quality, - fillWidth, - fillHeight, - blur, - backgroundColor, - foregroundLayer, + ImageFormat.Jpg, + null, + null, + null, + null, + null, + null, + 90, + null, + null, + null, + null, + null, null, info) .ConfigureAwait(false); @@ -1607,21 +1579,7 @@ public class ImageController : BaseJellyfinApiController [FromQuery] int? imageIndex) => GetUserImage( userId, - tag, - format, - maxWidth, - maxHeight, - percentPlayed, - unplayedCount, - width, - height, - quality, - fillWidth, - fillHeight, - blur, - backgroundColor, - foregroundLayer, - imageIndex); + tag); /// <summary> /// Get user profile image. @@ -1676,55 +1634,19 @@ public class ImageController : BaseJellyfinApiController [FromQuery] string? foregroundLayer) => GetUserImage( userId, - tag, - format, - maxWidth, - maxHeight, - percentPlayed, - unplayedCount, - width, - height, - quality, - fillWidth, - fillHeight, - blur, - backgroundColor, - foregroundLayer, - imageIndex); + tag); /// <summary> /// Generates or gets the splashscreen. /// </summary> /// <param name="tag">Supply the cache tag from the item object to receive strong caching headers.</param> - /// <param name="format">Determines the output format of the image - original,gif,jpg,png.</param> - /// <param name="maxWidth">The maximum image width to return.</param> - /// <param name="maxHeight">The maximum image height to return.</param> - /// <param name="width">The fixed image width to return.</param> - /// <param name="height">The fixed image height to return.</param> - /// <param name="fillWidth">Width of box to fill.</param> - /// <param name="fillHeight">Height of box to fill.</param> - /// <param name="blur">Blur image.</param> - /// <param name="backgroundColor">Apply a background color for transparent images.</param> - /// <param name="foregroundLayer">Apply a foreground layer on top of the image.</param> - /// <param name="quality">Quality setting, from 0-100.</param> /// <response code="200">Splashscreen returned successfully.</response> /// <returns>The splashscreen.</returns> [HttpGet("Branding/Splashscreen")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesImageFile] public async Task<ActionResult> GetSplashscreen( - [FromQuery] string? tag, - [FromQuery] ImageFormat? format, - [FromQuery] int? maxWidth, - [FromQuery] int? maxHeight, - [FromQuery] int? width, - [FromQuery] int? height, - [FromQuery] int? fillWidth, - [FromQuery] int? fillHeight, - [FromQuery] int? blur, - [FromQuery] string? backgroundColor, - [FromQuery] string? foregroundLayer, - [FromQuery, Range(0, 100)] int quality = 90) + [FromQuery] string? tag) { var brandingOptions = _serverConfigurationManager.GetConfiguration<BrandingOptions>("branding"); var isAdmin = User.IsInRole(Constants.UserRoles.Administrator); @@ -1749,7 +1671,7 @@ public class ImageController : BaseJellyfinApiController } } - var outputFormats = GetOutputFormats(format); + var outputFormats = GetOutputFormats(ImageFormat.Jpg); TimeSpan? cacheDuration = null; if (!string.IsNullOrEmpty(tag)) @@ -1763,16 +1685,16 @@ public class ImageController : BaseJellyfinApiController { Path = splashscreenPath }, - Height = height, - MaxHeight = maxHeight, - MaxWidth = maxWidth, - FillHeight = fillHeight, - FillWidth = fillWidth, - Quality = quality, - Width = width, - Blur = blur, - BackgroundColor = backgroundColor, - ForegroundLayer = foregroundLayer, + Height = null, + MaxHeight = null, + MaxWidth = null, + FillHeight = null, + FillWidth = null, + Quality = 90, + Width = null, + Blur = null, + BackgroundColor = null, + ForegroundLayer = null, SupportedOutputFormats = outputFormats }; @@ -1988,7 +1910,8 @@ public class ImageController : BaseJellyfinApiController Blur = blur, BackgroundColor = backgroundColor, ForegroundLayer = foregroundLayer, - SupportedOutputFormats = outputFormats + SupportedOutputFormats = outputFormats, + StrictCacheHandling = true }; return await GetImageResult( |
