做电商运营的都知道,图片是绕不开的坎。店铺上新一天几百张图、活动海报太大微信发不出去、商品主图尺寸不统一上传被拒、竞品截图堆了一堆没整理——图片处理占用的时间,有时候比采集数据还多。
我也是非技术出身,最开始处理图片全靠手动——一张一张用PS改尺寸、一张一张用在线工具压缩。有一次要处理300张商品主图,搞到半夜两点,眼睛都快瞎了。后来用影刀RPA配合Python的Pillow库,写了个批量处理流程,300张图10分钟搞定,尺寸统一、压缩到位、自动加上了水印。
今天就把图片批量处理的完整方案讲一遍。图片处理在影刀里主要有两条路:魔法指令(零代码)和Python脚本(灵活可控) 。两条路各有优势,根据你的需求选。
图片批量处理的四个核心场景
图片处理自动化的需求五花八门,但归纳起来就四类:
| 场景 | 典型需求 | 推荐方案 |
|---|---|---|
| 图片压缩 | 减小文件体积,节省存储、提升加载速度 | 魔法指令(零代码) |
| 尺寸调整 | 统一主图尺寸、生成缩略图 | Python + Pillow |
| 格式转换 | PNG转JPG、WEBP互转 | Python + Pillow |
| 批量处理 | 重命名、加水印、裁剪 | 魔法指令 + Python |
我的建议:单纯压缩用魔法指令,一行都不用写;需要尺寸调整、格式转换、加水印等复杂操作,用Python + Pillow。
方案一:魔法指令——零代码批量压缩图片
影刀RPA的“魔法指令”是图片处理最友好的入口。不需要写任何代码,拖进来、填参数、点运行,三步搞定。
批量压缩图片文件
在影刀右侧指令面板找到“魔法指令”,输入或选择“批量压缩图片文件”。
参数配置:
| 参数 | 说明 | 示例 |
|---|---|---|
| 输入图片所在文件夹路径 | 待压缩图片所在的文件夹 | C:\Pictures\Original |
| 压缩后图片保存的文件夹路径 | 压缩后输出的文件夹 | C:\Pictures\Compressed |
| 压缩质量 | 0-100,默认85 |
85 |
| 目标最大文件大小 | 可选,如0.5MB | 0.5 |
支持的格式:JPG、PNG、WEBP三种常见图片格式。
运行后:自动遍历文件夹下所有支持的图片格式,逐张压缩,保存到输出文件夹。
功能亮点:
- 质量与大小平衡:通过设置压缩质量(如85)和目标最大文件大小(如0.5MB),在保证视觉效果的同时有效减小文件体积
- 结果统计清晰:会输出压缩前后大小变化、压缩率等统计信息
- 双目录隔离:源文件不动,压缩后的“轻盈副本”另存到新文件夹,数据安全双保险
- 计数反馈:运行结束返回“成功压缩张数”,方便写日志或发通知
实操步骤:
# 在影刀里新建一个PC自动化应用
新建应用 → 命名为“图片批量压缩”
# 拖入魔法指令
添加魔法指令 → 选择“批量压缩图片文件”
# 填写参数
输入图片所在文件夹路径:C:\商品图\原始
压缩后图片保存的文件夹路径:C:\商品图\压缩版
压缩质量:85
# 运行
点击运行 → 等待进度条跑完 → 查看输出结果
压缩指定文件夹图片并保持质量
另一条类似的魔法指令——“压缩指定文件夹图片并保持质量”。
区别:这条指令更聚焦于“保持质量”,默认压缩质量85%,被社区称为“肉眼无差、体积减半”。
支持格式:JPG、JPEG、PNG。
返回结果:运行结束后返回“成功压缩张数”,方便写日志或发通知。
适用场景:
- 电商运营:每天上新500+张产品图,占用2GB → 一键压到400MB,图片秒开
- 市场营销:活动海报300DPI,微信提示“超出20MB” → 质量80%后仅3MB
- 财务共享:扫描件PNG体积大,OA上传超时 → 批量压缩后成功率100%
- 备份归档:历史图片5年800GB → 质量75%后仅200GB
一个容易踩的坑:魔法指令第一次运行时,可能会提示“安装模块”,点击确认即可。如果出现错误,点击“智能修复”按钮,系统会自动解决常见问题。
方案二:Python + Pillow——灵活可控的图片处理
魔法指令能解决80%的压缩需求。但如果需要自定义尺寸、格式转换、批量加水印、裁剪指定区域,就得用Python了。
准备工作:安装Pillow库
Pillow是Python最流行的图片处理库。在影刀里使用Python脚本时,如果提示“找不到PIL模块”,需要先安装:
- 打开命令行(cmd)
- 执行:
pip install Pillow - 重启影刀
安装完成后,在影刀的“Python脚本”指令里就可以导入PIL库了。
基础操作:获取图片信息
# 获取图片的基本信息
# 输入:图片路径
# 输出:图片尺寸、格式、大小
from PIL import Image
import os
def main(args):
img_path = args.get('图片路径', '')
# 打开图片
img = Image.open(img_path)
# 获取信息
width, height = img.size
img_format = img.format
file_size = os.path.getsize(img_path) / 1024 # KB
return {
'宽度': width,
'高度': height,
'格式': img_format,
'大小KB': round(file_size, 2)
}
尺寸调整:三种方式
电商场景里最常用的是统一主图尺寸。Pillow提供了三种方式:
方式一:直接调整(拉伸)
直接把图片缩放到目标尺寸,不管原图比例。适合背景色统一的场景。
# 直接调整尺寸
img = Image.open(图片路径)
img_resized = img.resize((800, 800)) # 强制缩放到800x800
img_resized.save(输出路径)
方式二:等比缩放 + 裁剪(推荐)
先按比例缩放到目标尺寸,然后居中裁剪。这是电商主图最常用的方式,图片不变形。
# 等比缩放 + 居中裁剪
def resize_and_crop(img, target_size):
# 计算缩放比例
width, height = img.size
target_w, target_h = target_size
# 按比例缩放到至少一边等于目标尺寸
ratio = max(target_w/width, target_h/height)
new_w = int(width * ratio)
new_h = int(height * ratio)
img_resized = img.resize((new_w, new_h), Image.LANCZOS)
# 居中裁剪
left = (new_w - target_w) // 2
top = (new_h - target_h) // 2
img_cropped = img_resized.crop((left, top, left+target_w, top+target_h))
return img_cropped
img = Image.open(图片路径)
img_final = resize_and_crop(img, (800, 800))
img_final.save(输出路径)
方式三:等比缩放 + 留白
先按比例缩放,然后在四周加白边补到目标尺寸。适合商品图不能裁掉任何部分的场景。
# 等比缩放 + 留白
def resize_with_padding(img, target_size, bg_color=(255,255,255)):
width, height = img.size
target_w, target_h = target_size
# 按比例缩放
ratio = min(target_w/width, target_h/height)
new_w = int(width * ratio)
new_h = int(height * ratio)
img_resized = img.resize((new_w, new_h), Image.LANCZOS)
# 创建画布,居中粘贴
canvas = Image.new('RGB', target_size, bg_color)
left = (target_w - new_w) // 2
top = (target_h - new_h) // 2
canvas.paste(img_resized, (left, top))
return canvas
格式转换
不同平台对图片格式有不同要求。淘宝主图推荐JPG,部分设计素材需要PNG保留透明通道。
# JPG转PNG(保留透明通道)
img = Image.open('input.jpg')
img.save('output.png', 'PNG')
# PNG转JPG(需要先转RGB,去掉透明通道)
img = Image.open('input.png').convert('RGB')
img.save('output.jpg', 'JPEG', quality=85)
# 批量转换
import os
folder = '图片文件夹'
for filename in os.listdir(folder):
if filename.endswith('.png'):
img = Image.open(os.path.join(folder, filename))
# 转RGB并保存为JPG
new_name = filename.replace('.png', '.jpg')
img.convert('RGB').save(os.path.join(folder, new_name), 'JPEG', quality=85)
一个容易踩的坑:PNG转JPG时,如果直接保存会报错“cannot write mode RGBA as JPEG”。必须先convert('RGB') ,把透明通道去掉。
图片压缩(精确控制文件大小)
魔法指令能压缩,但如果你需要精确控制压缩后的文件大小(比如要求每张图不超过500KB),用Python的二分法可以做到。
# 二分法压缩:自动调整质量参数,直到文件大小达标
def compress_to_target(img_path, output_path, target_size_kb, quality_range=(10, 95)):
from PIL import Image
import io
img = Image.open(img_path)
# 如果是PNG,先转RGB
if img.mode == 'RGBA':
img = img.convert('RGB')
low, high = quality_range
best_quality = high
while low <= high:
mid = (low + high) // 2
# 用当前质量保存到内存
buffer = io.BytesIO()
img.save(buffer, 'JPEG', quality=mid, optimize=True)
size_kb = len(buffer.getvalue()) / 1024
if size_kb <= target_size_kb:
best_quality = mid
high = mid - 1 # 尝试更低质量
else:
low = mid + 1 # 需要更高质量(文件太大)
# 用最佳质量保存
img.save(output_path, 'JPEG', quality=best_quality, optimize=True)
return best_quality
这段代码会自动尝试不同的压缩质量,找到能让文件小于目标大小(比如500KB)的最大质量值。既保证文件不超限,又尽可能保留画质。
批量加水印
给商品图批量加品牌水印,是电商运营的刚需。
# 批量加水印
from PIL import Image, ImageDraw, ImageFont
def add_watermark(img_path, output_path, text, position='bottom-right'):
img = Image.open(img_path).convert('RGB')
draw = ImageDraw.Draw(img)
# 设置字体和大小(需要下载字体文件)
try:
font = ImageFont.truetype('simhei.ttf', 30)
except:
font = ImageFont.load_default()
# 计算文字位置
width, height = img.size
bbox = draw.textbbox((0, 0), text, font=font)
text_width = bbox[2] - bbox[0]
text_height = bbox[3] - bbox[1]
if position == 'bottom-right':
x = width - text_width - 20
y = height - text_height - 20
elif position == 'center':
x = (width - text_width) // 2
y = (height - text_height) // 2
# 画半透明背景框
draw.rectangle(
[x-10, y-10, x+text_width+10, y+text_height+10],
fill=(0, 0, 0, 128)
)
# 写文字
draw.text((x, y), text, fill=(255, 255, 255), font=font)
img.save(output_path)
实战:从采集到图片处理的完整流水线
把图片处理和前面学过的内容串起来——采集商品数据时,同步把商品主图下载下来、统一尺寸、压缩、重命名。
# 完整流水线:采集 + 图片处理
# 1. 采集商品数据(网页自动化)
打开网页("https://shop.xxx.com")
采集商品列表 → $商品列表 # 每个商品包含:名称、价格、主图URL
# 2. 下载图片
ForEach $商品 in $商品列表:
HTTP请求(GET, $商品.主图URL) → $图片数据
保存二进制文件("C:\商品图\原始\" + $商品.名称 + ".jpg", $图片数据)
结束
# 3. 批量处理图片(Python脚本)
Python代码:
import os
from PIL import Image
input_folder = "C:\\商品图\\原始"
output_folder = "C:\\商品图\\处理完成"
# 确保输出文件夹存在
os.makedirs(output_folder, exist_ok=True)
for filename in os.listdir(input_folder):
if filename.endswith(('.jpg', '.png')):
img_path = os.path.join(input_folder, filename)
img = Image.open(img_path)
# 统一尺寸(等比缩放+裁剪到800x800)
img = resize_and_crop(img, (800, 800))
# 压缩到不超过500KB
output_path = os.path.join(output_folder, filename)
compress_to_target(img, output_path, 500)
print(f"处理完成,共处理 {len(os.listdir(input_folder))} 张图片")
# 4. 输出日志
输出日志("图片处理完成")
拓展玩法
魔法指令和Python脚本还能组合出更多玩法:
- 批量裁剪并合并为PDF:自动识别微信群截屏,一键完成裁剪合并
- 批量命名:压缩图片的同时,按日期或编号批量重命名文件
- 自动备份:将压缩后的图片自动备份到云存储或外部硬盘
- AI批量修图:结合AI Power工作流,实现图片自动精修和优化
三个容易踩的坑
坑一:Pillow库安装失败
现象:Python脚本报错ModuleNotFoundError: No module named 'PIL'。
原因:Pillow库没有安装,或者安装到了错误的Python环境。
解决方法:
- 在命令行执行
pip install Pillow - 如果影刀用的是内置Python,可能需要指定路径
坑二:PNG转JPG报错
现象:OSError: cannot write mode RGBA as JPEG。
原因:PNG图片有透明通道(RGBA模式),JPG不支持透明。
解决方法:保存前先convert('RGB'),把透明通道去掉。
坑三:处理大量图片时内存不足
现象:处理几百张图片时,影刀卡死或报内存错误。
原因:每张图片都加载到内存,没有及时释放。
解决方法:在循环里每处理完一张图片,显式关闭:img.close()。或者在Python脚本里用with语句自动管理资源。
常见问题速查
| 问题 | 排查方向 |
|---|---|
| 魔法指令找不到 | 检查是否在PC自动化应用里,确认影刀版本是否支持 |
| 图片压缩后质量太差 | 调高压缩质量参数(建议80-90) |
| PNG转JPG报错 | 先convert('RGB')再保存 |
| Pillow库安装失败 | 检查Python环境,用pip install Pillow重装 |
| 处理大量图片卡死 | 在循环里加img.close()释放内存 |
推荐资源
- 影刀官方社区搜索“批量压缩图片文件”魔法指令
- 影刀官方社区搜索“压缩指定文件夹图片并保持质量”魔法指令
- Pillow官方文档:
pillow.readthedocs.io,所有图片处理操作的完整参考 - CSDN搜索“影刀RPA 图片批量处理”,有大量实战案例分享
- 影刀社区搜索“Pillow”或“图片处理”,有社区开发者分享的完整代码
#影刀RPA #RPA自动化 #图片处理 #批量压缩 #Pillow #电商自动化
作者:林焱
本文为《影刀RPA学习手册》系列文章之一,内容源于实操经验的整理与分享。如果这篇文章对你有帮助,欢迎点赞收藏,下一篇我们聊“影刀RPA与AI大模型结合的应用场景”。
