图片去水印 API 详解:从单图到批量自动化去水印(附 Python/JS/PHP 完整教程)

📌 前言

在上一篇文章《图片去水印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 #图片处理 #自动化

相关推荐
Li emily7 小时前
解决了加密货币api多币种订阅时的数据乱序问题
人工智能·python·api·fastapi
2301_781571428 小时前
Golang格式化输出占位符都有什么_Golang fmt占位符教程【通俗】
jvm·数据库·python
asdzx678 小时前
使用 Python 为 PDF 添加页码 (详细教程)
python·pdf·页码
AI技术控8 小时前
《Transformers are Inherently Succinct》论文解读:从“能表达什么”到“多紧凑地表达”
人工智能·python·深度学习·机器学习·自然语言处理
米高梅狮子9 小时前
第2章 docker容器
运维·docker·云原生·容器·架构·kubernetes·自动化
闵孚龙9 小时前
Claude Code Ultraplan 远程多代理规划全解析:AI Agent、CCR远程容器、异步规划、状态机、计划传送与企业级自动化治理
运维·人工智能·自动化
金融大 k10 小时前
Python 全球指数监控面板:TickDB + REST + WebSocket 完整方案
python·websocket
啊哈哈1213810 小时前
系统设计复盘:为什么 Agent 的 ReAct 循环必须内嵌确定性保护层——以 FitMind 健康助手的路由与步骤控制为例
人工智能·python·react
一颗牙牙12 小时前
安装mmcv
开发语言·python·深度学习