diff --git a/Emby.Drawing/ImageProcessor.cs b/Emby.Drawing/ImageProcessor.cs
index 35da6f6359..89bb3068b9 100644
--- a/Emby.Drawing/ImageProcessor.cs
+++ b/Emby.Drawing/ImageProcessor.cs
@@ -315,7 +315,24 @@ namespace Emby.Drawing
///
public string GetImageBlurHash(string path)
- => _imageEncoder.GetImageHash(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);
+ }
///
public string GetImageCacheTag(BaseItem item, ItemImageInfo image)
diff --git a/Emby.Drawing/NullImageEncoder.cs b/Emby.Drawing/NullImageEncoder.cs
index 54de7212a3..bbb5c17162 100644
--- a/Emby.Drawing/NullImageEncoder.cs
+++ b/Emby.Drawing/NullImageEncoder.cs
@@ -44,7 +44,7 @@ namespace Emby.Drawing
}
///
- public string GetImageHash(string path)
+ public string GetImageBlurHash(int xComp, int yComp, string path)
{
throw new NotImplementedException();
}
diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs
index bb3e3dd117..15362182cf 100644
--- a/Emby.Server.Implementations/Library/LibraryManager.cs
+++ b/Emby.Server.Implementations/Library/LibraryManager.cs
@@ -1882,6 +1882,7 @@ namespace Emby.Server.Implementations.Library
ImageDimensions size = _imageProcessor.GetImageDimensions(item, image);
image.Width = size.Width;
image.Height = size.Height;
+
try
{
image.BlurHash = _imageProcessor.GetImageBlurHash(image.Path);
diff --git a/Jellyfin.Drawing.Skia/SkiaEncoder.cs b/Jellyfin.Drawing.Skia/SkiaEncoder.cs
index 7f0da2c9ee..dae0e94d45 100644
--- a/Jellyfin.Drawing.Skia/SkiaEncoder.cs
+++ b/Jellyfin.Drawing.Skia/SkiaEncoder.cs
@@ -234,29 +234,13 @@ namespace Jellyfin.Drawing.Skia
/// The path is null.
/// The path is not valid.
/// The file at the specified path could not be used to generate a codec.
- public string GetImageHash(string path)
+ public string GetImageBlurHash(int xComp, int yComp, string path)
{
if (path == null)
{
throw new ArgumentNullException(nameof(path));
}
- var dims = GetImageSize(path);
- if (dims.Width <= 0 || dims.Height <= 0)
- {
- // empty image does not have any blurhash
- 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 * dims.Width / dims.Height);
- float yCompF = xCompF * dims.Height / dims.Width;
-
- int xComp = Math.Min((int)xCompF + 1, 9);
- int yComp = Math.Min((int)yCompF + 1, 9);
-
return BlurHashEncoder.Encode(xComp, yComp, path);
}
diff --git a/MediaBrowser.Controller/Drawing/IImageEncoder.cs b/MediaBrowser.Controller/Drawing/IImageEncoder.cs
index 4baec62044..e09ccd204a 100644
--- a/MediaBrowser.Controller/Drawing/IImageEncoder.cs
+++ b/MediaBrowser.Controller/Drawing/IImageEncoder.cs
@@ -46,9 +46,11 @@ namespace MediaBrowser.Controller.Drawing
///
/// Gets the blurhash of an image.
///
+ /// Amount of X components of DCT to take.
+ /// Amount of Y components of DCT to take.
/// The filepath of the image.
/// The blurhash.
- string GetImageHash(string path);
+ string GetImageBlurHash(int xComp, int yComp, string path);
///
/// Encode an image.