Skip to content

📦 资产管理器 - 缩略图生成与展示

概述

资产管理器会自动为支持的资产生成视觉预览图(缩略图),让你在不打开文件的情况下快速识别内容。缩略图系统支持图片、视频和音频三种类型的资产,采用“前端生成+后端缓存”的混合模式。

核心价值:看一眼就知道是什么文件,无需逐个打开确认。

缩略图支持的资产类型

资产类型缩略图生成方式效果
图片直接使用原图缩放✅ 完整预览
视频自动截取第一帧作为预览图✅ 视频首帧快照
音频提取内嵌专辑封面(如 MP3/FLAC)✅ 专辑封面
文档使用文件类型图标占位❌ 无缩略图

图片缩略图

图片类资产会直接使用原图并自动适应卡片尺寸展示。在网格视图中,你看到的预览区域就是图片的等比缩放缩略图。单击图片可打开内置图片查看器进行缩放、旋转等操作。

视频缩略图

视频类资产在首次加载时,前端会自动截取视频的第一帧作为缩略图。生成过程是异步的——在缩略图生成前会显示加载动画,生成后自动替换为视频首帧快照。

TODO: 截图 - 视频资产在缩略图生成前/后的对比(加载动画 → 首帧预览)

缩略图生成后会缓存到资产元数据中,下次打开时无需重新生成。

音频缩略图

如果音频文件(如 MP3、FLAC)内嵌了专辑封面图片,Rust 后端会自动提取并保存为缩略图。在资产卡片中会显示专辑封面,没有封面的音频文件会显示默认的音频文件图标。

TODO: 截图 - 带专辑封面的音频资产卡片 vs 无封面的图标展示

缩略图显示优化

网格视图中的缩略图

网格视图的卡片会以 1:1 的方形比例展示缩略图,图片会自动裁剪居中(object-fit: cover)。无论原图是什么尺寸,都会被流畅地展示在统一大小的预览框中。

网格视图支持三种卡片尺寸,适应不同场景:

卡片尺寸适用场景缩略图大小
小卡片密集浏览大量资产较小,一眼扫过
中卡片默认模式,均衡适中
大卡片图片类资产预览为主较大,看得清细节

TODO: 截图 - 三种卡片尺寸的对比展示

列表视图中的缩略图

列表视图在文件名左侧会显示一个较小的缩略图(40px 方形),不占太多空间的同时提供视觉识别。

加载占位

视频等需要异步生成缩略图的资产,在加载过程中会显示一个旋转的加载动画(Spinner),避免空白区域的突兀感。

缩略图处理机制

视频缩略图(前端截取)

视频缩略图的生成由前端驱动:

  1. 触发:当视频资产进入视口且尚未拥有缩略图时。
  2. 生成:前端通过视频解码器截取第一帧并转换为 Base64 格式。
  3. 持久化:生成的缩略图会自动发送给 Rust 后端并保存。下次加载时将直接从本地缓存读取,不再重复生成。

音频封面提取(后端解析)

音频文件的专辑封面提取由 Rust 后端利用 lofty 库实现:

  • 支持格式:MP3、FLAC 等带内嵌封面元数据的音频格式
  • 提取时机:资产导入时自动进行
  • 落盘位置:缩略图文件会保存在与资产对应的元数据目录中

异常情况处理

缩略图加载失败

如果缩略图加载失败(例如图片损坏、视频无法解码、音频封面提取失败),系统会自动回退显示文件类型图标(通过 FileIcon 组件根据文件后缀匹配对应的图标),确保界面不会出现破碎的图片占位。

视频缩略图生成失败

视频缩略图生成依赖于前端的视频解码能力。如果遇到不支持的视频编码格式,缩略图可能无法生成,此时卡片会持续显示视频播放图标覆盖层的默认样式,不影响预览操作——单击仍可正常播放视频。

典型场景

场景一:快速扫描图片库

切换到网格视图并选择大卡片尺寸,可以直接浏览所有图片资产的缩略图,一眼找到需要的图片。

场景二:区分多个视频文件

视频缩略图展示了每个视频的第一帧画面,在网格视图中可以将不同内容的视频快速区分开,不需要逐个播放确认。

场景三:识别音频专辑

导入多个音乐文件后,通过专辑封面缩略图快速识别不同的专辑和曲目,比纯文件名浏览直观得多。

TODO: 截图 - 混合资产展示(图片缩略图、视频首帧、音频封面混合展示)

下一步

  • 回到快速上手 — 掌握资产管理器的完整操作流程
  • 学习来源追踪 — 了解如何追溯资产的来源信息

Released under the Apache-2.0 License.