# EzImage
--- **EzImage for Obsidian** 解决了 Obsidian 图片管理的核心痛点:默认情况下,粘贴的图片会以本地文件的形式保存在 vault 中,久而久之导致文件夹混乱。EzImage 拦截每一次粘贴和拖拽事件,将图片上传到你的云存储,并在光标处插入简洁的 Markdown 链接。需要本地保存时,点击状态栏一键切换模式即可。 ## ✨ 功能特性 - **🖼️ 无感粘贴拦截** — 在笔记中粘贴图片,EzImage 在 Obsidian 本地保存之前拦截事件,上传图片并自动插入 ``。 - **🖱️ 拖拽上传** — 直接从 Finder / 文件管理器将图片拖入编辑器,自动上传。 - **💾 本地保存模式** — 在设置页开启或通过命令面板(`EzImage: Toggle Local Save Mode`)切换到本地保存模式,此时粘贴和拖拽均走 Obsidian 默认行为,图片保存到 vault 本地。状态栏始终显示当前模式。 - **📉 自动 WebP 压缩** — 基于 `browser-image-compression`,上传前自动转为 WebP 并按需缩放,压缩体积的同时自动清除 EXIF 元数据。 - **🔏 EXIF 元数据清除** — 关闭压缩时,EzImage 通过 Canvas 重绘图片后再上传,移除 GPS 位置、设备信息等隐私数据,无需额外依赖。 - **🛡️ 上传可靠性** — 网络抖动时自动重试最多 2 次(退避策略)。凭证错误提示去检查设置,网络错误提示检查连接。 - **📂 灵活路径模板** — 通过变量完全控制上传路径:`{yyyy}` `{MM}` `{dd}` `{timestamp}` `{random}` `{name}` `{ext}`。 - **☁️ Cloudflare R2** — 零出口流量费,S3 兼容 API,全球 CDN。更多云存储提供商即将支持。 - **🔒 本地签名** — AWS Signature V4 完全在设备端通过 Web Crypto API 计算,你的密钥永不离开本机。 - **🌐 中英文界面** — 设置页面支持中文 / 英文 / 跟随系统,随时切换。 ## 📦 安装 ### 方式 A:社区插件市场(推荐) 1. 打开 Obsidian → **设置 → 第三方插件 → 浏览**。 2. 搜索 **EzImage**,点击**安装**,然后**启用**。 ### 方式 B:手动安装 1. 从 [GitHub Releases](https://github.com/keepwonder/ezimage-obsidian/releases) 下载 `main.js` 和 `manifest.json`。 2. 将两个文件复制到 `<你的vault>/.obsidian/plugins/ezimage/` 目录下。 3. 重启 Obsidian,在**设置 → 第三方插件**中启用插件。 ## ⚙️ 配置 打开**设置 → EzImage**,填入你的 Cloudflare R2 凭证: | 字段 | 说明 | | :--- | :--- | | **Account ID** | 在 Cloudflare 控制台右侧边栏中找到 | | **Access Key ID** | R2 API Token — 需要 *Object Read & Write* 权限 | | **Secret Access Key** | 与 Access Key 配对的密钥 | | **Bucket Name** | 上传图片的 R2 存储桶名称 | | **Public URL** | 存储桶的公开访问地址,例如 `https://pub-xxx.r2.dev` 或自定义域名 | ### 如何获取 R2 凭证 1. 登录 [Cloudflare 控制台](https://dash.cloudflare.com) → **R2 → 管理 API 令牌**。 2. 创建一个具有 **Object Read & Write** 权限的 Token,并将范围限定到你的存储桶。 3. 复制 **Account ID**、**Access Key ID** 和 **Secret Access Key**。 4. 确保存储桶已启用**公开访问**(或通过自定义域名 + Worker 提供访问)。 ### 通用设置 | 选项 | 默认值 | 说明 | | :--- | :--- | :--- | | **默认本地保存模式** | `关闭` | 开启后插件启动时默认进入本地保存模式 | | **语言** | `跟随系统` | 设置页面语言:跟随系统 / English / 中文 | ### 图片处理选项 | 选项 | 默认值 | 说明 | | :--- | :--- | :--- | | **压缩图片** | `开启` | 上传前转换为 WebP,同时自动清除 EXIF | | **清除 EXIF 元数据** | `开启` | 移除 GPS、设备信息等元数据。仅在关闭压缩时生效(开启压缩时 WebP 转换已自动清除 EXIF)| | **最大宽度** | `1920` | 超过此宽度时自动缩放(px),`0` 表示不限制 | | **压缩质量** | `85` | WebP 质量(1–100) | | **最大文件大小(MB)** | `20` | 超过此大小的文件将在上传前被拒绝,`0` 表示不限制 | | **路径模板** | `{yyyy}/{MM}/{timestamp}-{random}.{ext}` | 上传路径模板,设置页实时预览 | **模板变量:** `{yyyy}` `{MM}` `{dd}` `{hh}` `{mm}` `{ss}` `{timestamp}` `{random}` `{name}` `{ext}` ## 🚀 使用方式 | 操作 | 方法 | | :--- | :--- | | **粘贴图片** | 复制任意图片 → 在编辑器中粘贴,自动触发上传 | | **拖拽上传** | 从文件管理器拖拽图片文件到编辑器 | | **切换模式** | 设置页面 toggle,或命令面板 → `EzImage: Toggle Local Save Mode` | | **从文件上传** | 命令面板 → `EzImage: Upload Image from File` | | **上传剪贴板** | 命令面板 → `EzImage: Upload Clipboard Image` | | **批量上传本地图片** | 命令面板 → `EzImage: Batch Upload Local Images` (整个 vault)
扫码获取技术支持
微信支付 |
支付宝 |
由 Kiang 用 ❤️ 开发