- 图片即笔记本:导入任意图片,通过像素隐写将文字信息刻入图像,人眼无法察觉
- 跨平台桌面应用:Windows / macOS / Linux 原生体验,系统托盘、单实例运行
- 分类管理:多级分类、轻松移动、自定义颜色,轻松组织大量笔记
- 可选加密:支持密码加密,保护私密内容
- 一键备份:导出为
.IMGNote单文件归档,支持选择性导出与 MD5 去重导入 - 主题切换:浅色 / 深色模式,设置持久化
- 读写迅速:使用优化的 LSB 编码,加入数据缓存层,大大提升读写效率
通过修改图像像素的最低有效位(LSB)——将文字信息的二进制依次替换图片像素 RGBA 通道的最低位
比如:原像素 R 通道值:255(11111111)→ 替换最低位 1 为 0 → 254(11111110),人眼完全看不出差异; 每 8 个像素的最低 1 位可拼接成 1 个字节信息,批量替换即可嵌入完整内容。与原图片基本无异,却能在本应用中还原为可编辑文字。
⚠️ 注意事项:请勿对笔记本图片裁剪、缩放、压缩或重新保存,否则写入的数据可能无法恢复。建议定期导出备份。
通过以下介绍,直观了解 IMGNote 的完整操作流程。
首次打开应用,左侧为分类导航,右侧为主内容区。若当前分类下暂无笔记本,会显示空状态提示:
导入图片的两种方式:点击顶部的「导入图片」按钮,或将图片文件直接拖拽到主内容区域。
导入成功后,笔记会以卡片形式展示,每张卡片以原图作为封面:
点击任意笔记卡片进入编辑器。在文本区域输入内容后,点击「保存」即可将文字隐写入图片像素。
底部状态栏会实时显示:当前行/列、字符数、容量使用率(笔记内容占图片可容纳字节的比例)。请注意勿超出容量限制。
| 组件 | 版本 |
|---|---|
| Node.js | 18+ |
| Java | 17 |
| Maven | 3.6+ |
git clone https://github.com/L-Hong-Yu/IMGNote.git
cd IMGNotecd IMGNoteServer
mvn clean package产物:target/IMGNoteServer-1.0.0.jar
开发调试时可手动启动后端服务进行测试:
mvn spring-boot:run或
java -jar IMGNoteServer-1.0.0.jar将构建好的 JAR 放入客户端资源目录:
IMGNoteClient/imgnote-client/assets/IMGNoteServer-1.0.0.jar
将后端运行环境 JRE 放入客户端资源目录:
IMGNoteClient/imgnote-client/assets/env/
运行时将自动启动后端服务
cd IMGNoteClient/imgnote-client
npm install
npm run devIMGNote/
├── IMGNoteClient/ # 桌面客户端 (Electron + Vue)
│ └── imgnote-client/
│ ├── src/
│ │ ├── main/ # 主进程:窗口、托盘、IPC、后端进程管理
│ │ │ ├── index.js # 入口、协议注册、自动更新
│ │ │ ├── notebookService.js # 分类/笔记 CRUD、导入导出
│ │ │ └── store.js # 数据路径 (electron-store)
│ │ ├── preload/ # 预加载脚本 (contextBridge)
│ │ └── renderer/ # 渲染进程 (Vue 3)
│ │ └── src/
│ │ ├── api/ # 与后端 API 通信
│ │ ├── components/
│ │ ├── stores/ # Pinia 状态
│ │ └── views/ # 首页、编辑器、设置、帮助
│ ├── assets/env/ # 内嵌 JRE + IMGNoteServer JAR
│ └── resources/ # 应用图标
│
└── IMGNoteServer/ # 隐写服务 (Java Spring Boot)
└── src/main/java/com/imgnote/
├── controller/img/ # 读/写接口
├── service/Impl/ # 业务逻辑
├── ImgProcessor/ # ImgGen(写入)、ImgParser(读取)
├── bean/ # Header、Img、NoteBook、Pixel
├── cache/ # 数据缓存
└── converter/ # 头部构建与解析
| 层级 | 技术 |
|---|---|
| 客户端 | Electron 34、Vue 3、Vite 6、Pinia、Element Plus |
| 构建 | electron-vite、electron-builder |
| 后端 | Spring Boot 3.3、Java 17 |
| 隐写 | 自研 LSB 编码,支持 UTF-8、可选加密 |
┌───────────────────────────────────────────────────────────┐
│ Electron 主进程 │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ 窗口 / 托盘 │ │ 启动 JVM │ │ 导入导出 / 协议 │ │
│ └─────────────┘ │ IMGNoteServer│ └─────────────────┘ │
│ └───────┬──────┘ │
└───────────────────────────┼───────────────────────────────┘
│ localhost:9633
┌───────────────────────────┼───────────────────────────────┐
│ Vue 渲染进程 │
│ ┌────────────────────────▼────────────────────────────┐ │
│ │ axios → /api/notebook/read | write │ │
│ └─────────────────────────────────────────────────────┘ │
│ Home | Editor | Settings | Help │
└───────────────────────────────────────────────────────────┘
- 数据存储:
userData/dataBase/下按分类ID/笔记ID/组织,每笔记含meta.json与图片文件 - 安全访问:
imgnote-file://协议限制仅在数据目录内访问
cd IMGNoteClient/imgnote-client
npm run dev- 前端:Vite 开发服务器 (9634) + HMR
- 后端:主进程自动启动
IMGNoteServer-1.0.0.jar(9633)
修改 IMGNoteServer 后重新打包,替换 assets/env/ 中的 JAR,重启客户端即可。
- 前端:VSCode + ESLint + Prettier + Volar
- 后端:IntelliJ IDEA / Eclipse
Q: 打开/保存时有点慢?
信息需从像素中解析或写回,图片越大、内容越多,耗时越长,属正常现象。
Q: 可以用手机拍的照片当笔记本吗?
可以。高分辨率照片会带来较大文件与较慢解析,若只记少量文字,可先缩小后再导入。
Q: 图片分享给别人后,对方能看到笔记吗?
对方看到的是普通图片;只有分享原图(未被压缩、裁剪、转换)并在本应用中打开才能还原文字。
Q: 误删了分类或笔记本怎么办?
应用内删除不可恢复。若有导出的 .IMGNote 备份,可通过「导入数据」找回。
Copyright © [2026] [本人] 保留所有权利。
本作品基于 CC BY-NC 4.0 署名-非商业性使用 4.0 国际许可证 授权,并附加以下限制性条款:
- ❌ 禁止任何商业用途(包括但不限于盈利性使用、商业服务、付费分发等);
- ❌ 禁止基于本作品主张专利权利或提起专利相关诉讼/仲裁;
⚠️ 若需将作品/改装作品发布 GitHub/Gitee/网盘/社区/自媒体等任何公开平台,必须显著标注原作者与原仓库来源,且仍需遵守非商业/禁止专利规则。- ✅ 允许个人非商业场景下的私人使用;
- ✅ 允许对本作品进行改装(改装后仅可用于私人非商业使用)。
完整的许可证条款(含官方 CC BY-NC 4.0 文本及附加限制条款)详见项目根目录的 LICENSE 文件。
注:本许可证的附加限制条款优先级高于 CC BY-NC 4.0 原版中与之冲突的内容,未冲突部分仍遵循原版条款。
⭐ 如果这个项目对你有帮助,欢迎 Star


