diff --git a/Jellyfin.Api/Controllers/ImageController.cs b/Jellyfin.Api/Controllers/ImageController.cs
index d8c67dbea..c24c5e24c 100644
--- a/Jellyfin.Api/Controllers/ImageController.cs
+++ b/Jellyfin.Api/Controllers/ImageController.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using System.Globalization;
using System.IO;
using System.Linq;
using System.Threading;
@@ -13,6 +14,7 @@ using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
using MediaBrowser.Controller.Net;
using MediaBrowser.Controller.Providers;
+using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Dto;
using MediaBrowser.Model.Entities;
using MediaBrowser.Model.IO;
@@ -21,6 +23,7 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
+using Microsoft.Net.Http.Headers;
namespace Jellyfin.Api.Controllers
{
@@ -302,16 +305,172 @@ namespace Jellyfin.Api.Controllers
return list;
}
+ ///
+ /// Gets the item's image.
+ ///
+ /// Item id.
+ /// Image type.
+ /// The maximum image width to return.
+ /// The maximum image height to return.
+ /// The fixed image width to return.
+ /// The fixed image height to return.
+ /// Optional. Quality setting, from 0-100. Defaults to 90 and should suffice in most cases.
+ /// Optional. Supply the cache tag from the item object to receive strong caching headers.
+ /// Optional. Specify if whitespace should be cropped out of the image. True/False. If unspecified, whitespace will be cropped from logos and clear art.
+ /// Determines the output format of the image - original,gif,jpg,png.
+ /// Optional. Add a played indicator.
+ /// Optional. Percent to render for the percent played overlay.
+ /// Optional. Unplayed count overlay to render.
+ /// Optional. Blur image.
+ /// Optional. Apply a background color for transparent images.
+ /// Optional. Apply a foreground layer on top of the image.
+ /// Image index.
+ /// Enable or disable image enhancers such as cover art.
+ /// Image stream returned.
+ /// Item not found.
+ ///
+ /// A containing the file stream on success,
+ /// or a if item not found.
+ ///
+ [HttpGet("/Items/{itemId}/Images/{imageType}")]
+ [HttpHead("/Items/{itemId}/Images/{imageType}")]
+ [HttpGet("/Items/{itemId}/Images/{imageType}/{imageIndex?}")]
+ [HttpHead("/Items/{itemId}/Images/{imageType}/{imageIndex?}")]
+ public async Task GetItemImage(
+ [FromRoute] Guid itemId,
+ [FromRoute] ImageType imageType,
+ [FromRoute] int? maxWidth,
+ [FromRoute] int? maxHeight,
+ [FromQuery] int? width,
+ [FromQuery] int? height,
+ [FromQuery] int? quality,
+ [FromQuery] string tag,
+ [FromQuery] bool? cropWhitespace,
+ [FromQuery] string format,
+ [FromQuery] bool addPlayedIndicator,
+ [FromQuery] double? percentPlayed,
+ [FromQuery] int? unplayedCount,
+ [FromQuery] int? blur,
+ [FromQuery] string backgroundColor,
+ [FromQuery] string foregroundLayer,
+ [FromRoute] int? imageIndex = null,
+ [FromQuery] bool enableImageEnhancers = true)
+ {
+ var item = _libraryManager.GetItemById(itemId);
+ if (item == null)
+ {
+ return NotFound();
+ }
+
+ return await GetImageInternal(
+ itemId,
+ imageType,
+ imageIndex,
+ tag,
+ format,
+ maxWidth,
+ maxHeight,
+ percentPlayed,
+ unplayedCount,
+ width,
+ height,
+ quality,
+ cropWhitespace,
+ addPlayedIndicator,
+ blur,
+ backgroundColor,
+ foregroundLayer,
+ enableImageEnhancers,
+ item,
+ Request.Method.Equals(HttpMethods.Head, StringComparison.OrdinalIgnoreCase))
+ .ConfigureAwait(false);
+ }
+
+ ///
+ /// Gets the item's image.
+ ///
+ /// Item id.
+ /// Image type.
+ /// Image index.
+ /// Optional. Supply the cache tag from the item object to receive strong caching headers.
+ /// Determines the output format of the image - original,gif,jpg,png.
+ /// The maximum image width to return.
+ /// The maximum image height to return.
+ /// Optional. Percent to render for the percent played overlay.
+ /// Optional. Unplayed count overlay to render.
+ /// The fixed image width to return.
+ /// The fixed image height to return.
+ /// Optional. Quality setting, from 0-100. Defaults to 90 and should suffice in most cases.
+ /// Optional. Specify if whitespace should be cropped out of the image. True/False. If unspecified, whitespace will be cropped from logos and clear art.
+ /// Optional. Add a played indicator.
+ /// Optional. Blur image.
+ /// Optional. Apply a background color for transparent images.
+ /// Optional. Apply a foreground layer on top of the image.
+ /// Enable or disable image enhancers such as cover art.
+ /// Image stream returned.
+ /// Item not found.
+ ///
+ /// A containing the file stream on success,
+ /// or a if item not found.
+ ///
+ [HttpGet("/Items/{itemId}/Images/{imageType}/{imageIndex}/{tag}/{format}/{maxWidth}/{maxHeight}/{percentPlayed}/{unplayedCount}")]
+ [HttpHead("/Items/{itemId}/Images/{imageType}/{imageIndex}/{tag}/{format}/{maxWidth}/{maxHeight}/{percentPlayed}/{unplayedCount}")]
+ public ActionResult