diff options
| author | Patrick Barron <barronpm@gmail.com> | 2020-06-04 16:39:50 -0400 |
|---|---|---|
| committer | Patrick Barron <barronpm@gmail.com> | 2020-06-04 16:52:23 -0400 |
| commit | 06f9cde22f32c65b6b4d1713149de2de2be60000 (patch) | |
| tree | 9600bba80c72d259360079d965511e010be739a5 /Emby.Drawing/ImageProcessor.cs | |
| parent | 585fdbad396a089e11717eb6ce52e60a07e900e9 (diff) | |
| parent | 836741f2aa6d2140051a50f746602e4b8c63a231 (diff) | |
Merge branch 'master' into userdb-efcore
# Conflicts:
# Emby.Server.Implementations/EntryPoints/ServerEventNotifier.cs
# Emby.Server.Implementations/Library/UserManager.cs
# Emby.Server.Implementations/Sorting/IsFavoriteOrLikeComparer.cs
# Emby.Server.Implementations/Sorting/IsPlayedComparer.cs
# Emby.Server.Implementations/Sorting/IsUnplayedComparer.cs
# Emby.Server.Implementations/TV/TVSeriesManager.cs
# Jellyfin.Server.Implementations/Users/DefaultAuthenticationProvider.cs
Diffstat (limited to 'Emby.Drawing/ImageProcessor.cs')
| -rw-r--r-- | Emby.Drawing/ImageProcessor.cs | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs index b9172d2a8..4e62649db 100644 --- a/Emby.Drawing/ImageProcessor.cs +++ b/Emby.Drawing/ImageProcessor.cs @@ -116,7 +116,7 @@ namespace Emby.Drawing => _transparentImageTypes.Contains(Path.GetExtension(path)); /// <inheritdoc /> - public async Task<(string path, string mimeType, DateTime dateModified)> ProcessImage(ImageProcessingOptions options) + public async Task<(string path, string? mimeType, DateTime dateModified)> ProcessImage(ImageProcessingOptions options) { ItemImageInfo originalImage = options.Image; BaseItem item = options.Item; @@ -232,7 +232,7 @@ namespace Emby.Drawing return ImageFormat.Jpg; } - private string GetMimeType(ImageFormat format, string path) + private string? GetMimeType(ImageFormat format, string path) => format switch { ImageFormat.Bmp => MimeTypes.GetMimeType("i.bmp"), @@ -316,6 +316,27 @@ namespace Emby.Drawing => _imageEncoder.GetImageSize(path); /// <inheritdoc /> + public string GetImageBlurHash(string path) + { + var size = GetImageDimensions(path); + if (size.Width <= 0 || size.Height <= 0) + { + return string.Empty; + } + + // We want tiles to be as close to square as possible, and to *mostly* keep under 16 tiles for performance. + // One tile is (width / xComp) x (height / yComp) pixels, which means that ideally yComp = xComp * height / width. + // See more at https://github.com/woltapp/blurhash/#how-do-i-pick-the-number-of-x-and-y-components + float xCompF = MathF.Sqrt(16.0f * size.Width / size.Height); + float yCompF = xCompF * size.Height / size.Width; + + int xComp = Math.Min((int)xCompF + 1, 9); + int yComp = Math.Min((int)yCompF + 1, 9); + + return _imageEncoder.GetImageBlurHash(xComp, yComp, path); + } + + /// <inheritdoc /> public string GetImageCacheTag(BaseItem item, ItemImageInfo image) => (item.Path + image.DateModified.Ticks).GetMD5().ToString("N", CultureInfo.InvariantCulture); |
