52 lines
2.0 KiB
C#
52 lines
2.0 KiB
C#
using System.Drawing;
|
|
using System.Text;
|
|
using View_by_Distance.Shared.Models.Methods;
|
|
|
|
namespace View_by_Distance.BlurHash.Models;
|
|
|
|
public class BlurHasher : IBlurHasher
|
|
{
|
|
|
|
string IBlurHasher.Encode(Image image) =>
|
|
#pragma warning disable CA1416
|
|
image.Width < image.Height ? Encode(image, 4, 3) : Encode(image, 3, 4);
|
|
#pragma warning restore CA1416
|
|
|
|
string IBlurHasher.EncodeAndSave(Image image, string directory) =>
|
|
#pragma warning disable CA1416
|
|
image.Width < image.Height ? EncodeAndSave(image, 4, 3, 300, 190, directory) : EncodeAndSave(image, 3, 4, 300, 190, directory);
|
|
#pragma warning restore CA1416
|
|
|
|
string IBlurHasher.Encode(Image image, int x, int y) =>
|
|
Encode(image, x, y);
|
|
|
|
string IBlurHasher.EncodeAndSave(Image image, int x, int y, string directory) =>
|
|
EncodeAndSave(image, x, y, 300, 190, directory);
|
|
|
|
internal static string Encode(Image image, int x, int y) =>
|
|
System.Drawing.BlurHash.BlurHasher.Encode(image, x, y);
|
|
|
|
public string EncodeAndSave(Image image, int x, int y, int width, int height, string directory)
|
|
{
|
|
string result;
|
|
int actualByte;
|
|
result = System.Drawing.BlurHash.BlurHasher.Encode(image, x, y);
|
|
using Image actualImage = System.Drawing.BlurHash.BlurHasher.Decode(result, width, height);
|
|
byte[] blurHashBytes = Encoding.UTF8.GetBytes(result);
|
|
string joined = string.Join(string.Empty, blurHashBytes.Select(l => l.ToString("000")));
|
|
string fileName = Path.Combine(directory, $"{x}x{y}-{width}x{height}-{joined}.png");
|
|
if (!File.Exists(fileName))
|
|
{
|
|
using FileStream fileStream = new(fileName, FileMode.CreateNew);
|
|
#pragma warning disable CA1416
|
|
actualImage.Save(fileStream, System.Drawing.Imaging.ImageFormat.Png);
|
|
#pragma warning restore CA1416
|
|
_ = fileStream.Seek(0, SeekOrigin.Begin);
|
|
actualByte = fileStream.ReadByte();
|
|
while (actualByte > -1)
|
|
actualByte = fileStream.ReadByte();
|
|
}
|
|
return result;
|
|
}
|
|
|
|
} |