jellyfin-server/MediaBrowser.Controller/Drawing/ImageHelper.cs

74 lines
2.6 KiB
C#
Raw Normal View History

using System;
using MediaBrowser.Controller.Entities;
2018-12-27 23:27:57 +00:00
using MediaBrowser.Model.Drawing;
using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Drawing
{
public static class ImageHelper
{
public static ImageDimensions GetNewImageSize(ImageProcessingOptions options, ImageDimensions? originalImageSize)
2018-12-27 23:27:57 +00:00
{
if (originalImageSize.HasValue)
{
// Determine the output size based on incoming parameters
var newSize = DrawingUtils.Resize(originalImageSize.Value, options.Width ?? 0, options.Height ?? 0, options.MaxWidth ?? 0, options.MaxHeight ?? 0);
return newSize;
}
2020-06-15 21:43:52 +00:00
2018-12-27 23:27:57 +00:00
return GetSizeEstimate(options);
}
private static ImageDimensions GetSizeEstimate(ImageProcessingOptions options)
2018-12-27 23:27:57 +00:00
{
if (options.Width.HasValue && options.Height.HasValue)
{
return new ImageDimensions(options.Width.Value, options.Height.Value);
2018-12-27 23:27:57 +00:00
}
double aspect = GetEstimatedAspectRatio(options.Image.Type, options.Item);
2018-12-27 23:27:57 +00:00
int? width = options.Width ?? options.MaxWidth;
2018-12-27 23:27:57 +00:00
if (width.HasValue)
{
int heightValue = Convert.ToInt32((double)width.Value / aspect);
return new ImageDimensions(width.Value, heightValue);
2018-12-27 23:27:57 +00:00
}
var height = options.Height ?? options.MaxHeight ?? 200;
int widthValue = Convert.ToInt32(aspect * height);
return new ImageDimensions(widthValue, height);
2018-12-27 23:27:57 +00:00
}
private static double GetEstimatedAspectRatio(ImageType type, BaseItem 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:
2020-05-20 16:09:52 +00:00
case ImageType.Profile:
2018-12-27 23:27:57 +00:00
return 1;
case ImageType.Logo:
return 2.58;
case ImageType.Primary:
2019-01-28 20:55:44 +00:00
double defaultPrimaryImageAspectRatio = item.GetDefaultPrimaryImageAspectRatio();
return defaultPrimaryImageAspectRatio > 0 ? defaultPrimaryImageAspectRatio : 2.0 / 3;
2018-12-27 23:27:57 +00:00
default:
return 1;
}
}
}
}