# exif **Repository Path**: mingchen3398/exif ## Basic Information - **Project Name**: exif - **Description**: 解析拍摄照片原图的部分exif信息 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-18 - **Last Updated**: 2026-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 手机原图 EXIF 识别 一个 Node.js + Express 服务,提供上传页面和 `POST /api/photo/exif` 接口,用于读取手机原图的拍摄时间、GPS 经纬度、设备型号等信息。 ## 启动 ```bash npm install npm run dev ``` 访问 `http://localhost:3740`(可通过 `PORT` 环境变量覆盖)。 ## Ubuntu 22.04 部署 该项目使用 ExifTool 读取 HEIC、DNG 等手机原图。Linux 上它需要 Perl,且 `exiftool-vendored.pl` 是 npm 的**可选依赖**;不要在生产构建时省略可选依赖。 ```bash sudo apt-get update sudo apt-get install -y perl libimage-exiftool-perl npm ci --omit=dev --include=optional node --version # 必须为 20 或更高版本 npm start ``` 启动日志必须出现 `ExifTool ... is ready`。部署完成后可执行以下请求;返回 200 且含 `version` 才表示解析环境可用: ```bash curl http://127.0.0.1:3740/api/health ``` 若 ExifTool 被放在非标准位置,可设置 `EXIFTOOL_PATH`(例如 `/usr/bin/exiftool`)后再启动。若使用 Docker,也要在镜像内安装上面的 apt 包,并使用 `npm ci --omit=dev --include=optional`。 ## 接口 `POST /api/photo/exif`,使用 `multipart/form-data`,上传字段名为 `photo`。 成功响应示例: ```json { "success": true, "data": { "file": { "name": "IMG_0001.HEIC", "md5": "6f5902ac237024bdd0c176cb93063dc4" }, "capturedAt": { "source": "DateTimeOriginal", "display": "2026-07-18 09:30:00", "iso": null }, "location": { "latitude": 31.230391, "longitude": 121.473701, "coordinateSystem": "WGS-84" }, "device": { "make": "Apple", "model": "iPhone 16", "software": "iOS 26" } } } ``` ## 格式与限制 解析使用 `exiftool-vendored`,可读取 iPhone/Android 原图中常见的 JPEG、HEIC/HEIF、DNG/ProRAW、TIFF 及其他带元数据的图像格式。文件上限为 100 MB,上传文件只在系统临时目录中处理并在请求完成后删除。 并不存在能从所有图片中“恢复” EXIF 的方式:截图、社交软件转发图、平台压缩/转码图,或拍摄时未开启定位的原图,本身可能没有 GPS 或拍摄时间。接口对此返回 `null` 和 `warnings`,不会伪造数据。