diff options
| author | WWWesten <4700006+WWWesten@users.noreply.github.com> | 2021-11-01 23:43:29 +0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-01 23:43:29 +0500 |
| commit | 0a14279e2a21bcb9654a06a2d49e1e4f0cc5329c (patch) | |
| tree | e1b1bd603b011ca98e5793e356326bf4a35a7050 /MediaBrowser.Model/Drawing | |
| parent | f2817fef743eeb75a00782ceea363b2d3e7dc9f2 (diff) | |
| parent | 76eeb8f655424d295e73ced8349c6fefee6ddb12 (diff) | |
Merge branch 'jellyfin:master' into master
Diffstat (limited to 'MediaBrowser.Model/Drawing')
| -rw-r--r-- | MediaBrowser.Model/Drawing/DrawingUtils.cs | 67 | ||||
| -rw-r--r-- | MediaBrowser.Model/Drawing/ImageDimensions.cs | 35 | ||||
| -rw-r--r-- | MediaBrowser.Model/Drawing/ImageFormat.cs | 16 | ||||
| -rw-r--r-- | MediaBrowser.Model/Drawing/ImageOrientation.cs | 2 |
4 files changed, 91 insertions, 29 deletions
diff --git a/MediaBrowser.Model/Drawing/DrawingUtils.cs b/MediaBrowser.Model/Drawing/DrawingUtils.cs index 9fe85512f4..5567927682 100644 --- a/MediaBrowser.Model/Drawing/DrawingUtils.cs +++ b/MediaBrowser.Model/Drawing/DrawingUtils.cs @@ -3,20 +3,21 @@ using System; namespace MediaBrowser.Model.Drawing { /// <summary> - /// Class DrawingUtils + /// Class DrawingUtils. /// </summary> public static class DrawingUtils { /// <summary> - /// Resizes a set of dimensions + /// Resizes a set of dimensions. /// </summary> - /// <param name="size">The original size object</param> - /// <param name="width">A new fixed width, if desired</param> - /// <param name="height">A new fixed height, if desired</param> - /// <param name="maxWidth">A max fixed width, if desired</param> - /// <param name="maxHeight">A max fixed height, if desired</param> - /// <returns>A new size object</returns> - public static ImageDimensions Resize(ImageDimensions size, + /// <param name="size">The original size object.</param> + /// <param name="width">A new fixed width, if desired.</param> + /// <param name="height">A new fixed height, if desired.</param> + /// <param name="maxWidth">A max fixed width, if desired.</param> + /// <param name="maxHeight">A max fixed height, if desired.</param> + /// <returns>A new size object.</returns> + public static ImageDimensions Resize( + ImageDimensions size, int width, int height, int maxWidth, @@ -57,12 +58,58 @@ namespace MediaBrowser.Model.Drawing } /// <summary> + /// Scale down to fill box. + /// Returns original size if both width and height are null or zero. + /// </summary> + /// <param name="size">The original size object.</param> + /// <param name="fillWidth">A new fixed width, if desired.</param> + /// <param name="fillHeight">A new fixed height, if desired.</param> + /// <returns>A new size object or size.</returns> + public static ImageDimensions ResizeFill( + ImageDimensions size, + int? fillWidth, + int? fillHeight) + { + // Return original size if input is invalid. + if ((fillWidth == null || fillWidth == 0) + && (fillHeight == null || fillHeight == 0)) + { + return size; + } + + if (fillWidth == null || fillWidth == 0) + { + fillWidth = 1; + } + + if (fillHeight == null || fillHeight == 0) + { + fillHeight = 1; + } + + double widthRatio = size.Width / (double)fillWidth; + double heightRatio = size.Height / (double)fillHeight; + double scaleRatio = Math.Min(widthRatio, heightRatio); + + // Clamp to current size. + if (scaleRatio < 1) + { + return size; + } + + int newWidth = Convert.ToInt32(Math.Ceiling(size.Width / scaleRatio)); + int newHeight = Convert.ToInt32(Math.Ceiling(size.Height / scaleRatio)); + + return new ImageDimensions(newWidth, newHeight); + } + + /// <summary> /// Gets the new width. /// </summary> /// <param name="currentHeight">Height of the current.</param> /// <param name="currentWidth">Width of the current.</param> /// <param name="newHeight">The new height.</param> - /// <returns>the new width</returns> + /// <returns>The new width.</returns> private static int GetNewWidth(int currentHeight, int currentWidth, int newHeight) => Convert.ToInt32((double)newHeight / currentHeight * currentWidth); diff --git a/MediaBrowser.Model/Drawing/ImageDimensions.cs b/MediaBrowser.Model/Drawing/ImageDimensions.cs index e7805ac494..f84fe68305 100644 --- a/MediaBrowser.Model/Drawing/ImageDimensions.cs +++ b/MediaBrowser.Model/Drawing/ImageDimensions.cs @@ -1,36 +1,45 @@ +#pragma warning disable CS1591 + +using System.Globalization; + namespace MediaBrowser.Model.Drawing { /// <summary> - /// Struct ImageDimensions + /// Struct ImageDimensions. /// </summary> - public struct ImageDimensions + public readonly struct ImageDimensions { + public ImageDimensions(int width, int height) + { + Width = width; + Height = height; + } + /// <summary> - /// Gets or sets the height. + /// Gets the height. /// </summary> /// <value>The height.</value> - public int Height { get; set; } + public int Height { get; } /// <summary> - /// Gets or sets the width. + /// Gets the width. /// </summary> /// <value>The width.</value> - public int Width { get; set; } + public int Width { get; } public bool Equals(ImageDimensions size) { return Width.Equals(size.Width) && Height.Equals(size.Height); } + /// <inheritdoc /> public override string ToString() { - return string.Format("{0}-{1}", Width, Height); - } - - public ImageDimensions(int width, int height) - { - Width = width; - Height = height; + return string.Format( + CultureInfo.InvariantCulture, + "{0}-{1}", + Width, + Height); } } } diff --git a/MediaBrowser.Model/Drawing/ImageFormat.cs b/MediaBrowser.Model/Drawing/ImageFormat.cs index 3639c1594f..511c16a4e2 100644 --- a/MediaBrowser.Model/Drawing/ImageFormat.cs +++ b/MediaBrowser.Model/Drawing/ImageFormat.cs @@ -1,28 +1,32 @@ namespace MediaBrowser.Model.Drawing { /// <summary> - /// Enum ImageOutputFormat + /// Enum ImageOutputFormat. /// </summary> public enum ImageFormat { /// <summary> - /// The BMP + /// The BMP. /// </summary> Bmp, + /// <summary> - /// The GIF + /// The GIF. /// </summary> Gif, + /// <summary> - /// The JPG + /// The JPG. /// </summary> Jpg, + /// <summary> - /// The PNG + /// The PNG. /// </summary> Png, + /// <summary> - /// The webp + /// The webp. /// </summary> Webp } diff --git a/MediaBrowser.Model/Drawing/ImageOrientation.cs b/MediaBrowser.Model/Drawing/ImageOrientation.cs index 0fce8c3dc4..5c78aea12d 100644 --- a/MediaBrowser.Model/Drawing/ImageOrientation.cs +++ b/MediaBrowser.Model/Drawing/ImageOrientation.cs @@ -1,3 +1,5 @@ +#pragma warning disable CS1591 + namespace MediaBrowser.Model.Drawing { public enum ImageOrientation |
