文档备案控制台
免费开始使用

影刀RPA进阶教程:图片批量处理从入门到实战——压缩、裁剪、格式转换、加水印

做电商运营的都知道,图片是绕不开的坎。店铺上新一天几百张图、活动海报太大微信发不出去、商品主图尺寸不统一上传被拒、竞品截图堆了一堆没整理——图片处理占用的时间,有时候比采集数据还多。

我也是非技术出身,最开始处理图片全靠手动——一张一张用PS改尺寸、一张一张用在线工具压缩。有一次要处理300张商品主图,搞到半夜两点,眼睛都快瞎了。后来用影刀RPA配合Python的Pillow库,写了个批量处理流程,300张图10分钟搞定,尺寸统一、压缩到位、自动加上了水印

今天就把图片批量处理的完整方案讲一遍。图片处理在影刀里主要有两条路:魔法指令(零代码)和Python脚本(灵活可控) 。两条路各有优势,根据你的需求选。

图片批量处理的四个核心场景

图片处理自动化的需求五花八门,但归纳起来就四类:

picture.image

场景典型需求推荐方案
图片压缩减小文件体积,节省存储、提升加载速度魔法指令(零代码)

picture.image | 尺寸调整 | 统一主图尺寸、生成缩略图 | Python + Pillow | | 格式转换 | PNG转JPG、WEBP互转 | Python + Pillow | | 批量处理 | 重命名、加水印、裁剪 | 魔法指令 + Python |

我的建议:单纯压缩用魔法指令,一行都不用写;需要尺寸调整、格式转换、加水印等复杂操作,用Python + Pillow

picture.image

方案一:魔法指令——零代码批量压缩图片

影刀RPA的“魔法指令”是图片处理最友好的入口。不需要写任何代码,拖进来、填参数、点运行,三步搞定。

picture.image

批量压缩图片文件

在影刀右侧指令面板找到“魔法指令”,输入或选择“批量压缩图片文件”。

参数配置

picture.image

参数说明示例
输入图片所在文件夹路径待压缩图片所在的文件夹C:\Pictures\Original
压缩后图片保存的文件夹路径压缩后输出的文件夹C:\Pictures\Compressed

picture.image | 压缩质量 | 0-100,默认85 | 85 | | 目标最大文件大小 | 可选,如0.5MB | 0.5 |

支持的格式:JPG、PNG、WEBP三种常见图片格式。

picture.image 运行后:自动遍历文件夹下所有支持的图片格式,逐张压缩,保存到输出文件夹。

功能亮点

  • 质量与大小平衡:通过设置压缩质量(如85)和目标最大文件大小(如0.5MB),在保证视觉效果的同时有效减小文件体积
  • 结果统计清晰:会输出压缩前后大小变化、压缩率等统计信息
  • 双目录隔离:源文件不动,压缩后的“轻盈副本”另存到新文件夹,数据安全双保险
  • 计数反馈:运行结束返回“成功压缩张数”,方便写日志或发通知

实操步骤

# 在影刀里新建一个PC自动化应用
新建应用 → 命名为“图片批量压缩”

# 拖入魔法指令
添加魔法指令 → 选择“批量压缩图片文件”

# 填写参数
输入图片所在文件夹路径:C:\商品图\原始
压缩后图片保存的文件夹路径:C:\商品图\压缩版
压缩质量:85

# 运行
点击运行 → 等待进度条跑完 → 查看输出结果

压缩指定文件夹图片并保持质量

picture.image 另一条类似的魔法指令——“压缩指定文件夹图片并保持质量”。

区别:这条指令更聚焦于“保持质量”,默认压缩质量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模块”,需要先安装:

  1. 打开命令行(cmd)
  2. 执行:pip install Pillow
  3. 重启影刀

picture.image 安装完成后,在影刀的“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大模型结合的应用场景”。

0
0
0
0
评论
未登录
暂无评论