Skip to content

Commit 60c7a5d

Browse files
ruibin3claude
andcommitted
chore: bump version to 0.0.9.0
- Remove sidebar collapse feature - Remove web clipping feature - Performance optimizations (differential DOM updates) - UI: smaller fonts, Pin menu first position Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent e736e37 commit 60c7a5d

File tree

6 files changed

+659
-3
lines changed

6 files changed

+659
-3
lines changed

.claude/skills/adb-scheme.md

Lines changed: 164 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,164 @@
1+
---
2+
name: adb-scheme
3+
description: Open Android scheme links via adb. Usage: say "打开 scheme sinaweibo://detail?mblogid=xxx" to open on connected Android device.
4+
---
5+
6+
# ADB 打开 Scheme 技能 - 执行指令
7+
8+
## 触发条件
9+
用户说以下内容时触发此技能:
10+
- "打开 scheme <scheme_url>"
11+
- "open scheme <scheme_url>"
12+
- "adb 打开 <scheme_url>"
13+
- "用 adb 打开 <scheme_url>"
14+
15+
---
16+
17+
## 功能说明
18+
19+
通过 ADB(Android Debug Bridge)在连接的 Android 设备上打开自定义 Scheme 链接。
20+
21+
### 常见 Scheme 示例
22+
23+
| 应用 | Scheme 格式 |
24+
|------|-------------|
25+
| 微博 | `sinaweibo://detail?mblogid=xxx` |
26+
| 微信 | `weixin://` |
27+
| 支付宝 | `alipay://` |
28+
| 淘宝 | `taobao://` |
29+
| 抖音 | `snssdk1128://` |
30+
| 知乎 | `zhihu://` |
31+
32+
---
33+
34+
## 前置要求
35+
36+
### 1. 安装 ADB
37+
38+
**Mac (Homebrew)**:
39+
```bash
40+
brew install android-platform-tools
41+
```
42+
43+
**Linux**:
44+
```bash
45+
sudo apt-get install android-tools-adb
46+
```
47+
48+
**Windows**:
49+
1. 下载 Android Platform Tools: https://developer.android.com/tools/releases/platform-tools
50+
2. 解压并添加到 PATH
51+
52+
### 2. 连接 Android 设备
53+
54+
1. 开启 USB 调试模式
55+
2. 用 USB 连接电脑
56+
3. 设备上确认 USB 调试授权
57+
4. 验证连接:
58+
```bash
59+
adb devices
60+
```
61+
62+
---
63+
64+
## 使用方法
65+
66+
### 基本用法
67+
68+
```bash
69+
adb shell am start -a android.intent.action.VIEW -d "sinaweibo://detail?mblogid=4947343943142271"
70+
```
71+
72+
### 完整脚本
73+
74+
创建一个脚本 `adb_open_scheme.sh`
75+
76+
```bash
77+
#!/bin/bash
78+
# ADB 打开 Scheme 脚本
79+
# 用法: ./adb_open_scheme.sh sinaweibo://detail?mblogid=xxx
80+
81+
if [ -z "$1" ]; then
82+
echo "用法: $0 <scheme_url>"
83+
echo "示例: $0 sinaweibo://detail?mblogid=4947343943142271"
84+
exit 1
85+
fi
86+
87+
SCHEME_URL="$1"
88+
89+
echo "正在通过 ADB 打开: $SCHEME_URL"
90+
91+
adb shell am start -a android.intent.action.VIEW -d "$SCHEME_URL"
92+
93+
if [ $? -eq 0 ]; then
94+
echo "✓ 命令已发送"
95+
else
96+
echo "✗ 执行失败,请检查:"
97+
echo " 1. 设备是否已连接 (adb devices)"
98+
echo " 2. URL 格式是否正确"
99+
exit 1
100+
fi
101+
```
102+
103+
### 使用脚本
104+
105+
```bash
106+
# 赋予执行权限
107+
chmod +x adb_open_scheme.sh
108+
109+
# 打开微博
110+
./adb_open_scheme.sh sinaweibo://detail?mblogid=4947343943142271
111+
112+
# 打开微信
113+
./adb_open_scheme.sh weixin://
114+
115+
# 打开支付宝
116+
./adb_open_scheme.sh alipay://platformapi/startapp?saId=xxx
117+
```
118+
119+
---
120+
121+
## 参数说明
122+
123+
| 参数 | 说明 |
124+
|------|------|
125+
| `am start` | Activity Manager 启动命令 |
126+
| `-a android.intent.action.VIEW` | Intent 动作:查看内容 |
127+
| `-d <URI>` | 数据 URI(scheme 地址) |
128+
| `-n <Component>` | 可选,直接指定组件(如包名/Activity) |
129+
130+
---
131+
132+
## 常见问题
133+
134+
### Q1: 提示 "more than one device"
135+
**A**: 有多个设备连接,需要指定设备:
136+
```bash
137+
adb -d shell am start -a android.intent.action.VIEW -d "scheme_url" # USB 设备
138+
adb -e shell am start -a android.intent.action.VIEW -d "scheme_url" # 模拟器
139+
# 或指定设备序列号
140+
adb -s <serial> shell am start -a android.intent.action.VIEW -d "scheme_url"
141+
```
142+
143+
### Q2: 提示 "Activity not started"
144+
**A**: 设备上没有安装处理该 scheme 的应用,需要先安装对应应用。
145+
146+
### Q3: 设备未连接
147+
**A**:
148+
1. 检查 USB 调试是否开启
149+
2. 尝试重新连接 USB
150+
3. 运行 `adb devices` 查看设备列表
151+
152+
### Q4: URL 包含特殊字符
153+
**A**: 用引号包裹 URL:
154+
```bash
155+
adb shell am start -a android.intent.action.VIEW -d 'sinaweibo://detail?mblogid=xxx&key=value'
156+
```
157+
158+
---
159+
160+
## 完成后提醒
161+
162+
执行完成后:
163+
- 在 Android 设备上应该会自动弹出对应应用
164+
- 如果应用已打开,可能会跳转到指定页面

