diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-11-08 22:18:14 -0500 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2014-11-08 22:18:14 -0500 |
| commit | 40897bac1494791e1ec6abcfe85cda27d4664a32 (patch) | |
| tree | 4788db3f5e35a3a06c9668f4460299c4f4a17ca1 /MediaBrowser.Api/Images/ImageService.cs | |
| parent | 0ef95fb19cde8f4443e2cede94ec21583c3dc9d7 (diff) | |
fixes #941 - Rework password recovery and remove IsLocal checks
Diffstat (limited to 'MediaBrowser.Api/Images/ImageService.cs')
| -rw-r--r-- | MediaBrowser.Api/Images/ImageService.cs | 55 |
1 files changed, 52 insertions, 3 deletions
diff --git a/MediaBrowser.Api/Images/ImageService.cs b/MediaBrowser.Api/Images/ImageService.cs index ca54249b3..7fc43e164 100644 --- a/MediaBrowser.Api/Images/ImageService.cs +++ b/MediaBrowser.Api/Images/ImageService.cs @@ -542,7 +542,8 @@ namespace MediaBrowser.Api.Images }).ToList() : new List<IImageEnhancer>(); - var contentType = GetMimeType(request.Format, imageInfo.Path); + var format = GetOutputFormat(request, imageInfo, supportedImageEnhancers); + var contentType = GetMimeType(format, imageInfo.Path); var cacheGuid = new Guid(_imageProcessor.GetImageCacheTag(item, imageInfo, supportedImageEnhancers)); @@ -562,6 +563,7 @@ namespace MediaBrowser.Api.Images return GetImageResult(item, request, imageInfo, + format, supportedImageEnhancers, contentType, cacheDuration, @@ -573,6 +575,7 @@ namespace MediaBrowser.Api.Images private async Task<object> GetImageResult(IHasImages item, ImageRequest request, ItemImageInfo image, + ImageOutputFormat format, List<IImageEnhancer> enhancers, string contentType, TimeSpan? cacheDuration, @@ -598,11 +601,11 @@ namespace MediaBrowser.Api.Images MaxWidth = request.MaxWidth, Quality = request.Quality, Width = request.Width, - OutputFormat = request.Format, AddPlayedIndicator = request.AddPlayedIndicator, PercentPlayed = request.PercentPlayed ?? 0, UnplayedCount = request.UnplayedCount, - BackgroundColor = request.BackgroundColor + BackgroundColor = request.BackgroundColor, + OutputFormat = format }; var file = await _imageProcessor.ProcessImage(options).ConfigureAwait(false); @@ -617,6 +620,52 @@ namespace MediaBrowser.Api.Images }); } + private ImageOutputFormat GetOutputFormat(ImageRequest request, ItemImageInfo image, List<IImageEnhancer> enhancers) + { + if (!string.IsNullOrWhiteSpace(request.Format)) + { + ImageOutputFormat format; + if (Enum.TryParse(request.Format, true, out format)) + { + return format; + } + } + + var serverFormats = _imageProcessor.GetSupportedImageOutputFormats(); + + var clientFormats = GetClientSupportedFormats(); + + if (serverFormats.Contains(ImageOutputFormat.Webp) && + clientFormats.Contains(ImageOutputFormat.Webp)) + { + return ImageOutputFormat.Webp; + } + + if (enhancers.Count > 0) + { + return ImageOutputFormat.Png; + } + + if (string.Equals(Path.GetExtension(image.Path), ".jpg", StringComparison.OrdinalIgnoreCase) || + string.Equals(Path.GetExtension(image.Path), ".jpeg", StringComparison.OrdinalIgnoreCase)) + { + return ImageOutputFormat.Jpg; + } + + // We can't predict if there will be transparency or not, so play it safe + return ImageOutputFormat.Png; + } + + private ImageOutputFormat[] GetClientSupportedFormats() + { + if (Request.AcceptTypes.Contains("image/webp", StringComparer.OrdinalIgnoreCase)) + { + return new[] { ImageOutputFormat.Webp, ImageOutputFormat.Jpg, ImageOutputFormat.Png }; + } + + return new[] { ImageOutputFormat.Jpg, ImageOutputFormat.Png }; + } + private string GetMimeType(ImageOutputFormat format, string path) { if (format == ImageOutputFormat.Bmp) |
