旅游照片元数据工作流
这篇文档是这个仓库里旅游相册页面的专用规范。目标只有两个:
- 让旅游照片在灯箱里稳定展示低调的一行元数据
- 让以后“给 AI 一份全是图片链接的 Markdown,然后让它补完整篇旅行相册”这件事可以重复执行
如果你后续继续往 docs/Travel 增加新的旅行页面,建议以这篇文档为准。
先理解当前实现
当前仓库里旅游照片元数据的链路是:
- 你先准备带有效 EXIF 的照片
- 照片被转成适合网页的 JPEG 并上传到
https://picture.nevergpdzy.cn/下的稳定路径 - 在
docs/Travel/*.mdx里用createTravelPhotos([...])按域名相对路径引用这些照片 - 运行
npm run generate:travel-metadata - 脚本
scripts/generate-travel-photo-metadata.mjs会按这些相对路径下载 JPEG,读取 EXIF,并生成src/data/travelPhotoMetadata.generated.json src/components/TravelGallery/index.js在灯箱中读取这份生成文件,把元数据显示在照片下方
当前灯箱实际使用的是这 4 个字段:
| 字段 | 来源 | 是否显示 |
|---|---|---|
locationLabel | 来自旅行文章标题,不来自 GPS | 显示 |
capturedAt | EXIF DateTimeOriginal,没有就回退到 DateTime | 显示 |
device | EXIF Make + Model | 显示 |
lens | EXIF LensModel,iPhone 会被归一化成短标签 | 显示 |
另外还会生成 hasMetadata,用于标记这一张图是否至少提取到了部分可用元数据。
需要记住的几个关键事实
1. 页面显示的地点不是从 GPS 来的
当前页面展示的地点文字来自文章 front matter 里的 title,不是从照片 GPS 直接反推出来的。
例如:
---
title: 武汉 Wuhan
---
最终灯箱里会显示 武汉。
再例如:
---
title: 黄龙与九寨沟 Jiuzhai Valley
---
最终灯箱里会显示 黄龙与九寨沟。
所以如果你想让地点显示正确,最重要的是把旅行文章标题写对,而不是指望照片 GPS 决定前端文案。