# chart2data
**Repository Path**: deepbluethinker/chart2data
## Basic Information
- **Project Name**: chart2data
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-09-14
- **Last Updated**: 2026-09-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
图表曲线 → 数值数据 → Excel 导出
上传一张科研图表,自动提取曲线数据,支持手动采样与半自动颜色拾取
功能 ·
使用 ·
技术 ·
本地 ·
在线
---
## 解决的问题
在科研复现、Meta-Analysis、基准对比、竞品分析等场景中,我们常需要从已发表的论文图表中**反提取数值数据**。Chart2Data 是一个**纯浏览器端**工具,无需安装、无需后端、无需注册,直接上传图表图片即可完成从像素到数字的全流程转换。
### 支持场景
- **散点图 / 折线图** — 颜色拾取快速提取整条曲线
- **柱状图 / 条形图** — 手动逐点采样
- **多曲线叠加图** — 不同颜色可分别拾取
- **光谱图 / 色谱图** — 容忍较大像素带宽
- **显微镜 / SEM / TEM 图像标注** — 手动选点记录坐标
- **地图 / 地理轨迹图** — 建立地理坐标参考系后提取
---
## 功能亮点
### 1. 双模式数据提取
| 模式 | 原理 | 适合 |
|---|---|---|
| **手动选点** | 鼠标单击曲线上的关键点,带 4× 像素级放大镜精准定位 | 柱状图、离散点、精度要求高的场景 |
| **半自动颜色拾取** | 点击曲线采样目标颜色,一键扫描全图所有匹配像素并转为数据 | 折线图、连续曲线、大数据量提取 |
### 2. 四步标准化流程
```
[1] 上传图片 拖拽或点击上传 PNG/JPG/BMP/TIFF/WebP
[2] 坐标轴标定 点击 X/Y 轴起点和终点 → 输入实际数值 → 建立坐标系映射
[3] 提取数据 手动取点 / 半自动颜色拾取 / 框选删除误提取点
[4] 导出 Excel 等间距线性插值重采样 → 一键下载 .xlsx 文件
```
### 3. 精准标定系统
- **正交坐标映射**:X 轴和 Y 轴独立标定,不要求轴正交于原点
- **实时十字准星**:标定点可视化标记,误差一目了然
- **标定值回显**:每个标定点显示像素坐标 + 实际数值
### 4. 智能数据处理
- **自动 X 排序**:输出数据按 X 坐标升序排列
- **同值合并去重**:相同 X 附近的多个采集点取 Y 均值合并
- **等间距线性插值**:用户可设定输出点数(10-4000),均匀分布
- **实时数据预览**:前 10 行即时显示,验证提取质量
### 5. 交互优化
- ⚡ **容差滑块**:实时调节颜色匹配精度(RGB 空间距离阈值)
- 🖱️ **框选删除**:拖拽矩形框批量移除噪声像素
- 🔍 **4× 放大镜**:手动模式下像素级精确取样
- ⌨️ **键盘快捷键**:`C` 标定 | `M` 手动 | `S` 半自动 | `E` 导出 | `Ctrl+Z` 撤销
- 🌓 **暗色 UI + WebGL 背景**:毛玻璃面板 + 交互式 3D 棱镜着色器
---
## 技术架构
```
┌─────────────────────────────────────────────┐
│ 浏览器端 (Client Only) │
├─────────────────────────────────────────────┤
│ UI 层 │ 原生 DOM + CSS Glassmorphism │
│ 渲染层 │ Canvas 2D API (图像+叠加层) │
│ 背景层 │ WebGL Raymarching Shader │
│ 导出层 │ SheetJS (xlsx) │
│ 数据处理 │ 纯 JS 线性插值 + 颜色空间匹配 │
├─────────────────────────────────────────────┤
│ 零依赖 | 零后端 | 零注册 | 数据不出浏览器 │
└─────────────────────────────────────────────┘
```
**核心技术点:**
- **颜色匹配引擎**:RGB 欧几里得距离阈值 + 全图逐像素扫描,支持实时容差调节
- **坐标系重建**:基于 4 个标定点的正交线性映射,将像素坐标转为用户定义的实际量纲
- **Raymarching 背景**:GPU 着色器实时渲染 3D 棱镜,鼠标跟随旋转交互
- **数据后处理管线**:排序 → 分箱合并 → 等距插值 → 格式化输出
---
## 快速开始
### 在线使用
访问 **[chart2data.vercel.app](https://chart2data.vercel.app)** 即可直接使用。不需要安装、注册或登录。
### 本地运行
```bash
git clone https://github.com/xujianshu6-sketch/chart2data.git
cd chart2data
# 直接用浏览器打开 index.html,或用任意静态服务器:
npx serve .
```
兼容所有现代浏览器(Chrome / Edge / Firefox / Safari)。
---
## 使用示例
### 提取一条折线图数据(半自动模式)
1. 拖入论文截图
2. 点击"开始标定",在图上依次点 **X 轴起点 → X 轴终点 → Y 轴起点 → Y 轴终点**,每次输入对应的实际坐标值
3. 点击"拾取曲线颜色",在曲线上点一下
4. 调节容差滑块直到匹配像素覆盖整条曲线,点击"确认提取"
5. 设置输出数据组数,点击"导出 Excel"
### 提取柱状图数据(手动模式)
1. 上传图片 → 标定坐标轴
2. 进入"手动选点"模式
3. 依次点击每个柱子的顶点(放大镜辅助定位)
4. 导出
---
## 项目结构
```
chart2data/
index.html # 完整应用(单文件,包含 CSS + JS + WebGL Shader)
README.md
```
---
## 贡献
欢迎提 Issue 和 PR。
- 🐛 Bug 报告 → [Issues](https://github.com/xujianshu6-sketch/chart2data/issues)
- 💡 功能建议 → [Discussions](https://github.com/xujianshu6-sketch/chart2data/discussions)
---
## 许可
[MIT License](LICENSE) · 2026
---
如果这个工具对你有帮助,请给一个 ⭐ Star