@ -214,12 +214,11 @@ namespace Emby.Drawing
dateModified = tuple . Item2 ;
}
var originalImageSize = GetImageSize ( originalImagePath , dateModified , true ) ;
var newSizeInfo = GetNewImageSize ( originalImagePath , dateModified , options ) ;
var newSize = newSizeInfo . Item1 ;
var isSizeChanged = newSizeInfo . Item2 ;
// Determine the output size based on incoming parameters
var newSize = DrawingUtils . Resize ( originalImageSize , options . Width , options . Height , options . MaxWidth , options . MaxHeight ) ;
if ( options . HasDefaultOptionsWithoutSize ( originalImagePath ) & & newSize . Equals ( originalImageSize ) & & options . Enhancers . Count = = 0 )
if ( options . HasDefaultOptionsWithoutSize ( originalImagePath ) & & ! isSizeChanged & & options . Enhancers . Count = = 0 )
{
// Just spit out the original file if the new size equals the old
return originalImagePath ;
@ -267,6 +266,71 @@ namespace Emby.Drawing
return cacheFilePath ;
}
private Tuple < ImageSize , bool > GetNewImageSize ( string originalImagePath , DateTime dateModified , ImageProcessingOptions options )
{
try
{
var originalImageSize = GetImageSize ( originalImagePath , dateModified , true ) ;
// Determine the output size based on incoming parameters
var newSize = DrawingUtils . Resize ( originalImageSize , options . Width , options . Height , options . MaxWidth , options . MaxHeight ) ;
return new Tuple < ImageSize , bool > ( newSize , ! newSize . Equals ( originalImageSize ) ) ;
}
catch
{
return new Tuple < ImageSize , bool > ( GetSizeEstimage ( options ) , true ) ;
}
}
private ImageSize GetSizeEstimage ( ImageProcessingOptions options )
{
if ( options . Width . HasValue & & options . Height . HasValue )
{
return new ImageSize ( options . Width . Value , options . Height . Value ) ;
}
var aspect = GetEstimatedAspectRatio ( options . Image . Type ) ;
var width = options . Width ? ? options . MaxWidth ;
if ( width . HasValue )
{
var heightValue = aspect / width . Value ;
return new ImageSize ( width . Value , Convert . ToInt32 ( heightValue ) ) ;
}
var height = options . Height ? ? options . MaxHeight ? ? 200 ;
var widthValue = aspect * height ;
return new ImageSize ( Convert . ToInt32 ( widthValue ) , height ) ;
}
private double GetEstimatedAspectRatio ( ImageType type )
{
switch ( type )
{
case ImageType . Art :
case ImageType . Backdrop :
case ImageType . Chapter :
case ImageType . Screenshot :
case ImageType . Thumb :
return 1.78 ;
case ImageType . Banner :
return 5.4 ;
case ImageType . Box :
case ImageType . BoxRear :
case ImageType . Disc :
case ImageType . Menu :
return 1 ;
case ImageType . Logo :
return 2.58 ;
case ImageType . Primary :
return . 667 ;
default :
return 1 ;
}
}
private ImageFormat GetOutputFormat ( ImageFormat requestedFormat )
{
if ( requestedFormat = = ImageFormat . Webp & & ! _imageEncoder . SupportedOutputFormats . Contains ( ImageFormat . Webp ) )