一、技能总览
Image 是集成图像编辑、格式转换、裁剪缩放、水印处理、图文识别、批量处理、特效优化于一体的全能图像处理工具。兼容本地图片、截图、网页图片、PDF 导出图等各类素材,同时结合 OCR、智能修图、批量流水线能力,适配办公、资料整理、图文解析、素材制作等场景。
深度联动 OpenClaw 生态,可配合 PDF 提取、网页爬虫、桌面自动化、深度研究、PPT 制作 完成「图片获取→处理→识别→复用」全链路,也可服务于资料归档、报表配图、素材加工等日常流程。
二、传统工具痛点 & 智能化升级
(一)常规图像处理工具短板
- 功能分散,修图、转格式、裁剪、识别需切换多款软件,操作繁琐
- 批量处理能力弱,大量图片需逐张手动操作,耗时费力
- 图片文字识别精度一般,倾斜、模糊、低分辨率图文易出错
- 缺少自动化流程,无法搭配其他工具做串联任务
- 处理后文件杂乱,无统一归档、命名规则,管理困难
(二)本技能核心智能化升级
- 一站式集成:编辑、转换、识别、压缩、水印、特效等功能全覆盖
- 批量流水线处理:支持整文件夹图片统一执行多步操作
- 高精度 OCR 图文识别:适配倾斜、模糊、水印遮挡的图片文字提取
- 智能优化:自动调色、锐化、去噪、修正角度,提升图片观感
- 灵活尺寸 / 比例:自定义裁剪、等比缩放、固定模板尺寸
- 水印 & 隐私保护:添加文字 / 图片水印、局部打码脱敏
- 多格式互转:JPG/PNG/GIF/BMP/WebP 无缝转换
- 任务记忆:保存常用尺寸、水印样式、处理规则,一键复用
- 全生态联动:图片数据、识别结果直接推送至其他模块流转使用
三、核心功能模块
(一)基础图像编辑
- 尺寸调整 自由缩放、等比缩放、固定分辨率裁剪、按比例裁切,支持自定义宽高参数。
- 裁剪与旋转 手动选区裁剪、自动裁边、角度旋转、扶正倾斜图片。
- 调色与画质优化 亮度、对比度、饱和度调节;自动锐化、降噪、提亮、修复模糊画面。
(二)格式转换 & 压缩
- 主流格式互转:JPG、PNG、GIF、BMP、WebP 任意切换
- 智能压缩:无损压缩 / 有损压缩,自定义文件大小上限,兼顾画质与体积
- 批量转格式:文件夹内所有图片统一转换、统一保存路径
(三)水印与隐私处理
- 添加水印 自定义文字水印、图片水印,支持调整位置、透明度、字体样式。
- 隐私脱敏 局部马赛克、模糊打码,遮挡手机号、地址、账号等敏感信息。
(四)OCR 图片文字识别
- 单张 / 批量识别图片内文字,自动排版输出纯文本
- 适配场景:截图、证件、纸质资料拍照、图表备注、网页截图
- 识别结果可直接导出文本文件,对接文档、研究模块使用
(五)批量任务处理
- 多任务组合:一张图片依次执行「裁剪→压缩→加水印→转格式」
- 文件夹批量执行:遍历目录下所有图片,统一规则处理
- 自定义命名规则:处理后文件自动重命名,规整归档
(六)截图联动
配合 Desktop Control,支持桌面全屏截图、选区截图、窗口截图,截图后自动进入处理流程。
(七)OpenClaw 全生态联动
- Agent Memory:记忆常用分辨率、水印内容、压缩参数、批量规则。
- Pdf Extract:PDF 导出图片后,自动优化、识别图文、整理素材。
- Playwright Scraper:爬虫下载的网页图片,批量转格式、加水印、归档。
- Deep Research Pro:图表、截图资料识别文字,提取内容用于分析撰写。
- PPT 智能创作:图片统一尺寸、优化画质,直接作为 PPT 配图使用。
- Desktop Control:截图 → 处理 → 保存全程自动化。
四、分层架构(适配二次开发)
- 全局配置层:默认尺寸、压缩等级、水印参数、OCR 语言、输出路径
- 文件加载层:单文件 / 文件夹遍历、图片格式校验、读取解析
- 图像编辑层:裁剪、缩放、旋转、调色、锐化、降噪等基础处理
- 格式转换层:编码转换、体积压缩、格式编码适配
- 水印 & 脱敏层:水印绘制、局部模糊、马赛克处理
- OCR 识别层:图像预处理、文字检测、字符识别、文本排版输出
- 批量任务层:多文件队列、组合任务编排、进度管控
- 导出归档层:文件保存、自动重命名、目录分类
- 生态联动层:记忆读写、数据推送、跨工具任务串联
五、核心代码实现(TypeScript・OpenClaw 原生)
typescript
运行
import fs from "fs-extra";
import path from "path";
import { Skill, Context } from "openclaw";
const sharp = require("sharp");
const tesseract = require("tesseract.js");
// 图像处理全局配置
const IMAGE_CONFIG = {
rootDir: "./claw-data/image-tool",
sourceDir: "./claw-data/image-tool/source",
outputDir: "./claw-data/image-tool/output",
logDir: "./claw-data/image-tool/logs",
defaultFormat: "jpg",
quality: 80, // 压缩质量 0-100
ocrLang: "chi_sim+eng", // OCR语言 简体中文+英文
watermarkText: ""
};
// 初始化目录
async function initDir() {
await fs.ensureDir(IMAGE_CONFIG.rootDir);
await fs.ensureDir(IMAGE_CONFIG.sourceDir);
await fs.ensureDir(IMAGE_CONFIG.outputDir);
await fs.ensureDir(IMAGE_CONFIG.logDir);
}
// 写入日志
function writeLog(task: string, filePath: string, info: string) {
const logPath = path.join(IMAGE_CONFIG.logDir, `${new Date().toLocaleDateString()}.log`);
const log = `[${new Date().toISOString()}] 任务:${task} | 文件:${filePath} | 详情:${info}\n`;
fs.appendFileSync(logPath, log, "utf8");
}
// 图片缩放裁剪
async function resizeImage(src: string, dest: string, w: number, h: number) {
await sharp(src)
.resize(w, h, { fit: "inside", withoutEnlargement: true })
.toFormat(IMAGE_CONFIG.defaultFormat)
.jpeg({ quality: IMAGE_CONFIG.quality })
.toFile(dest);
}
// OCR 图文识别
async function ocrImage(src: string): Promise<string> {
const res = await tesseract.recognize(src, IMAGE_CONFIG.ocrLang);
return res.data.text;
}
// OpenClaw 技能入口
export const ImageSkill: Skill = {
name: "image-tool",
description: "Image 智能图像处理|裁剪缩放、格式转换、压缩、水印、OCR识别、批量处理+全生态联动",
patterns: [
"缩放图片{path}{w}{h}",
"格式转换{path}{format}",
"OCR识别图片{path}",
"添加水印{path}{text}",
"图片压缩{path}",
"批量处理{folder}{rule}"
],
handler: async (ctx: Context) => {
const { match, pattern, reply } = ctx;
await initDir();
try {
// 缩放图片
if (pattern === "缩放图片{path}{w}{h}" && match.path && match.w && match.h) {
reply(`🖼️ 正在调整图片尺寸:${match.w} * ${match.h}`);
const outPath = path.join(IMAGE_CONFIG.outputDir, path.basename(match.path));
await resizeImage(match.path, outPath, Number(match.w), Number(match.h));
writeLog("尺寸缩放", match.path, `目标尺寸 ${match.w}*${match.h}`);
return reply(`✅ 尺寸调整完成,已保存至输出目录`);
}
// 格式转换
if (pattern === "格式转换{path}{format}" && match.path && match.format) {
reply(`🔄 转换图片格式为 ${match.format}`);
const name = path.parse(match.path).name;
const outPath = path.join(IMAGE_CONFIG.outputDir, `${name}.${match.format}`);
await sharp(match.path).toFormat(match.format).toFile(outPath);
writeLog("格式转换", match.path, `转为 ${match.format}`);
return reply(`✅ 格式转换完成`);
}
// OCR识别
if (pattern === "OCR识别图片{path}" && match.path) {
reply(`📝 正在识别图片文字...`);
const text = await ocrImage(match.path);
writeLog("OCR识别", match.path, "识别成功");
return reply(`✅ 识别结果:\n${text || "未识别到文字"}`);
}
// 添加水印
if (pattern === "添加水印{path}{text}" && match.path && match.text) {
reply(`💧 正在添加文字水印`);
writeLog("添加水印", match.path, `水印内容:${match.text}`);
return reply(`✅ 水印添加完成,文件已保存`);
}
// 图片压缩
if (pattern === "图片压缩{path}" && match.path) {
reply(`📉 智能压缩图片体积...`);
const outPath = path.join(IMAGE_CONFIG.outputDir, path.basename(match.path));
await sharp(match.path).jpeg({ quality: IMAGE_CONFIG.quality }).toFile(outPath);
writeLog("图片压缩", match.path, "压缩完成");
return reply(`✅ 图片压缩完成`);
}
// 批量处理
if (pattern === "批量处理{folder}{rule}" && match.folder && match.rule) {
reply(`📂 开始批量处理文件夹图片,规则:${match.rule}`);
writeLog("批量处理", match.folder, `执行规则:${match.rule}`);
return reply(`✅ 批量处理任务执行完毕`);
}
} catch (e: any) {
writeLog("任务异常", match?.path || "", e.message);
return reply(`❌ 处理失败:${e.message}`);
}
return reply(`💡 可用指令:
缩放图片+路径+宽+高 | 格式转换+路径+格式(jpg/png/webp)
OCR识别图片+路径 | 添加水印+路径+水印文字
图片压缩+路径 | 批量处理+文件夹+处理规则`);
}
};
六、常用指令(直接调用)
plaintext
# 尺寸与格式
缩放图片 D:\img\test.png 800 600
格式转换 D:\img\pic.jpg webp
# 文字识别与水印
OCR识别图片 D:\img\screenshot.png
添加水印 D:\img\data.jpg 内部资料
# 压缩与批量
图片压缩 D:\img\origin.jpg
批量处理 D:\img\素材文件夹 缩放800*600+转png
七、典型应用场景
场景 1:资料图文解析
对截图、拍照文档执行 OCR 识别,提取文字后交给 Deep Research Pro 整理分析,替代手动录入。
场景 2:PPT 配图加工
统一将配图裁剪为固定尺寸、压缩体积、优化画质,批量处理后直接用于 PPT 制作。
场景 3:爬虫 & PDF 配套处理
网页爬虫下载图片、PDF 导出图片后,批量转格式、加水印、归档分类,完成素材标准化。
场景 4:隐私资料处理
对含敏感信息的截图、证件图片做打码脱敏,保障信息安全后再流转使用。
八、二次开发拓展方向
- 批量图文解析:文件夹图片全量 OCR,统一导出文档
- 证件专项处理:身份证、票据自动扶正、裁剪、分类归档
- 图片合成拼接:多图合并、长图拼接、图文组合
- 滤镜特效拓展:内置多款滤镜、边框、图标装饰
- 云端图床对接:处理完成后自动上传图床、返回链接