怎样优化网站素材 (怎么优化图像分辨率)

背景

今天学习Diffusion模型时,突然想到了模糊哈希算法。

如何优化网站视觉,网站如何做好图片优化设计

Diffusion 是对热力学扩散过程的模仿

在我们打开一个网页,加载高分辨率图像可能会导致加载时间过长,影响用户体验。

一般解决办法如下:

如何优化网站视觉,网站如何做好图片优化设计

模糊哈希

模糊哈希(Blur hash)是一种用于图像压缩和显示占位符的技术,它将图像的视觉特征转换成一个短字符串,以便在网络传输中快速加载和显示占位符,同时保留图像的大致外观。下面是模糊哈希编码的一般工作流程:

实现步骤

  1. 1. 图像分析 :对输入的图像进行分析,提取出图像的视觉特征,如颜色分布、结构信息等。
  2. 2. 特征压缩 :将提取的视觉特征进行压缩,以便用一个较短的字符串来表示。
  3. 3. 字符串表示 :算法生成一个短字符串,称为模糊哈希码,它包含了图像的视觉信息。这个哈希码可以在需要显示占位符时用来快速加载,并在需要时解码还原成图像。
  4. 4. 显示占位符 :模糊哈希码可以用来生成图像的占位符,这样在网络传输中可以先加载占位符,待图像数据加载完成后再替换成原始图像,提高用户体验。

Blurhash-CSharp

有多种语言实现,下面以C#代码示例。

如何优化网站视觉,网站如何做好图片优化设计

用美丽的模糊状态替换让人不舒服的灰色框,用户会很高兴。

Blurhash 字符串足够短,可以作为 JSON 对象中的字段添加并存储在数据库中。

这些实现很简单并且易于移植到新语言,最终结果是为我们的用户提供流畅且有趣的体验。

示例代码

1、测试对图片进行模糊哈希 编码的功能,并验证编码结果是否符合预期。

const string SourceHash = "|20Ktja2e-eSe8g2e9gNene,dCg$gOf8gieTf+eTgNd=g$eSeSgOeng3f7heeng4e.eTfie.g3e.Z#d;g4gOg4f7e.f6f,gigNf+eSeSe-g3emg3g3e-eTgOgNf+g3eTf+eTf+emf+e.eTgNeng3e.gOe:fif5f6g3eTf+";

[Fact]
public async Task EncodingTests()
{
    var sourceImage = await Image.LoadAsync<Rgba32>(@"Resources\Specimens\Sample.png");

    var result = Blurhasher.Encode(sourceImage, 9, 9);

    result.Should().Be(SourceHash);
}

如何优化网站视觉,网站如何做好图片优化设计

Sample.png

2、以下验证模糊哈希算法的 解码功能是否正确,通过比较解码后的图像数据与预期数据是否一致来进行测试。在测试过程中,会将解码后的图像数据保存为PNG格式,并与预期的PNG文件进行比较。

[Fact]
public async Task DecodingTests()
{
    var result = Blurhasher.Decode(SourceHash, 200, 200);

    await using var ms = new MemoryStream();
    await result.SaveAsPngAsync(ms);
    ms.Position = 0;
    using var resultStream = new BinaryReader(ms);
    var resultBytes = resultStream.ReadBytes((int)ms.Length);

    await using var expectation = File.OpenRead(@"Resources\Expectations\BlurResult1.png");
    using var fileStream = new BinaryReader(expectation);
    var actualBytes = fileStream.ReadBytes((int)expectation.Length);

    resultBytes.Should().BeEquivalentTo(actualBytes);
}

如何优化网站视觉,网站如何做好图片优化设计

BlurResult1.png