影刀RPA图片合并与批量处理完全指南:自动化图片操作实战

作者:林焱


哪些场景需要图片自动化

做运营或电商的人会遇到这些需求:

  • 把100张产品图片统一加上水印

  • 把多张截图拼成一张长图用于汇报

  • 批量压缩图片尺寸方便上传

  • 在这里插入图片描述

  • 把多张表格截图合并成一个 PDF

手工处理一张图一分钟,100张就是100分钟。影刀 + Python 脚本可以把这些全部自动化。


影刀原生图片功能

影刀自带基础的图片操作指令(在"图片处理"分类下):

  • 截图:对指定区域截图,保存到本地
  • 图片识别:OCR 文字识别,图像模板匹配
  • 获取元素截图:对指定元素单独截图

原生功能够用于"截图 → 保存"场景,但合并、水印、批量压缩这类操作需要配合 Python 脚本


核心工具:Python Pillow 库

在这里插入图片描述

Pillow 是 Python 最主流的图片处理库,影刀可以直接调用。

安装到影刀的 Python 环境:

拼多多店群自动化报活动上架!

pip install Pillow

实战1:批量加水印

需求

在这里插入图片描述

把一个文件夹里的所有产品图片(JPG/PNG)都加上"林焱出品"的文字水印。

流程设计

// 影刀主流程
本地图片目录 = "C:/products/"
输出目录 = "C:/products_watermarked/"
水印文字 = "林焱出品"

图片文件列表 = 获取文件夹中的文件列表(本地图片目录, 格式:"*.jpg,*.png")

For 图片路径 in 图片文件列表:
    文件名 = 获取文件名(图片路径)
    输出路径 = 输出目录 + 文件名
    
    // 调用 Python 脚本加水印
    执行Python脚本(
        脚本内容: 水印脚本,
        参数: {
            "input_path": 图片路径,
            "output_path": 输出路径,
            "text": 水印文字
        }
    )
    打印日志("已处理:" + 文件名)

Python 水印脚本

from PIL import Image, ImageDraw, ImageFont
import os

# 从影刀传入的参数
input_path = "{input_path}"
output_path = "{output_path}"
watermark_text = "{text}"

# 打开图片
img = Image.open(input_path).convert("RGBA")
width, height = img.size

# 创建透明水印层
watermark = Image.new("RGBA", img.size, (0, 0, 0, 0))
draw = ImageDraw.Draw(watermark)

# 设置字体(如果没有指定字体,用默认字体)
try:
    font = ImageFont.truetype("C:/Windows/Fonts/msyh.ttc", 36)
except:
    font = ImageFont.load_default()

