一个基于 React + TypeScript + Node.js 的 EXIF 图片数据解析工具,使用 exiftool-vendored 提供强大的图片元数据解析功能。
- 📸 支持拖拽上传和点击上传图片
- 🔍 解析图片的完整 EXIF 数据
- 📊 分类显示重要信息(相机信息、拍摄参数、GPS 信息等)
- 🌙 现代化的暗色主题界面
- 📱 响应式设计,支持移动端
- 🚀 基于 Vite 的快速开发体验
- 前端: React 18 + TypeScript + Vite + Ant Design
- 后端: Node.js + Express + exiftool-vendored
- 包管理: pnpm
- Node.js >= 16.0.0
- pnpm >= 7.0.0
- ExifTool - 需要单独安装
macOS (使用 Homebrew):
brew install exiftoolWindows:
- 从 ExifTool 官网 下载
- 解压到系统 PATH 目录中
Linux (Ubuntu/Debian):
sudo apt-get install libimage-exiftool-perl# 安装前端依赖
pnpm install
# 安装后端依赖
cd server
pnpm install
cd ..# 启动后端服务器(端口 3001)
cd server
pnpm dev
# 新开一个终端,启动前端开发服务器(端口 3000)
cd ..
pnpm dev打开浏览器访问 http://localhost:3000
exif解析/
├── src/ # 前端源码
│ ├── components/ # React 组件
│ │ └── ExifParser.tsx # EXIF 解析组件
│ ├── App.tsx # 主应用组件
│ ├── main.tsx # 应用入口
│ └── index.css # 样式文件
├── server/ # 后端源码
│ ├── server.js # Express 服务器
│ └── package.json # 后端依赖
├── public/ # 静态资源
├── package.json # 前端依赖
├── vite.config.ts # Vite 配置
├── tsconfig.json # TypeScript 配置
└── README.md # 项目说明
上传图片并解析 EXIF 数据
请求参数:
image: 图片文件 (multipart/form-data)
响应格式:
{
"success": true,
"filename": "example.jpg",
"exifData": {
"Make": "Canon",
"Model": "EOS R5",
"ISO": 100,
"FNumber": 2.8,
...
}
}健康检查接口
- JPEG / JPG
- PNG
- TIFF
- GIF
- BMP
- WebP
# 启动开发服务器
pnpm dev
# 构建生产版本
pnpm build
# 预览生产版本
pnpm preview
# 代码检查
pnpm lintcd server
# 启动开发服务器(带热重载)
pnpm dev
# 启动生产服务器
pnpm start确保已正确安装 ExifTool 并且在系统 PATH 中可访问:
# 检查 ExifTool 是否安装成功
exiftool -ver如果端口被占用,可以修改配置:
- 前端:修改
vite.config.ts中的server.port - 后端:设置环境变量
PORT=3002或修改server/server.js
确保后端服务器正在运行,前端会访问 http://localhost:3002 的 API。
# 下载测试图片
curl -o test.jpg "https://sample-videos.com/zip/10/jpg/SampleJPGImage_1mbmb.jpg"
# 测试 EXIF 解析 API
curl -X POST http://localhost:3002/api/parse-exif \
-F "image=@test.jpg" \
-H "Content-Type: multipart/form-data"
# 或者使用您本地的图片文件
curl -X POST http://localhost:3002/api/parse-exif \
-F "image=@/path/to/your/image.jpg" \
-H "Content-Type: multipart/form-data"curl http://localhost:3002/api/health- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/AmazingFeature) - 提交更改 (
git commit -m 'Add some AmazingFeature') - 推送到分支 (
git push origin feature/AmazingFeature) - 开启 Pull Request
MIT License
如有问题或建议,请创建 Issue 或联系开发者。