aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Images/ImageService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Api/Images/ImageService.cs')
-rw-r--r--MediaBrowser.Api/Images/ImageService.cs63
1 files changed, 49 insertions, 14 deletions
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs
index deaefe019..30db91da8 100644
--- a/MediaBrowser.Api/Images/ImageService.cs
+++ b/MediaBrowser.Api/Images/ImageService.cs
@@ -535,9 +535,6 @@ namespace MediaBrowser.Api.Images
throw new ResourceNotFoundException(string.Format("{0} does not have an image of type {1}", item.Name, request.Type));
}
- // See if we can avoid a file system lookup by looking for the file in ResolveArgs
- var originalFileImageDateModified = imageInfo.DateModified;
-
var supportedImageEnhancers = request.EnableImageEnhancers ? _imageProcessor.ImageEnhancers.Where(i =>
{
try
@@ -564,25 +561,59 @@ namespace MediaBrowser.Api.Images
cacheDuration = TimeSpan.FromDays(365);
}
- // Avoid implicitly captured closure
- var currentItem = item;
- var currentRequest = request;
-
var responseHeaders = new Dictionary<string, string>
{
{"transferMode.dlna.org", "Interactive"},
{"realTimeInfo.dlna.org", "DLNA.ORG_TLAG=*"}
};
- return ToCachedResult(cacheGuid, originalFileImageDateModified, cacheDuration, () => new ImageWriter
+ return GetImageResult(item,
+ request,
+ imageInfo,
+ supportedImageEnhancers,
+ contentType,
+ cacheDuration,
+ responseHeaders)
+ .Result;
+ }
+
+ private async Task<object> GetImageResult(IHasImages item,
+ ImageRequest request,
+ ItemImageInfo image,
+ List<IImageEnhancer> enhancers,
+ string contentType,
+ TimeSpan? cacheDuration,
+ IDictionary<string,string> headers)
+ {
+ var cropwhitespace = request.Type == ImageType.Logo || request.Type == ImageType.Art;
+
+ if (request.CropWhitespace.HasValue)
{
- Item = currentItem,
- Request = currentRequest,
- Enhancers = supportedImageEnhancers,
- Image = imageInfo,
- ImageProcessor = _imageProcessor
+ cropwhitespace = request.CropWhitespace.Value;
+ }
- }, contentType, responseHeaders);
+ var options = new ImageProcessingOptions
+ {
+ CropWhiteSpace = cropwhitespace,
+ Enhancers = enhancers,
+ Height = request.Height,
+ ImageIndex = request.Index ?? 0,
+ Image = image,
+ Item = item,
+ MaxHeight = request.MaxHeight,
+ MaxWidth = request.MaxWidth,
+ Quality = request.Quality,
+ Width = request.Width,
+ OutputFormat = request.Format,
+ AddPlayedIndicator = request.AddPlayedIndicator,
+ PercentPlayed = request.PercentPlayed,
+ UnplayedCount = request.UnplayedCount,
+ BackgroundColor = request.BackgroundColor
+ };
+
+ var file = await _imageProcessor.ProcessImage(options).ConfigureAwait(false);
+
+ return ResultFactory.GetStaticFileResult(Request, file, contentType, cacheDuration, FileShare.Read, headers);
}
private string GetMimeType(ImageOutputFormat format, string path)
@@ -603,6 +634,10 @@ namespace MediaBrowser.Api.Images
{
return Common.Net.MimeTypes.GetMimeType("i.png");
}
+ if (format == ImageOutputFormat.Webp)
+ {
+ return Common.Net.MimeTypes.GetMimeType("i.webp");
+ }
return Common.Net.MimeTypes.GetMimeType(path);
}