node-exif Exif 解析完整指南:三步给照片建好元数据归档系统
2026/9/16 8:40:37 网站建设 项目流程

node-exif Exif 解析完整指南:三步给照片建好元数据归档系统

【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers

找老照片时,你是不是也抓狂过:这张照片什么时候拍的?用哪台相机?光圈快门是多少?答案其实一直藏在文件里——那就是 Exif 元数据。node-exif(npm 包名exif)是一款面向 Node.js 的轻量级 Exif 解析库,专门从 JPEG 照片里读出相机型号、光圈快门、GPS 位置、拍摄时间等信息。

这篇文章带你把它用起来:先看它到底能读出什么,再讲怎么装、怎么调,最后按三条实际工作流落地,附一份避坑清单。

先认清家底:一张照片里藏着六类数据

相机保存 JPEG 时,会在像素之外再塞一份"档案"。node-exif 解析后,把这份档案归成6 大类返回:

类别关键字段典型内容
图片信息image相机品牌型号、方向(Orientation)、分辨率、后期软件、版权
内嵌缩略图thumbnail缩略图数据的偏移与长度
拍摄参数exif光圈、快门、ISO、焦距、原始拍摄时间
位置信息gps经度、纬度、拍摄日期、GPS 时间
互操作性interoperabilityEXIF 版本兼容信息
厂商信息makernote各品牌私有参数(富士、奥林巴斯、松下等)

以项目里的这张红苹果样张为例,看似普通的一张图,过一遍 node-exif 后,相机型号、曝光参数、拍摄时间这些字段就能被逐条读出来,归档素材就齐了:

测试用例也能说明问题。sony-alpha-6000.jpg里能读出 Sony ILCE-6000、ISO 100、F8、6 秒长曝光、33mm 等效焦距,连镜头型号E PZ 16-50mm F3.5-5.6 OSS都写得明明白白。

安装与调用:三种姿势拿数据

一条命令装好:

npm install exif

核心调用就一行,把图片交给ExifImage

new ExifImage({ image: 'photo.jpg' }, (error, exifData) => { console.log(error ? error.message : exifData); });

除了传文件路径,还有另外两种用法:

调用方式适用场景
new ExifImage({ image: 'a.jpg' }, cb)本地批量处理,直接传路径
new ExifImage({ image: buffer }, cb)处理上传到服务器的文件流
exif.loadImage(path, cb)一个实例复用,连续解析多张图

核心实现在lib/exif/ExifImage.js,支持maxEntriesfixThumbnailOffset等选项做精细控制。

实战一:一条命令批量提取拍摄参数,建好归档索引 🗂️

把一整个旅行相册丢进去循环解析,把相机型号、光圈、快门、焦距逐条写入 CSV 或数据库,就是一份可检索的参数档案。

拿测试图evil1.jpg打个样:Canon PowerShot S400 拍摄、时间2003:05:24 16:40:33、曝光 0.125 秒、F2.8、焦距 7.4mm,甚至记录着后期软件Adobe Photoshop 7.0。这些字段正是归档系统里最有检索价值的部分。

实战二:三步修正"方向不对"的照片 🔄

手机照片经常倒着、横着显示——像素本身没转,正确姿态由 Exif 的Orientation字段描述。测试图right.jpg就是典型:像素是竖排的,但字段标记Orientation: 8,说明要逆时针转 90° 才正。

处理流程三步走完:

  1. 用 node-exif 读出image.Orientation
  2. 按规则旋转(1 正常、6 顺时针 90°、8 逆时针 90° 等);
  3. 落盘一份"方向已修正"的副本,用户端就再也不会看到倒图。

实战三:把 GPS 坐标串成地理时间线 📍

带定位的照片会在gps字段里返回经度、纬度、GPS 日期与时间。测试图short-ascii-II.jpg(小米 MI3 拍摄,4208×3120 像素)就有完整数据:拍摄日期2015:02:28、GPS 时间 9:10:49。

坐标入库后,玩法就多了:

  • 地图上按坐标聚类,拼出旅行足迹;
  • 按 GPS 时间戳排序,自动还原拍摄顺序;
  • 接逆地理编码,把坐标翻译成"拍摄于 XX 城市"的标签。

避坑清单:动手前花一分钟看完 ⚠️

  1. 只认 JPEG:PNG 等格式没有 Exif 容器,批量前先过滤一遍。
  2. makernote 要容错:个别厂商私有格式解析可能返回 error,捕获住即可,不影响其他字段。各品牌的解析逻辑集中在lib/exif/makernotes/目录,目前内置 AGFA、Epson、富士、奥林巴斯、松下、三洋六家。
  3. Buffer 字段先转换ExifVersionColorSpace等字段以 Buffer 形式返回,展示前记得转成字符串或数值。
  4. 给不可信文件上保险:解析来路不明的图片时设置maxEntries,防止异常超大结构拖慢服务。
  5. 时间格式要入库前处理DateTimeOriginalYYYY:MM:DD HH:MM:SS冒号格式,直接存库会埋雷,先转成标准时间格式。

写在最后

包的基本信息见package.json,更多用法细节看README.md。node-exif 的 API 简单到几乎没有学习成本:归档参数、校正方向、串起地理时间线,照片元数据管理系统的三块核心积木,它一次就给了你。

【免费下载链接】transformers🤗 Transformers: the model-definition framework for state-of-the-art machine learning models in text, vision, audio, and multimodal models, for both inference and training.项目地址: https://gitcode.com/GitHub_Trending/tra/transformers

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询