📌 前言
在上一篇文章《图片去水印API完整教程:自动消除品牌水印和杂物(附Python/JS代码) 》中,我们介绍了图片去水印 API 的基本用法,很多朋友已经能够用几行代码实现单张图片的水印去除。但在实际业务中,我们往往需要批量处理------比如电商店铺每天有上百张商品图要去水印、自媒体小编每天要处理几十张封面图。
本篇教程将带你从单张图片去水印出发,升级到批量自动化处理 ,同时提供 Python / JavaScript / PHP 三种语言的完整示例,手把手教你搭建一个高效的去水印流水线。
💡 不想写代码? 可以直接体验我们的图片去水印在线工具 ,完全免费预览,上传即用。
开发者请直接查看图片去水印 API 文档,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
一、为什么需要批量自动化去水印?
-
电商场景:从1688或拼多多找的货源图大多带有平台水印或商家logo,批量清除后才能上架到自己的店铺。
-
内容创作:从图库下载的参考图往往有水印,需要一次性处理几十张。
-
企业内部:设计师交付的素材包内有多张水印图,希望用脚本一键清理。
单张手动处理显然不现实,而通过 API + 脚本,我们可以:
-
遍历整个文件夹
-
自动调用去水印 API
-
保存结果并生成日志
-
支持定时任务(如每天凌晨自动处理)
二、技术选型:为什么选择图片去水印 API?
市面上去水印方案主要有三种:
| 方案 | 优点 | 缺点 | 适用人群 |
|---|---|---|---|
| Photoshop 手动 | 精细可控 | 慢、不能批量 | 设计师 |
| 开源模型(如 Lama) | 免费 | 需要 GPU、部署复杂、效果不稳定 | 有 AI 基础的个人 |
| 云 API | 效果稳定、无需部署、支持批量、多语言 SDK | 少量收费 | 开发者、企业 |
我们推荐使用云 API ,尤其是对效果和效率有要求的生产环境。
本文示例使用的是石榴智能API文档(新用户赠送 免费调用,完全够测试;在线体验都可以先直接预览效果)。
📌 关联文章 :《图片去水印 API 哪个好?5种方案实测对比(附避坑指南 + 免费在线体验)》------ 我们详细评测了 5 种主流方案,你可以根据自己的需求选择。
三、API 接口说明(以本文所用 API 为例)

-
请求地址 :
https://api.yourdomain.com/v1/watermark/remove -
请求方式:POST
-
参数:
-
image(必填):图片文件(支持 jpg/png/bmp/webp),或图片 base64 字符串 -
mask(可选):水印位置提示(多边形坐标),不传则 AI 自动检测
-
-
返回:
python// ============================================================================== // 免费在线体验:https://www.shiliuai.com/auto_inpaint/ // API文档完整开发文档和代码示例:https://www.shiliuai.com/api/zidongqushuiyin // 支持免费在线体验 // API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等) // ============================================================================== { "code": 0, "msg": "OK", "msg_cn": "成功", "result_base64": "/9j/4AAQSkZJRgABAQAAAQABAAD...", "image_id": "b6a0f7d0b2f54d0ea3..." } // 失败示例 { "code": 4, "msg": "Invalid parameter: image_base64 or image_id is required", "msg_cn": "参数错误:image_base64 或 image_id 必填其中之一" }
详细字段说明请查阅 API文档,内含完整的错误码与回调机制。支持免费在线体验,API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
四、单张图片去水印(快速回顾)
我们用 Python 展示最简调用(便于和后面的批量版本对比):
python
# ==============================================================================
# 免费在线体验:https://www.shiliuai.com/auto_inpaint/
# API文档完整开发文档和代码示例:https://www.shiliuai.com/api/zidongqushuiyin
# 支持免费在线体验
# API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
# ==============================================================================
# -*- coding: utf-8 -*-
import requests
import base64
import cv2
import json
import numpy as np
api_key = '******' # 你的API KEY
image_path = '...' # 图片路径
"""
用 image_base64 请求
"""
with open(image_path, 'rb') as fp:
image_base64 = base64.b64encode(fp.read()).decode('utf8')
url = 'https://api.shiliuai.com/api/auto_inpaint/v1'
headers = {'APIKEY': api_key, "Content-Type": "application/json"}
data = {
"image_base64": image_base64
}
response = requests.post(url=url, headers=headers, json=data)
response = json.loads(response.content)
"""
成功:{'code': 0, 'msg': 'OK', 'msg_cn': '成功', 'result_base64': result_base64, 'image_id': image_id}
or
失败:{'code': error_code, 'msg': error_msg, 'msg_cn': 错误信息}
"""
image_id = response['image_id']
result_base64 = response['result_base64']
file_bytes = base64.b64decode(result_base64)
f = open('result.jpg', 'wb')
f.write(file_bytes)
f.close()
image = np.asarray(bytearray(file_bytes), dtype=np.uint8)
image = cv2.imdecode(image, cv2.IMREAD_UNCHANGED)
cv2.imshow('result', image)
cv2.waitKey(0)
"""
第二次用 image_id 请求(根据实际场景判断是否需要2次请求)
"""
data = {
"image_id": image_id
}
response = requests.post(url=url, headers=headers, json=data)
如果忘记基础用法,可以先看《图片去水印 API 完整教程:自动消除品牌水印和杂物(附 Python/JS 代码)》。
五、批量自动化去水印(核心内容)
5.1 Python 批量处理(支持多文件夹、进度条、日志)
python
# ==============================================================================
# 免费在线体验:https://www.shiliuai.com/auto_inpaint/
# API文档完整开发文档和代码示例:https://www.shiliuai.com/api/zidongqushuiyin
# 支持免费在线体验
# API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
# ==============================================================================
import os
import requests
from pathlib import Path
from tqdm import tqdm # 进度条库,需安装:pip install tqdm
API_KEY = "your_api_key"
API_URL = "https://api.shiliuai.com/api/auto_inpaint/v1"
def remove_watermark_batch(input_dir, output_dir, extensions=(".jpg", ".jpeg", ".png", ".bmp")):
"""
批量去除文件夹内所有图片的水印
:param input_dir: 输入文件夹路径
:param output_dir: 输出文件夹路径
:param extensions: 处理的图片扩展名
"""
Path(output_dir).mkdir(parents=True, exist_ok=True)
# 收集所有需要处理的图片
image_files = []
for ext in extensions:
image_files.extend(Path(input_dir).glob(f"*{ext}"))
image_files.extend(Path(input_dir).glob(f"*{ext.upper()}"))
print(f"找到 {len(image_files)} 张图片,开始批量去水印...")
for img_path in tqdm(image_files, desc="处理进度"):
try:
with open(img_path, "rb") as f:
files = {"image": f}
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.post(API_URL, files=files, headers=headers, timeout=30)
if resp.status_code == 200:
result_url = resp.json()["data"]["result_url"]
# 下载处理后的图片并保存到输出目录
img_data = requests.get(result_url).content
output_path = Path(output_dir) / img_path.name
with open(output_path, "wb") as out_f:
out_f.write(img_data)
else:
print(f"失败:{img_path.name} - {resp.text}")
except Exception as e:
print(f"异常:{img_path.name} - {str(e)}")
print("批量处理完成!")
# 使用示例
remove_watermark_batch("./input_images", "./output_images")
5.2 JavaScript (Node.js) 批量处理
javascript
// ==============================================================================
// 免费在线体验:https://www.shiliuai.com/auto_inpaint/
// API文档完整开发文档和代码示例:https://www.shiliuai.com/api/zidongqushuiyin
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
// ==============================================================================
const fs = require('fs');
const path = require('path');
const axios = require('axios');
const FormData = require('form-data');
const API_KEY = 'your_api_key';
const API_URL = 'https://api.shiliuai.com/api/auto_inpaint/v1';
async function removeWatermarkBatch(inputDir, outputDir) {
if (!fs.existsSync(outputDir)) fs.mkdirSync(outputDir, { recursive: true });
const files = fs.readdirSync(inputDir).filter(f => /\.(jpg|jpeg|png|bmp)$/i.test(f));
console.log(`找到 ${files.length} 张图片,开始批量处理...`);
for (const file of files) {
try {
const form = new FormData();
form.append('image', fs.createReadStream(path.join(inputDir, file)));
const response = await axios.post(API_URL, form, {
headers: { ...form.getHeaders(), 'Authorization': `Bearer ${API_KEY}` }
});
const resultUrl = response.data.data.result_url;
const imgRes = await axios.get(resultUrl, { responseType: 'stream' });
const writer = fs.createWriteStream(path.join(outputDir, file));
imgRes.data.pipe(writer);
console.log(`✅ 处理完成:${file}`);
} catch (err) {
console.error(`❌ 处理失败:${file}`, err.message);
}
}
console.log('批量处理结束!');
}
removeWatermarkBatch('./input_images', './output_images');
5.3 PHP 批量处理(适用于 Web 后端或 CLI)
php
// ==============================================================================
// 免费在线体验:https://www.shiliuai.com/auto_inpaint/
// API文档完整开发文档和代码示例:https://www.shiliuai.com/api/zidongqushuiyin
// 支持免费在线体验
// API文档清晰,提供多种接入语言示例(如python、js、C#、java、php等),以及自动化脚本语言(如天诺、懒人精灵、按键精灵、易语言、EasyClick、触动精灵等)
// ==============================================================================
<?php function removeWatermarkBatch($inputDir, $outputDir, $apiKey) { if (!file_exists($outputDir)) mkdir($outputDir, 0777, true); $files = glob($inputDir . "/*.{jpg,jpeg,png,bmp}", GLOB_BRACE); echo "找到 " . count($files) . " 张图片,开始批量处理...\n"; foreach ($files as $file) { $filename = basename($file); $ch = curl_init(); $curlFile = new CURLFile($file); curl_setopt_array($ch, [ CURLOPT_URL => "https://api.shiliuai.com/api/auto_inpaint/v1", CURLOPT_POST => true, CURLOPT_POSTFIELDS => ['image' => $curlFile], CURLOPT_HTTPHEADER => ["Authorization: Bearer $apiKey"], CURLOPT_RETURNTRANSFER => true, ]); $response = curl_exec($ch); $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($httpCode == 200) { $data = json_decode($response, true); $resultUrl = $data['data']['result_url']; $imgData = file_get_contents($resultUrl); file_put_contents($outputDir . "/" . $filename, $imgData); echo "✅ 处理完成:$filename\n"; } else { echo "❌ 处理失败:$filename - $response\n"; } } echo "批量处理结束!\n"; } removeWatermarkBatch("./input_images", "./output_images", "your_api_key"); ?>
六、进阶技巧:提高批量处理的效率与可靠性
✅ 1. 增加重试机制
网络波动可能导致个别请求失败,建议加入重试(例如失败后等待 2 秒再试一次)。
✅ 2. 限制并发数(针对 Node.js/Python asyncio)
批量请求过多可能触发 API 频率限制,建议使用队列或 asyncio.Semaphore 控制并发。Python 示例:
python
import asyncio
import aiohttp
semaphore = asyncio.Semaphore(5) # 最多同时 5 个请求
✅ 3. 记录失败列表
将失败的图片路径写入 failed.log,方便之后单独重跑。
✅ 4. 结合定时任务
-
Linux:使用
crontab -e添加定时执行脚本 -
Windows:使用任务计划程序
示例(每天凌晨 2 点执行):
bash
0 2 * * * /usr/bin/python3 /home/your_batch_script.py
七、常见问题与避坑指南
我们在《图片去水印 API 哪个好?5种方案实测对比(附避坑指南 + 免费在线体验)》中已经详细讲过,这里补充几个批量场景特有的坑:
| 问题 | 解决方案 |
|---|---|
API 返回 rate_limit_exceeded |
降低并发数,或升级 API 套餐 |
| 处理后的图片比原图大很多 | 调用图片压缩 API(可配合我们的 图片变清晰 API做后处理) |
| 部分水印去除不干净 | 尝试手动传入 mask 坐标(API 支持) |
| 原图非常大(>10MB) | 建议先用 图片压缩 API 预处理,提高速度 |
如果你遇到任何去水印效果不理想的情况,可以先尝试在线工具免费体验(无需代码),确认效果后再集成 API。
八、总结
本文从单张图片去水印 开始,逐步扩展到批量自动化处理,并提供了 Python、JavaScript (Node.js)、PHP 三种语言的完整代码。你可以直接拷贝修改,集成到自己的 CMS、电商后台或爬虫系统中。
📎 相关文章
#图片去水印 #API教程 #Python #JavaScript #PHP #图片处理 #自动化