|  | @@ -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))
 |