ImageHelper.cs 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using System;
  2. using MediaBrowser.Controller.Entities;
  3. using MediaBrowser.Model.Drawing;
  4. using MediaBrowser.Model.Entities;
  5. namespace MediaBrowser.Controller.Drawing
  6. {
  7. public static class ImageHelper
  8. {
  9. public static ImageSize GetNewImageSize(ImageProcessingOptions options, ImageSize? originalImageSize)
  10. {
  11. if (originalImageSize.HasValue)
  12. {
  13. // Determine the output size based on incoming parameters
  14. var newSize = DrawingUtils.Resize(originalImageSize.Value, options.Width, options.Height, options.MaxWidth, options.MaxHeight);
  15. return newSize;
  16. }
  17. return GetSizeEstimate(options);
  18. }
  19. public static IImageProcessor ImageProcessor { get; set; }
  20. public static void SaveImageSize(string path, DateTime dateModified, ImageSize size)
  21. {
  22. ImageProcessor.SaveImageSize(path, dateModified, size);
  23. }
  24. private static ImageSize GetSizeEstimate(ImageProcessingOptions options)
  25. {
  26. if (options.Width.HasValue && options.Height.HasValue)
  27. {
  28. return new ImageSize(options.Width.Value, options.Height.Value);
  29. }
  30. var aspect = GetEstimatedAspectRatio(options.Image.Type, options.Item);
  31. var width = options.Width ?? options.MaxWidth;
  32. if (width.HasValue)
  33. {
  34. var heightValue = width.Value / aspect;
  35. return new ImageSize(width.Value, heightValue);
  36. }
  37. var height = options.Height ?? options.MaxHeight ?? 200;
  38. var widthValue = aspect * height;
  39. return new ImageSize(widthValue, height);
  40. }
  41. private static double GetEstimatedAspectRatio(ImageType type, IHasImages item)
  42. {
  43. switch (type)
  44. {
  45. case ImageType.Art:
  46. case ImageType.Backdrop:
  47. case ImageType.Chapter:
  48. case ImageType.Screenshot:
  49. case ImageType.Thumb:
  50. return 1.78;
  51. case ImageType.Banner:
  52. return 5.4;
  53. case ImageType.Box:
  54. case ImageType.BoxRear:
  55. case ImageType.Disc:
  56. case ImageType.Menu:
  57. return 1;
  58. case ImageType.Logo:
  59. return 2.58;
  60. case ImageType.Primary:
  61. return item.GetDefaultPrimaryImageAspectRatio() ?? .667;
  62. default:
  63. return 1;
  64. }
  65. }
  66. }
  67. }