影刀RPA图片合并与批量处理完全指南:自动化图片操作实战
影刀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 实践记录
更多推荐




所有评论(0)