Skip to content

L-Hong-Yu/IMGNote

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

IMGNote / 像素笔记

将文字刻进像素的笔记本

以图像像素为载体将信息写入图像中,每一张图片即一本独立笔记本,可用图像来隐蔽分享或存储重要信息

Electron Vue Spring Boot Java

功能特点使用指南快速开始项目结构开发指南


✨ 功能特点

  • 图片即笔记本:导入任意图片,通过像素隐写将文字信息刻入图像,人眼无法察觉
  • 跨平台桌面应用:Windows / macOS / Linux 原生体验,系统托盘、单实例运行
  • 分类管理:多级分类、轻松移动、自定义颜色,轻松组织大量笔记
  • 可选加密:支持密码加密,保护私密内容
  • 一键备份:导出为 .IMGNote 单文件归档,支持选择性导出与 MD5 去重导入
  • 主题切换:浅色 / 深色模式,设置持久化
  • 读写迅速:使用优化的 LSB 编码,加入数据缓存层,大大提升读写效率

写入原理

通过修改图像像素的最低有效位(LSB)——将文字信息的二进制依次替换图片像素 RGBA 通道的最低位

比如:原像素 R 通道值:255(11111111)→ 替换最低位 1 为 0 → 254(11111110),人眼完全看不出差异; 每 8 个像素的最低 1 位可拼接成 1 个字节信息,批量替换即可嵌入完整内容。与原图片基本无异,却能在本应用中还原为可编辑文字。

⚠️ 注意事项:请勿对笔记本图片裁剪、缩放、压缩或重新保存,否则写入的数据可能无法恢复。建议定期导出备份。


📖 使用指南

通过以下介绍,直观了解 IMGNote 的完整操作流程。

1. 主界面与导入

首次打开应用,左侧为分类导航,右侧为主内容区。若当前分类下暂无笔记本,会显示空状态提示:

空状态 - 导入引导

导入图片的两种方式:点击顶部的「导入图片」按钮,或将图片文件直接拖拽到主内容区域。

导入成功后,笔记会以卡片形式展示,每张卡片以原图作为封面:

主界面 - 笔记卡片

2. 编辑笔记

点击任意笔记卡片进入编辑器。在文本区域输入内容后,点击「保存」即可将文字隐写入图片像素。

笔记编辑器

底部状态栏会实时显示:当前行/列、字符数、容量使用率(笔记内容占图片可容纳字节的比例)。请注意勿超出容量限制。


📦 快速开始

环境要求

组件 版本
Node.js 18+
Java 17
Maven 3.6+

1. 克隆项目

git clone https://github.com/L-Hong-Yu/IMGNote.git
cd IMGNote

2. 构建后端(隐写服务)

cd IMGNoteServer
mvn clean package

产物:target/IMGNoteServer-1.0.0.jar

3. 配置客户端

i.开发阶段

开发调试时可手动启动后端服务进行测试:

   mvn spring-boot:run

  java -jar IMGNoteServer-1.0.0.jar

ii.打包发布

将构建好的 JAR 放入客户端资源目录:

IMGNoteClient/imgnote-client/assets/IMGNoteServer-1.0.0.jar

将后端运行环境 JRE 放入客户端资源目录:

IMGNoteClient/imgnote-client/assets/env/

运行时将自动启动后端服务

4. 安装并运行客户端

cd IMGNoteClient/imgnote-client
npm install
npm run dev

🏗 项目结构

IMGNote/
├── 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,重启客户端即可。

推荐 IDE

  • 前端: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

About

🔥 IMGNote 像素笔记(普通图片 = 加密笔记本):基于图片隐写(LSB)的跨平台笔记工具,将文字刻进图片像素,实现信息的隐蔽分享和存储,采用Electron/Vue/Spring Boot 技术栈,实现笔记的加密、备份、分类等功能;使用Java编写具体的隐写单元,采用优化的编码技术和数据缓存大大提升读写效率

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors