一、技能总览

Image 是集成图像编辑、格式转换、裁剪缩放、水印处理、图文识别、批量处理、特效优化于一体的全能图像处理工具。兼容本地图片、截图、网页图片、PDF 导出图等各类素材,同时结合 OCR、智能修图、批量流水线能力,适配办公、资料整理、图文解析、素材制作等场景。

深度联动 OpenClaw 生态,可配合 PDF 提取、网页爬虫、桌面自动化、深度研究、PPT 制作 完成「图片获取→处理→识别→复用」全链路,也可服务于资料归档、报表配图、素材加工等日常流程。

二、传统工具痛点 & 智能化升级

(一)常规图像处理工具短板

  1. 功能分散,修图、转格式、裁剪、识别需切换多款软件,操作繁琐
  2. 批量处理能力弱,大量图片需逐张手动操作,耗时费力
  3. 图片文字识别精度一般,倾斜、模糊、低分辨率图文易出错
  4. 缺少自动化流程,无法搭配其他工具做串联任务
  5. 处理后文件杂乱,无统一归档、命名规则,管理困难

(二)本技能核心智能化升级

  • 一站式集成:编辑、转换、识别、压缩、水印、特效等功能全覆盖
  • 批量流水线处理:支持整文件夹图片统一执行多步操作
  • 高精度 OCR 图文识别:适配倾斜、模糊、水印遮挡的图片文字提取
  • 智能优化:自动调色、锐化、去噪、修正角度,提升图片观感
  • 灵活尺寸 / 比例:自定义裁剪、等比缩放、固定模板尺寸
  • 水印 & 隐私保护:添加文字 / 图片水印、局部打码脱敏
  • 多格式互转:JPG/PNG/GIF/BMP/WebP 无缝转换
  • 任务记忆:保存常用尺寸、水印样式、处理规则,一键复用
  • 全生态联动:图片数据、识别结果直接推送至其他模块流转使用

三、核心功能模块

(一)基础图像编辑

  1. 尺寸调整 自由缩放、等比缩放、固定分辨率裁剪、按比例裁切,支持自定义宽高参数。
  2. 裁剪与旋转 手动选区裁剪、自动裁边、角度旋转、扶正倾斜图片。
  3. 调色与画质优化 亮度、对比度、饱和度调节;自动锐化、降噪、提亮、修复模糊画面。

(二)格式转换 & 压缩

  • 主流格式互转:JPG、PNG、GIF、BMP、WebP 任意切换
  • 智能压缩:无损压缩 / 有损压缩,自定义文件大小上限,兼顾画质与体积
  • 批量转格式:文件夹内所有图片统一转换、统一保存路径

(三)水印与隐私处理

  1. 添加水印 自定义文字水印、图片水印,支持调整位置、透明度、字体样式。
  2. 隐私脱敏 局部马赛克、模糊打码,遮挡手机号、地址、账号等敏感信息。

(四)OCR 图片文字识别

  • 单张 / 批量识别图片内文字,自动排版输出纯文本
  • 适配场景:截图、证件、纸质资料拍照、图表备注、网页截图
  • 识别结果可直接导出文本文件,对接文档、研究模块使用

(五)批量任务处理

  • 多任务组合:一张图片依次执行「裁剪→压缩→加水印→转格式」
  • 文件夹批量执行:遍历目录下所有图片,统一规则处理
  • 自定义命名规则:处理后文件自动重命名,规整归档

(六)截图联动

配合 Desktop Control,支持桌面全屏截图、选区截图、窗口截图,截图后自动进入处理流程。

(七)OpenClaw 全生态联动

  1. Agent Memory:记忆常用分辨率、水印内容、压缩参数、批量规则。
  2. Pdf Extract:PDF 导出图片后,自动优化、识别图文、整理素材。
  3. Playwright Scraper:爬虫下载的网页图片,批量转格式、加水印、归档。
  4. Deep Research Pro:图表、截图资料识别文字,提取内容用于分析撰写。
  5. PPT 智能创作:图片统一尺寸、优化画质,直接作为 PPT 配图使用。
  6. Desktop Control:截图 → 处理 → 保存全程自动化。

四、分层架构(适配二次开发)

  1. 全局配置层:默认尺寸、压缩等级、水印参数、OCR 语言、输出路径
  2. 文件加载层:单文件 / 文件夹遍历、图片格式校验、读取解析
  3. 图像编辑层:裁剪、缩放、旋转、调色、锐化、降噪等基础处理
  4. 格式转换层:编码转换、体积压缩、格式编码适配
  5. 水印 & 脱敏层:水印绘制、局部模糊、马赛克处理
  6. OCR 识别层:图像预处理、文字检测、字符识别、文本排版输出
  7. 批量任务层:多文件队列、组合任务编排、进度管控
  8. 导出归档层:文件保存、自动重命名、目录分类
  9. 生态联动层:记忆读写、数据推送、跨工具任务串联

五、核心代码实现(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:隐私资料处理

对含敏感信息的截图、证件图片做打码脱敏,保障信息安全后再流转使用。

八、二次开发拓展方向

  1. 批量图文解析:文件夹图片全量 OCR,统一导出文档
  2. 证件专项处理:身份证、票据自动扶正、裁剪、分类归档
  3. 图片合成拼接:多图合并、长图拼接、图文组合
  4. 滤镜特效拓展:内置多款滤镜、边框、图标装饰
  5. 云端图床对接:处理完成后自动上传图床、返回链接