Back to using BlurHasher but not linked yet
This commit is contained in:
@ -1,51 +1,68 @@
|
||||
using System.Drawing;
|
||||
using System.Text;
|
||||
using View_by_Distance.Shared.Models;
|
||||
using View_by_Distance.Shared.Models.Methods;
|
||||
|
||||
namespace View_by_Distance.BlurHash.Models;
|
||||
|
||||
public class BlurHasher : IBlurHasher
|
||||
public class C2_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
|
||||
private readonly IReadOnlyDictionary<string, string[]> _JsonGroups;
|
||||
|
||||
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
|
||||
public C2_BlurHasher(string resultAllInOne, string? resultsFullGroupDirectory) =>
|
||||
_JsonGroups = Shared.Models.Stateless.Methods.IPath.GetKeyValuePairs(resultAllInOne, resultsFullGroupDirectory);
|
||||
|
||||
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 IBlurHasher.Encode(FileHolder fileHolder)
|
||||
{
|
||||
string result;
|
||||
#pragma warning disable CA1416
|
||||
Image image = Image.FromFile(fileHolder.FullName);
|
||||
(int componentsX, int componentsY) = image.Width < image.Height ? (4, 3) : (3, 4);
|
||||
ReadOnlySpan<char> blurHash = System.Drawing.BlurHash.BlurHasher.Encode(image, componentsX, componentsY);
|
||||
image.Dispose();
|
||||
#pragma warning restore CA1416
|
||||
result = blurHash.ToString();
|
||||
return result;
|
||||
}
|
||||
|
||||
string IBlurHasher.EncodeAndSave(FileHolder fileHolder)
|
||||
{
|
||||
string file;
|
||||
string result;
|
||||
int actualByte;
|
||||
result = System.Drawing.BlurHash.BlurHasher.Encode(image, x, y);
|
||||
using Image actualImage = System.Drawing.BlurHash.BlurHasher.Decode(result, width, height);
|
||||
char directory;
|
||||
int directoryIndex;
|
||||
string extension = ".png";
|
||||
#pragma warning disable CA1416
|
||||
Image image = Image.FromFile(fileHolder.FullName);
|
||||
(int componentsX, int componentsY, int outputWidth, int outputHeight) = image.Width < image.Height ? (4, 3, 300, 190) : (3, 4, 300, 190);
|
||||
ReadOnlySpan<char> blurHash = System.Drawing.BlurHash.BlurHasher.Encode(image, componentsX, componentsY);
|
||||
using Image actualImage = System.Drawing.BlurHash.BlurHasher.Decode(blurHash, outputWidth, outputHeight);
|
||||
result = blurHash.ToString();
|
||||
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))
|
||||
string fileNameWithoutExtension = $"{componentsX}x{componentsY}-{outputWidth}x{outputHeight}-{joined}";
|
||||
directory = Shared.Models.Stateless.Methods.IDirectory.GetDirectory(fileHolder.Name);
|
||||
directoryIndex = Shared.Models.Stateless.Methods.IDirectory.GetDirectory(directory);
|
||||
file = Path.Combine(_JsonGroups["{}"][directoryIndex], $"{fileHolder.Name}.csv");
|
||||
string contents = string.Concat(result, Environment.NewLine, fileNameWithoutExtension, Environment.NewLine, extension);
|
||||
_ = Shared.Models.Stateless.Methods.IPath.WriteAllText(file, contents, updateDateWhenMatches: false, compareBeforeWrite: true, updateToWhenMatches: null);
|
||||
directory = Shared.Models.Stateless.Methods.IDirectory.GetDirectory(joined);
|
||||
directoryIndex = Shared.Models.Stateless.Methods.IDirectory.GetDirectory(directory);
|
||||
file = Path.Combine(_JsonGroups["()"][directoryIndex], $"{fileNameWithoutExtension}{extension}");
|
||||
if (!File.Exists(file))
|
||||
{
|
||||
using FileStream fileStream = new(fileName, FileMode.CreateNew);
|
||||
#pragma warning disable CA1416
|
||||
using FileStream fileStream = new(file, FileMode.CreateNew);
|
||||
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();
|
||||
}
|
||||
image.Dispose();
|
||||
#pragma warning restore CA1416
|
||||
result = blurHash.ToString();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user