无需登录 数据私有 本地保存

BlurHash占位图生成器 - 从图片生成模糊预览

18
0
0
0

BlurHash 占位图生成器

上传图片,生成紧凑的模糊预览编码,优化图片加载体验

极速编码 Base83压缩 实时预览
拖拽图片到此处 或 点击上传
支持 JPEG / PNG / WebP / GIF / BMP,最大 10MB
编码参数
水平细节分量
垂直细节分量
解码时对比度调整(仅影响预览,不改变编码结果)
BlurHash 编码结果
-- 字符 分量: 4×3
也可直接粘贴 BlurHash 字符串到上方文本框进行解码预览
模糊预览(解码)
--

上传一张图片或粘贴 BlurHash 字符串开始体验

生成的 BlurHash 可用于 Web/App 中的渐进式图片加载

常见问题 & 知识点

🔍 什么是 BlurHash?

BlurHash 是一种紧凑的图片占位符编码方案,由 Wolt 公司开源。它将一张图片压缩编码为一个短字符串(通常20-40个字符),解码后可以得到一张模糊的预览图。这个模糊预览可以在实际图片加载完成前显示,极大改善用户体验。

它的核心原理是:将图片缩放到极小尺寸,提取离散余弦变换(DCT)的低频分量,然后用 Base83 编码压缩成字符串。解码时通过逆 DCT 重建模糊图像。

📏 如何选择 X 和 Y 分量数?

推荐组合:

  • 4×3(默认):最佳平衡,约26-35字符,适合大多数场景
  • 3×3:更短编码(约20字符),适合头像等小图
  • 5×4:更多细节,约40-50字符,适合封面大图
  • 6×4:高细节,约55-65字符,适合需要更清晰预览的场景

分量数越高,编码字符串越长,但解码后的模糊预览越接近原图。需在字符串长度和预览质量之间权衡。

⚡ BlurHash 相比传统占位图有什么优势?

核心优势:

  • 体积极小:仅20-50字符的字符串,可直接嵌入 JSON 响应或 HTML 属性中,无需额外请求
  • 即时渲染:客户端收到字符串后可立即解码渲染,无需加载任何图片资源
  • 渐进增强:与懒加载完美配合,图片加载完成后平滑过渡替换
  • 节省带宽:不需要像 LQIP(低质量图片占位符)那样传输实际的图片数据
  • 跨平台:各主流语言都有官方解码库(JS、Swift、Kotlin、Rust等)
🎨 Punch 参数是什么?

Punch(对比度因子)仅在解码时使用,不会影响 BlurHash 编码字符串本身。它调整 AC 分量的权重:

  • punch = 1.0:标准效果,与原图模糊版接近
  • punch > 1.0:增强对比度和细节,可能产生轻微伪影
  • punch < 1.0:减弱对比度,效果更柔和模糊

在实现渐进加载时,可以先用较高的 punch 值显示占位图,然后平滑过渡到实际图片。

🛠️ 生成后如何在项目中使用 BlurHash?

复制生成的 BlurHash 字符串后,可以:

  1. 存储在数据库:在图片上传时生成并存储到 blurhash 字段
  2. API 返回:在图片列表接口中一并返回 BlurHash,前端即时渲染占位图
  3. 前端解码:使用官方 blurhash npm 包或 Canvas API 解码渲染
  4. React/Vue 组件:社区有现成的 BlurHash 组件可直接集成

示例代码(JS解码):const pixels = decode(blurhash, width, height, punch);

📱 BlurHash 在移动端的表现如何?

BlurHash 在移动端表现优异:

  • 字符串极小,不占用额外带宽
  • 解码速度极快(毫秒级),即使在低端设备上也能流畅渲染
  • iOS 和 Android 均有原生解码库,可直接在原生应用中渲染
  • 配合 RecyclerView/UICollectionView 等列表组件,可大幅减少滚动时的白屏