@ -227,7 +227,7 @@ namespace Emby.Drawing
originalImageSize = null ;
}
var newSize = GetNewImageSize( options , originalImageSize ) ;
var newSize = ImageHelper. GetNewImageSize( options , originalImageSize ) ;
var quality = options . Quality ;
var outputFormat = GetOutputFormat ( options . SupportedOutputFormats [ 0 ] ) ;
@ -239,14 +239,11 @@ namespace Emby.Drawing
if ( ! _fileSystem . FileExists ( cacheFilePath ) )
{
var newWidth = Convert . ToInt32 ( Math . Round ( newSize . Width ) ) ;
var newHeight = Convert . ToInt32 ( Math . Round ( newSize . Height ) ) ;
_fileSystem . CreateDirectory ( _fileSystem . GetDirectoryName ( cacheFilePath ) ) ;
var tmpPath = Path . ChangeExtension ( Path . Combine ( _appPaths . TempDirectory , Guid . NewGuid ( ) . ToString ( "N" ) ) , Path . GetExtension ( cacheFilePath ) ) ;
_fileSystem . CreateDirectory ( _fileSystem . GetDirectoryName ( tmpPath ) ) ;
_imageEncoder . EncodeImage ( originalImagePath , tmpPath, AutoOrient ( options . Item ) , newWidth , newHeight , quality , options , outputFormat ) ;
_imageEncoder . EncodeImage ( originalImagePath , originalImageSize, tmpPath, AutoOrient ( options . Item ) , quality , options , outputFormat ) ;
CopyFile ( tmpPath , cacheFilePath ) ;
return new Tuple < string , string , DateTime > ( tmpPath , GetMimeType ( outputFormat , cacheFilePath ) , _fileSystem . GetLastWriteTimeUtc ( tmpPath ) ) ;
@ -328,66 +325,6 @@ namespace Emby.Drawing
return MimeTypes . GetMimeType ( path ) ;
}
private ImageSize GetNewImageSize ( ImageProcessingOptions options , ImageSize ? originalImageSize )
{
if ( originalImageSize . HasValue )
{
// Determine the output size based on incoming parameters
var newSize = DrawingUtils . Resize ( originalImageSize . Value , options . Width , options . Height , options . MaxWidth , options . MaxHeight ) ;
return newSize ;
}
return GetSizeEstimate ( options ) ;
}
private ImageSize GetSizeEstimate ( ImageProcessingOptions options )
{
if ( options . Width . HasValue & & options . Height . HasValue )
{
return new ImageSize ( options . Width . Value , options . Height . Value ) ;
}
var aspect = GetEstimatedAspectRatio ( options . Image . Type , options . Item ) ;
var width = options . Width ? ? options . MaxWidth ;
if ( width . HasValue )
{
var heightValue = width . Value / aspect ;
return new ImageSize ( width . Value , heightValue ) ;
}
var height = options . Height ? ? options . MaxHeight ? ? 200 ;
var widthValue = aspect * height ;
return new ImageSize ( widthValue , height ) ;
}
private double GetEstimatedAspectRatio ( ImageType type , IHasImages item )
{
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 item . GetDefaultPrimaryImageAspectRatio ( ) ? ? . 667 ;
default :
return 1 ;
}
}
private ImageFormat GetOutputFormat ( ImageFormat requestedFormat )
{
if ( requestedFormat = = ImageFormat . Webp & & ! _imageEncoder . SupportedOutputFormats . Contains ( ImageFormat . Webp ) )