dsh-image-blur 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -0
- package/client.js +1186 -0
- package/cordis.patch.yml +13 -0
- package/docs/preview-blurred.jpg +0 -0
- package/docs/preview-shown.jpg +0 -0
- package/icon.svg +26 -0
- package/index.js +15 -0
- package/locale/en.json +23 -0
- package/locale/zh.json +23 -0
- package/package.json +57 -0
package/README.md
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# dsh-image-blur
|
|
2
|
+
|
|
3
|
+
> **DSH 插件**:对话里的图片默认盖一层模糊,点图片右上角的「显示」才看清。
|
|
4
|
+
> 只在会话正文生效 —— 侧栏、右侧面板、插件页面、界面图标都不受影响。
|
|
5
|
+
|
|
6
|
+

|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 效果
|
|
12
|
+
|
|
13
|
+
**默认:模糊。** 图片一出现就糊住,右上角一颗「显示」按钮:
|
|
14
|
+
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
**点「显示」之后。** 图片清晰;按钮淡出,鼠标移上去会重新出现,点它即可盖回去:
|
|
18
|
+
|
|
19
|
+

|
|
20
|
+
|
|
21
|
+
两张图截自 DSH 对话窗口(图片由本机千问模型生成)。
|
|
22
|
+
|
|
23
|
+
## 功能
|
|
24
|
+
|
|
25
|
+
- **默认模糊,按需揭开**:图片出现即模糊,右上角有一颗「显示 / 模糊」按钮;点图片本身也能直接揭开。
|
|
26
|
+
- **只在对话里**:判定基于会话正文容器,聊天区以外的图片(插件图标、面板预览、设置页插图)完全不碰。
|
|
27
|
+
- **不外溢的模糊**:裁剪到图片自身的边框与圆角,不会在图片周围晕出一圈。
|
|
28
|
+
- **不闪裸图**:切换会话、流式输出时,新图片从第一帧就是模糊的。
|
|
29
|
+
- **按钮跟手**:随滚动逐帧跟随;图片被裁掉或滚出可见区域时按钮一起收起,不会浮在对话区外面。
|
|
30
|
+
- **零网络**:纯本地渲染,不发请求、不读图片内容、不改动图片文件。
|
|
31
|
+
|
|
32
|
+
## 安装
|
|
33
|
+
|
|
34
|
+
需要 **DSH 0.2 及以上**。包已发布到 npm:**`dsh-image-blur`**。
|
|
35
|
+
|
|
36
|
+
### 方式一:设置 → 插件(推荐)
|
|
37
|
+
|
|
38
|
+
**设置 → 插件 → 安装**,填 npm 包 `dsh-image-blur@0.2.6`;从本机装则填插件目录的绝对路径,例如 `D:\path\to\dsh-image-blur`。
|
|
39
|
+
|
|
40
|
+
> 社区市场(Community Market)的「可安装」一键装还要求该包出现在你添加的**目录来源**里;只发布到 npm 不会自动成为市场条目。
|
|
41
|
+
|
|
42
|
+
### 方式二:命令行
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
dsh plugin --profile <你的 profile> add dsh-image-blur@0.2.6
|
|
46
|
+
# 本地目录开发时
|
|
47
|
+
dsh plugin --profile <你的 profile> add D:\path\to\dsh-image-blur
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 方式三:交给 Agent 装
|
|
51
|
+
|
|
52
|
+
在对话里说一句「装一下 npm 上的 dsh-image-blur」,Agent 会用内置的 `plugin_manager`(`install_bundle`)完成安装。
|
|
53
|
+
|
|
54
|
+
装完**彻底退出 DSH 再打开** —— 宿主侧的插件清单只在启动时装配一次。
|
|
55
|
+
|
|
56
|
+
## 卸载与更新
|
|
57
|
+
|
|
58
|
+
- **卸载**:设置 → 插件(或社区市场的「已安装」视图)里移除 `dsh-image-blur`。市场走官方管理器的 `removeBundle`,会在 pnpm 移除前先取消选中。
|
|
59
|
+
- **更新**:以 npm 包名安装的 bundle 可以在「已安装」视图里检查更新(`updateBundle`,DSH 0.2.2+);从 GitHub 或本地路径安装的不能,需要重装新目录。
|
|
60
|
+
- 装好或更新后如果提示 `restart-required`,改动在下次启动生效。
|
|
61
|
+
|
|
62
|
+
> 安装/卸载/更新的边界以官方文档为准:`dsh-community-market` 的 [`docs/install-and-uninstall.zh.md`](https://github.com/anywhere-labs/dsh-desktop/blob/master/dsh-community-market/docs/install-and-uninstall.zh.md)。
|
|
63
|
+
|
|
64
|
+
## 使用
|
|
65
|
+
|
|
66
|
+
| 操作 | 效果 |
|
|
67
|
+
|---|---|
|
|
68
|
+
| 点右上角「显示」 | 图片变清晰,按钮变成「模糊」 |
|
|
69
|
+
| 点「模糊」 | 重新盖回去 |
|
|
70
|
+
| 直接点模糊的图片 | 揭开(这一次点击不会同时打开宿主自带的看图层) |
|
|
71
|
+
| 揭开后再点图片 | 走宿主原本的逻辑(看图层里的新图片同样默认模糊) |
|
|
72
|
+
|
|
73
|
+
同一张图(相同 `src`)只记一次状态,切换会话或重渲染不会又糊上。多图附件的缩略图上,按钮会缩成一个小眼睛图标,不遮图。
|
|
74
|
+
|
|
75
|
+
## 设置
|
|
76
|
+
|
|
77
|
+
**设置 → 通用 → 图片模糊**:
|
|
78
|
+
|
|
79
|
+
| 项 | 说明 |
|
|
80
|
+
|---|---|
|
|
81
|
+
| 总开关 | 关掉后不介入任何图片(属性与按钮全部撤销) |
|
|
82
|
+
| 强度 | 轻 10px / 中 20px / 强 36px 的模糊半径 |
|
|
83
|
+
|
|
84
|
+
配置存放在 `localStorage`,键 `dsh-image-blur:settings:v1`:
|
|
85
|
+
|
|
86
|
+
| 字段 | 默认 | 说明 |
|
|
87
|
+
|---|---|---|
|
|
88
|
+
| `enabled` | `true` | 总开关 |
|
|
89
|
+
| `strength` | `"normal"` | `light` / `normal` / `strong` |
|
|
90
|
+
| `minPx` | `120` | 大图的渲染宽度门槛(像素) |
|
|
91
|
+
|
|
92
|
+
## 哪些图片会被处理
|
|
93
|
+
|
|
94
|
+
同时满足「位置」与「尺寸」两条才会模糊:
|
|
95
|
+
|
|
96
|
+
- **位置**:位于会话正文容器内(消息流与输入区)。
|
|
97
|
+
- **尺寸**:满足其一即可
|
|
98
|
+
- 大图:渲染宽度 ≥ `minPx`(默认 120)且渲染高度 ≥ 48;
|
|
99
|
+
- 缩略图:原图 ≥ 200×200 且渲染 ≥ 56×56(多图附件的紧凑格子走这条)。
|
|
100
|
+
|
|
101
|
+
图标、状态点、1px 占位图都会被排除。
|
|
102
|
+
|
|
103
|
+
### 排除某张图
|
|
104
|
+
|
|
105
|
+
给 `<img>` 或它的任意祖先加一个属性即可:
|
|
106
|
+
|
|
107
|
+
```html
|
|
108
|
+
<img data-dsh-imgblur-ignore="1" src="...">
|
|
109
|
+
<div data-dsh-imgblur-skip><img src="..."></div>
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## 工作原理
|
|
113
|
+
|
|
114
|
+
插件由两半组成:宿主半边为空实现,全部逻辑在浏览器半边。
|
|
115
|
+
|
|
116
|
+
1. **定位作用域**:在 `conversation.chat.turnTail` 与 `conversation.composer.dock` 各挂一个零尺寸锚点,取二者的最近公共祖先作为「会话正文容器」;锚点用 `useLayoutEffect` 登记,保证在绘制前就位。
|
|
117
|
+
2. **模糊**:给 `<img>` 加自有属性 `data-dsh-imgblur`,由样式表下发 `filter: blur()`,并用 `clip-path: inset(0 round <图片自身的圆角>)` 裁回图片边界。**不改 DOM 结构、不动 `className` / `style`**,所以宿主重渲染时不会因为多余的包裹层报错。
|
|
118
|
+
3. **首帧不闪**:`MutationObserver` 回调(微任务,早于绘制)里同步登记新增的 `<img>`;容器另有 `[data-dsh-imgblur-scope]` 的 CSS 预糊兜底。
|
|
119
|
+
4. **按钮**:在 `shell.overlay` 槽渲染一层穿透浮层,逐帧按图片矩形定位;可见性用「裁剪矩形交集 + `elementFromPoint` 命中测试」判定。
|
|
120
|
+
|
|
121
|
+
## 目录结构
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
dsh-image-blur/
|
|
125
|
+
├─ package.json dsh.bundle.patch + dsh.client{platform:web, immediately:true}
|
|
126
|
+
├─ cordis.patch.yml 宿主行:image-blur
|
|
127
|
+
├─ index.js 宿主半边(空实现)
|
|
128
|
+
├─ client.js 浏览器半边:作用域 / 判定 / 样式 / 浮层按钮 / 设置行
|
|
129
|
+
├─ locale/{zh,en}.json 插件显示名与描述
|
|
130
|
+
├─ icon.svg 插件图标
|
|
131
|
+
├─ docs/ 效果对比图(README 用)
|
|
132
|
+
└─ README.md
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## 排障
|
|
136
|
+
|
|
137
|
+
| 现象 | 处理 |
|
|
138
|
+
|---|---|
|
|
139
|
+
| 图片完全没被处理 | 确认插件已启用(设置 → 插件),并**彻底退出 DSH 重开**;再检查设置里的总开关 |
|
|
140
|
+
| 聊天里的图没糊,别处糊了 | 作用域锚点没挂上:检查 `conversation.chat.turnTail` / `conversation.composer.dock` 里是否还有 `image-blur-anchor-*` |
|
|
141
|
+
| 想糊更小的图 | 把 `minPx` 调小(localStorage),刷新页面 |
|
|
142
|
+
| 按钮位置偏了 | 图片位于带 `transform` 的容器内时可能出现,调整 `shell.overlay` 注册项的 `order` 可缓解 |
|
|
143
|
+
| 看图层里的图还是糊的 | 这是设计:新出现的图片一律默认模糊,点它自己的「显示」 |
|
|
144
|
+
|
|
145
|
+
## 已知限制
|
|
146
|
+
|
|
147
|
+
- **不做内容识别**:不判断图片是否少儿不宜,所有够大的图片一视同仁。
|
|
148
|
+
- 远程图片(Markdown 里的 `http(s)` 链接)只要在会话正文内且够大,同样会被模糊。
|
|
149
|
+
- 比视口还高的长图,滚到中段时按钮会随图片右上角一起移出可见区。
|
|
150
|
+
- 依赖 DSH 的槽位与 `/api/file` 图片渲染路径,升级内核后若出现异常,优先看排障第 2 条。
|
|
151
|
+
|
|
152
|
+
## 开发
|
|
153
|
+
|
|
154
|
+
纯 ESM、零依赖、无构建步骤。改完 `client.js` 后刷新页面即可;宿主侧改动需重启 DSH。
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
node --check client.js
|
|
158
|
+
node --check index.js
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## 许可
|
|
162
|
+
|
|
163
|
+
MIT
|