Serve original image file when possible

This commit is contained in:
Luke Pulverenti 2013-11-06 16:32:26 -05:00
parent 221b60b662
commit a2cd03610f
3 changed files with 58 additions and 1 deletions

View File

@ -40,5 +40,37 @@ namespace MediaBrowser.Controller.Drawing
public int? PercentPlayed { get; set; }
public string BackgroundColor { get; set; }
public bool HasDefaultOptions()
{
return HasDefaultOptionsWithoutSize() &&
!Width.HasValue &&
!Height.HasValue &&
!MaxWidth.HasValue &&
!MaxHeight.HasValue;
}
public bool HasDefaultOptionsWithoutSize()
{
return !CropWhiteSpace &&
(!Quality.HasValue || Quality.Value == 100) &&
IsOutputFormatDefault &&
!AddPlayedIndicator &&
!PercentPlayed.HasValue &&
string.IsNullOrEmpty(BackgroundColor);
}
private bool IsOutputFormatDefault
{
get
{
if (OutputFormat == ImageOutputFormat.Original)
{
return true;
}
return false;
}
}
}
}

View File

@ -141,5 +141,10 @@ namespace MediaBrowser.Model.Drawing
/// </summary>
/// <value>The width.</value>
public double Width { get; set; }
public bool Equals(ImageSize size)
{
return Width.Equals(size.Width) && Height.Equals(size.Height);
}
}
}

View File

@ -3,7 +3,6 @@ using MediaBrowser.Common.IO;
using MediaBrowser.Controller;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.IO;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
@ -85,6 +84,17 @@ namespace MediaBrowser.Server.Implementations.Drawing
}
var originalImagePath = options.OriginalImagePath;
if (options.HasDefaultOptions())
{
// Just spit out the original file if all the options are default
using (var fileStream = _fileSystem.GetFileStream(originalImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true))
{
await fileStream.CopyToAsync(toStream).ConfigureAwait(false);
return;
}
}
var dateModified = options.OriginalImageDateModified;
if (options.CropWhiteSpace)
@ -106,6 +116,16 @@ namespace MediaBrowser.Server.Implementations.Drawing
// Determine the output size based on incoming parameters
var newSize = DrawingUtils.Resize(originalImageSize, options.Width, options.Height, options.MaxWidth, options.MaxHeight);
if (options.HasDefaultOptionsWithoutSize() && newSize.Equals(originalImageSize))
{
// Just spit out the original file the new size equals the old
using (var fileStream = _fileSystem.GetFileStream(originalImagePath, FileMode.Open, FileAccess.Read, FileShare.Read, true))
{
await fileStream.CopyToAsync(toStream).ConfigureAwait(false);
return;
}
}
var quality = options.Quality ?? 90;
var cacheFilePath = GetCacheFilePath(originalImagePath, newSize, quality, dateModified, options.OutputFormat, options.AddPlayedIndicator, options.PercentPlayed, options.BackgroundColor);