# 计算水印位置(右下角)
bbox = draw.textbbox((0, 0), watermark_text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
x = width - text_width - 20
y = height - text_height - 20

# 绘制半透明水印
draw.text((x, y), watermark_text, fill=(255, 255, 255, 128), font=font)

# 合并图层
result = Image.alpha_composite(img, watermark)

# 保存(转回RGB以支持JPG格式)
if output_path.lower().endswith(".jpg") or output_path.lower().endswith(".jpeg"):
    result = result.convert("RGB")

os.makedirs(os.path.dirname(output_path), exist_ok=True)
result.save(output_path)
print("OK")

实战2:多张截图合并成长图

在这里插入图片描述

需求

把运营数据截图(多张)合并成一张长图,方便在群里发汇报。

Python 合并脚本

from PIL import Image
import os

# 从影刀传入参数
image_paths_str = "{image_paths}"  # 用|分隔的多个路径
output_path = "{output_path}"

image_paths = image_paths_str.split("|")

# 打开所有图片
images = [Image.open(p) for p in image_paths]

# 计算合并后的尺寸(垂直拼接)
max_width = max(img.width for img in images)
total_height = sum(img.height for img in images)

# 创建空白画布
result = Image.new("RGB", (max_width, total_height), (255, 255, 255))

# 逐张粘贴
current_y = 0
for img in images:
    # 如果宽度不一致,居中对齐
    x_offset = (max_width - img.width) // 2
    result.paste(img, (x_offset, current_y))
    current_y += img.height

result.save(output_path)
print(f"合并完成,尺寸:{max_width}x{total_height}")

影刀调用方式

// 截多张图,收集路径
截图1路径 = "C:/temp/screenshot_1.png"
截图2路径 = "C:/temp/screenshot_2.png"
截图3路径 = "C:/temp/screenshot_3.png"

// 用 | 拼接路径
截图路径合并 = 截图1路径 + "|" + 截图2路径 + "|" + 截图3路径

// 调用 Python 脚本合并
执行Python脚本(
    脚本: 合并脚本,
    参数: {
        "image_paths": 截图路径合并,
        "output_path": "C:/reports/combined.png"
    }
)

在这里插入图片描述

实战3:批量压缩图片

需求

上传前批量压缩图片到指定大小(比如最大 500KB),保持画质。

from PIL import Image
import os

input_path = "{input_path}"
output_path = "{output_path}"
max_size_kb = int("{max_size_kb}")  # 最大文件大小(KB)

img = Image.open(input_path)

# 如果图片是 RGBA 且要保存为 JPG,先转换
if img.mode == "RGBA":
    img = img.convert("RGB")

# 逐步降低质量直到文件大小满足要求
quality = 95
while quality >= 10:
    img.save(output_path, "JPEG", quality=quality)
    file_size_kb = os.path.getsize(output_path) / 1024
    if file_size_kb <= max_size_kb:
        break
    quality -= 5

print(f"最终质量:{quality},文件大小:{file_size_kb:.1f}KB")

实战4:截图自动标注

给截图加上矩形标注框(常用于教程截图、问题截图标记):

在这里插入图片描述

from PIL import Image, ImageDraw

input_path = "{input_path}"
output_path = "{output_path}"
# 标注区域:x1,y1,x2,y2
rect = [int(x) for x in "{rect}".split(",")]

img = Image.open(input_path)
draw = ImageDraw.Draw(img)

# 画红色矩形框
draw.rectangle(rect, outline=(255, 0, 0), width=3)

img.save(output_path)
print("标注完成")

影刀调用时传入坐标:

执行Python脚本(参数: {"rect": "100,200,400,350", ...})

踩坑记录

坑1:中文字体找不到

TEMU店群矩阵自动化运营核价报活动


在这里插入图片描述

ImageDraw.text() 里指定中文字体时,路径不对会导致乱码或报错。

检查系统字体目录:C:/Windows/Fonts/,常用中文字体文件:

  • 微软雅黑:msyh.ttc
  • 宋体:simsun.ttc
  • 黑体:simhei.ttf

坑2:PNG 转 JPG 时黑背景

RGBA 模式(有透明通道)的 PNG 直接保存为 JPG 会变成黑底,因为 JPG 不支持透明度。

正确做法:

if img.mode == "RGBA":
    # 先把透明通道和白色背景合并
    background = Image.new("RGB", img.size, (255, 255, 255))
    background.paste(img, mask=img.split()[3])  # 用 alpha 通道作为 mask
    img = background

坑3:合并后图片质量下降

在这里插入图片描述

Pillow 默认 JPEG 保存质量是 75,如果图片质量很重要,要显式指定:

img.save(output_path, "JPEG", quality=95)

坑4:超大图片处理时内存溢出

一次性把100张4K图片全部加载到内存里会OOM。解决方法:逐张处理,处理完一张立刻释放内存:

img = Image.open(path)
# ... 处理
img.save(output_path)
img.close()  # 释放内存
del img

小结

在这里插入图片描述

影刀图片自动化的核心思路:

  • 截图、元素图:用影刀原生指令
  • 图片合并、水印、压缩、标注:用 执行Python脚本 调用 Pillow

典型工作流:影刀做流程控制(文件列表、路径拼接、循环)+ Python 做图片处理(Pillow)。


作者:林焱|飞行社 RPA 实践记录
在这里插入图片描述

Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