Aves 使用指南:这款 Flutter 相册如何处理动态照片、360°视频与元数据
【免费下载链接】avesAves is a gallery and metadata explorer app, built for Android with Flutter.项目地址: https://gitcode.com/GitHub_Trending/ave/aves
Aves 是一款基于 Flutter 开发的 Android 相册应用,除了浏览图片视频,还能识别动态照片、播放 360°视频,并解析 EXIF、XMP、GeoTIFF 格式的元数据。下面按使用场景讲清楚它的实现思路。
📷 拍照时:动态照片是怎么被识别的
动态照片在图片旁边嵌入了一小段视频。Aves 扫描媒体库时会读取文件的识别标记,结果写入 lib/model/metadata/catalog.dart 中的 isMotionPhoto 字段,和其他标记一起以单个位位的形式存储。筛选体系里,lib/model/filters/type.dart 的 motionPhoto 过滤器就绑定这个字段:网格中动态照片有专属图标和颜色,点开类型筛选可以只留下这类文件。
🌐 全景照片与 360°视频:同样识别,不同观看
360°内容分照片和视频两种,识别走同一个字段 is360,定义在 lib/model/entry/extensions/props.dart,但观看方式完全不同:
| 对比项 | 360°照片 | 360°视频 |
|---|---|---|
| 判定条件 | is360 为真且属于图片 | is360 为真且属于视频 |
| 观看方式 | 进入全景模式,按住拖动换视角 | 播放器中按球面视图播放 |
| 对应代码位置 | widgets/viewer 下的 panorama_page.dart | widgets/viewer/video 播放控制 |
全景照片打开时,panorama.dart 里的 PanoramaInfo 会先校正相机返回的裁剪区域和方向数据,你再按住画面拖动即可旋转视角查看四周环境;如果照片内嵌了音轨,也可以同步播放。类型过滤器用 sphericalVideo 一项把 360°视频和普通视频区分开,播放器侧的视角切换由 video 目录下的控制逻辑处理。
📝 读取 EXIF 与 XMP 信息
同一份文件的元数据分散在不同格式里。Aves 在 lib/services/metadata/metadata_fetch_service.dart 中抽象了统一获取接口:getCatalogMetadata 返回基础识别标记,getXmp 读取 XMP 扩展,getGeoTiffInfo 返回地理信息。其中 GeoTIFF 解析比较特殊,lib/ref/metadata/geotiff.dart 定义了 ModelTiePoints、GeoKeyDirectory 等 Exif 标签常量,把图像像素坐标换算成真实地理位置。浏览页的信息面板可以逐项查看拍摄时间、相机参数、XMP 标题与主题。
🗺️ 在地图上查看拍摄地点
文件带有有效经纬度时就能上地图。CatalogMetadata 在构造时会做范围校验,坐标过大或经纬度写反的直接丢弃,避免出现"东京照片落在海里"的情况。地图基于 Leaflet 在 lib/widgets/common/map/leaflet/ 目录实现,支持切换多种瓦片来源,仓库里也附带了几种瓦片样式文件。
🔎 多条件筛选与搜索
筛选器按类别放在 model/filters 目录中:类型、日期、地点、评分、宽高比、文件路径等,每一类都是独立谓词,可叠加组合,开启后网格只留匹配文件。类型筛选还细分了动画图、HDR、RAW、慢动作等子类型,各带专属图标。搜索页则适合键入关键词快速缩小范围。
📱 挂钩 Android 系统
Aves 与系统深度打通:桌面小部件可直接展示相册内容;快捷方式对话框能为某个收藏创建系统级入口;屏保页面支持把相册设为屏保播放;全局搜索接入系统搜索框,不用打开应用就能找到照片。这些入口复用与主应用相同的集合和播放逻辑,体验保持一致。
🎞️ 特殊格式的兼容
多页 TIFF 可以在浏览页逐页切换;SVG 被识别为矢量图直接渲染;旧 AVI 的多种变体在 ref/mime_types.dart 中逐一登记,保证老视频照常能开。
以上内容按"先看内容、再查信息、再长期使用"的顺序组织。如果你想深入某个功能,各节引用的路径就是最直接的入口。上手 Aves 时,建议先开动态照片筛选、再看一张 360°内容,元数据面板的价值会很快显现。
【免费下载链接】avesAves is a gallery and metadata explorer app, built for Android with Flutter.项目地址: https://gitcode.com/GitHub_Trending/ave/aves
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考