.claude/skills/pdf2image.md

Lines changed: 234 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,234 @@
1+
---
2+
name: pdf2image
3+
description: Convert PDF pages to images using Python pdf2image library. Usage: say "pdf转图片" or "convert pdf to image" to convert PDF file to images.
4+
---
5+
6+
# PDF 转图片技能 - 执行指令
7+
8+
## 触发条件
9+
用户说以下内容时触发此技能:
10+
- "pdf转图片"
11+
- "convert pdf to image"
12+
- "pdf转换成图片"
13+
- "把pdf转成图片"
14+
- "提取pdf页面为图片"
15+
16+
---
17+
18+
## 功能说明
19+
20+
**pdf2image** 是一个 Python 库,可以将 PDF 的每一页转换为 PIL 图片对象。
21+
22+
### 主要功能
23+
- 将 PDF 文件转换为图片列表
24+
- 支持指定页码范围
25+
- 支持 DPI 设置
26+
- 支持多种输出格式(PPM、JPEG、PNG)
27+
- 支持灰度转换
28+
- 支持自定义输出尺寸
29+
30+
---
31+
32+
## 前置要求
33+
34+
### 1. 安装 Python 依赖
35+
36+
```bash
37+
pip install pdf2image
38+
```
39+
40+
### 2. 安装 Poppler
41+
42+
**Mac (Homebrew)**:
43+
```bash
44+
brew install poppler
45+
```
46+
47+
**Linux**:
48+
```bash
49+
sudo apt-get install poppler-utils
50+
```
51+
52+
**Windows**:
53+
1. 下载 poppler for Windows: https://github.com/oschwartz10612/poppler-windows/releases/
54+
2. 解压到指定目录(如 `C:\poppler-xx`
55+
3. 添加 `bin/` 文件夹到 PATH,或在代码中指定 `poppler_path`
56+
57+
---
58+
59+
## 使用方法
60+
61+
### 基本用法
62+
63+
```python
64+
from pdf2image import convert_from_path
65+
66+
# 将整个 PDF 转换为图片列表
67+
images = convert_from_path('example.pdf')
68+
69+
# 保存图片
70+
for i, image in enumerate(images):
71+
image.save(f'page_{i + 1}.jpg')
72+
```
73+
74+
### 高级用法
75+
76+
```python
77+
from pdf2image import convert_from_path, convert_from_bytes
78+
79+
# 1. 指定 DPI(默认 200)
80+
images = convert_from_path('example.pdf', dpi=300)
81+
82+
# 2. 只转换指定页面(第 1-5 页)
83+
images = convert_from_path('example.pdf', first_page=1, last_page=5)
84+
85+
# 3. 转换为 JPEG 格式(更快,文件更小)
86+
images = convert_from_path('example.pdf', fmt='jpeg')
87+
88+
# 4. 转换为灰度
89+
images = convert_from_path('example.pdf', grayscale=True)
90+
91+
# 5. 自定义输出尺寸
92+
images = convert_from_path('example.pdf', size=400) # 适应 400x400
93+
images = convert_from_path('example.pdf', size=(800, 600)) # 固定尺寸
94+
95+
# 6. 从字节数据转换(适用于上传的文件)
96+
with open('example.pdf', 'rb') as f:
97+
pdf_bytes = f.read()
98+
images = convert_from_bytes(pdf_bytes)
99+
100+
# 7. 指定输出文件夹(节省内存)
101+
import tempfile
102+
with tempfile.TemporaryDirectory() as path:
103+
images = convert_from_path('example.pdf', output_folder=path)
104+
# 图片已保存到输出文件夹
105+
```
106+
107+
---
108+
109+
## 完整脚本
110+
111+
创建一个脚本 `pdf_to_images.py`
112+
113+
```python
114+
#!/usr/bin/env python3
115+
"""
116+
PDF 转图片脚本
117+
用法: python pdf_to_images.py <pdf文件路径> [输出文件夹]
118+
"""
119+
120+
import sys
121+
import os
122+
from pathlib import Path
123+
from pdf2image import convert_from_path
124+
125+
def convert_pdf_to_images(pdf_path, output_folder=None, dpi=200):
126+
"""
127+
将 PDF 转换为图片
128+
129+
Args:
130+
pdf_path: PDF 文件路径
131+
output_folder: 输出文件夹(默认与 PDF 同目录)
132+
dpi: 输出图片 DPI(默认 200)
133+
"""
134+
pdf_path = Path(pdf_path)
135+
136+
if not pdf_path.exists():
137+
print(f"错误: 文件不存在: {pdf_path}")
138+
return
139+
140+
# 默认输出文件夹
141+
if output_folder is None:
142+
output_folder = pdf_path.parent / f"{pdf_path.stem}_images"
143+
else:
144+
output_folder = Path(output_folder)
145+
146+
output_folder.mkdir(exist_ok=True)
147+
print(f"输出文件夹: {output_folder}")
148+
149+
# 转换 PDF
150+
print(f"正在转换: {pdf_path.name}")
151+
images = convert_from_path(pdf_path, dpi=dpi)
152+
153+
# 保存图片
154+
for i, image in enumerate(images):
155+
output_path = output_folder / f"page_{i + 1:03d}.jpg"
156+
image.save(output_path, 'JPEG')
157+
print(f" 已保存: {output_path.name}")
158+
159+
print(f"\n完成!共转换 {len(images)}")
160+
161+
if __name__ == '__main__':
162+
if len(sys.argv) < 2:
163+
print("用法: python pdf_to_images.py <pdf文件路径> [输出文件夹]")
164+
sys.exit(1)
165+
166+
pdf_file = sys.argv[1]
167+
out_dir = sys.argv[2] if len(sys.argv) > 2 else None
168+
dpi = 200 # 可以修改这个值来调整输出质量
169+
170+
convert_pdf_to_images(pdf_file, out_dir, dpi)
171+
```
172+
173+
### 使用脚本
174+
175+
```bash
176+
# 基本用法
177+
python pdf_to_images.py example.pdf
178+
179+
# 指定输出文件夹
180+
python pdf_to_images.py example.pdf ./output_images
181+
182+
# 修改 DPI 为 300(更高清)
183+
# 编辑脚本中的 dpi = 200 为 dpi = 300
184+
```
185+
186+
---
187+
188+
## 参数说明
189+
190+
| 参数 | 类型 | 默认值 | 说明 |
191+
|------|------|--------|------|
192+
| `pdf_path` | str | 必填 | PDF 文件路径 |
193+
| `dpi` | int | 200 | 输出图片 DPI,越大越清晰 |
194+
| `output_folder` | str | None | 输出文件夹,None 则返回 PIL 对象 |
195+
| `first_page` | int | None | 起始页码(从 1 开始) |
196+
| `last_page` | int | None | 结束页码 |
197+
| `fmt` | str | 'ppm' | 输出格式:'ppm', 'jpeg', 'png' |
198+
| `grayscale` | bool | False | 是否转换为灰度 |
199+
| `size` | int/tuple | None | 输出尺寸 |
200+
| `thread_count` | int | 1 | 线程数(建议不超过 4) |
201+
202+
---
203+
204+
## 常见问题
205+
206+
### Q1: 提示 "poppler not found"
207+
**A**: 需要安装 poppler 工具,见上方「前置要求」
208+
209+
### Q2: 内存溢出
210+
**A**: 使用 `output_folder` 参数,避免将所有图片加载到内存:
211+
```python
212+
convert_from_path('large.pdf', output_folder='./temp')
213+
```
214+
215+
### Q3: 转换速度慢
216+
**A**:
217+
- 使用 `fmt='jpeg'` 格式
218+
- 使用 `output_folder` 参数(SSD 上更快)
219+
- 调低 `dpi`
220+
221+
### Q4: Windows 下报错
222+
**A**: 指定 poppler 路径:
223+
```python
224+
convert_from_path('example.pdf', poppler_path=r'C:\poppler-23\bin')
225+
```
226+
227+
---
228+
229+
## 完成后提醒
230+
231+
转换完成后,用户可以:
232+
- 在输出文件夹查看转换后的图片
233+
- 使用图片处理软件进一步编辑
234+
- 上传到文档或分享平台

0 commit comments

Comments
 (0)