Move logic of computing Blurhash components to ImageProcessor
Also rename last few instances of GetImageHash to GetImageBlurHash for clarity
This commit is contained in:
parent
58f099c0e2
commit
26eef1bbf8
|
@ -315,7 +315,24 @@ namespace Emby.Drawing
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string GetImageBlurHash(string path)
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string GetImageCacheTag(BaseItem item, ItemImageInfo image)
|
public string GetImageCacheTag(BaseItem item, ItemImageInfo image)
|
||||||
|
|
|
@ -44,7 +44,7 @@ namespace Emby.Drawing
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
public string GetImageHash(string path)
|
public string GetImageBlurHash(int xComp, int yComp, string path)
|
||||||
{
|
{
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1882,6 +1882,7 @@ namespace Emby.Server.Implementations.Library
|
||||||
ImageDimensions size = _imageProcessor.GetImageDimensions(item, image);
|
ImageDimensions size = _imageProcessor.GetImageDimensions(item, image);
|
||||||
image.Width = size.Width;
|
image.Width = size.Width;
|
||||||
image.Height = size.Height;
|
image.Height = size.Height;
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
image.BlurHash = _imageProcessor.GetImageBlurHash(image.Path);
|
image.BlurHash = _imageProcessor.GetImageBlurHash(image.Path);
|
||||||
|
|
|
@ -234,29 +234,13 @@ namespace Jellyfin.Drawing.Skia
|
||||||
/// <exception cref="ArgumentNullException">The path is null.</exception>
|
/// <exception cref="ArgumentNullException">The path is null.</exception>
|
||||||
/// <exception cref="FileNotFoundException">The path is not valid.</exception>
|
/// <exception cref="FileNotFoundException">The path is not valid.</exception>
|
||||||
/// <exception cref="SkiaCodecException">The file at the specified path could not be used to generate a codec.</exception>
|
/// <exception cref="SkiaCodecException">The file at the specified path could not be used to generate a codec.</exception>
|
||||||
public string GetImageHash(string path)
|
public string GetImageBlurHash(int xComp, int yComp, string path)
|
||||||
{
|
{
|
||||||
if (path == null)
|
if (path == null)
|
||||||
{
|
{
|
||||||
throw new ArgumentNullException(nameof(path));
|
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);
|
return BlurHashEncoder.Encode(xComp, yComp, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -46,9 +46,11 @@ namespace MediaBrowser.Controller.Drawing
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the blurhash of an image.
|
/// Gets the blurhash of an image.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="xComp">Amount of X components of DCT to take.</param>
|
||||||
|
/// <param name="yComp">Amount of Y components of DCT to take.</param>
|
||||||
/// <param name="path">The filepath of the image.</param>
|
/// <param name="path">The filepath of the image.</param>
|
||||||
/// <returns>The blurhash.</returns>
|
/// <returns>The blurhash.</returns>
|
||||||
string GetImageHash(string path);
|
string GetImageBlurHash(int xComp, int yComp, string path);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Encode an image.
|
/// Encode an image.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user