aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Api/Images/ImageService.cs
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2014-11-08 22:18:14 -0500
committerLuke Pulverenti <luke.pulverenti@gmail.com>2014-11-08 22:18:14 -0500
commit40897bac1494791e1ec6abcfe85cda27d4664a32 (patch)
tree4788db3f5e35a3a06c9668f4460299c4f4a17ca1 /MediaBrowser.Api/Images/ImageService.cs
parent0ef95fb19cde8f4443e2cede94ec21583c3dc9d7 (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.cs55
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)