影刀RPA 图片批量压缩与格式转换:处理大量素材

发布时间:2026/7/13 1:45:29

影刀RPA 图片批量压缩与格式转换:处理大量素材
title: “影刀RPA 图片批量压缩与格式转换处理大量素材”date: 2026-07-01author: 林焱影刀RPA 图片批量压缩与格式转换处理大量素材电商运营有几百张产品图需要统一压缩到500KB以内、统一转成JPEG、统一加水印、统一改尺寸……这类批量处理任务用影刀Pillow分分钟搞定效果比PS批处理更灵活。什么情况用什么适合批量处理的场景电商主图/详情图统一规格尺寸、格式、大小新闻稿图片批量压缩后发邮件用户上传图片自动压缩节省存储素材图片统一加品牌水印不适合的场景需要专业修图色彩矫正、抠图还是用PS只有几张图手动处理更快怎么做准备工作安装依赖【影刀操作】添加【Python】指令importsubprocess subprocess.run([pip,install,Pillow],capture_outputTrue)print(Pillow安装完成)方法1批量压缩图片到指定大小【影刀操作】添加【Python】指令fromPILimportImageimportosdefcompress_image(input_path,output_path,target_size_kb500,min_quality30): 压缩图片到指定大小KB target_size_kb: 目标大小KB min_quality: 最低质量避免压缩过度 imgImage.open(input_path)# 如果是PNG或其他格式转为RGBJPEG不支持透明通道ifimg.modein(RGBA,P,LA):# 透明背景换成白色backgroundImage.new(RGB,img.size,(255,255,255))ifimg.modeRGBA:background.paste(img,maskimg.split()[3])else:background.paste(img)imgbackgroundelifimg.mode!RGB:imgimg.convert(RGB)# 检查原始大小original_sizeos.path.getsize(input_path)/1024iforiginal_sizetarget_size_kb:# 已经够小只做格式转换img.save(output_path,JPEG,quality85,optimizeTrue)print(f无需压缩{os.path.basename(input_path)}{original_size:.0f}KB)return# 二分法找到合适的quality值quality_low,quality_highmin_quality,95best_outputNonewhilequality_lowquality_high:quality(quality_lowquality_high)//2importiobufferio.BytesIO()img.save(buffer,JPEG,qualityquality,optimizeTrue)size_kbbuffer.tell()/1024ifsize_kbtarget_size_kb:best_outputbuffer.getvalue()quality_lowquality1# 尝试更高质量else:quality_highquality-1# 继续压缩ifbest_output:withopen(output_path,wb)asf:f.write(best_output)final_sizeos.path.getsize(output_path)/1024print(f压缩完成{os.path.basename(input_path)}{original_size:.0f}KB →{final_size:.0f}KB)else:# 质量已经降到最低直接保存img.save(output_path,JPEG,qualitymin_quality,optimizeTrue)print(f压缩至最低质量{os.path.basename(input_path)})# 批量处理input_dirrC:\原始图片output_dirrC:\压缩图片os.makedirs(output_dir,exist_okTrue)image_exts{.jpg,.jpeg,.png,.bmp,.tiff,.webp}processed0forfilenameinos.listdir(input_dir):extos.path.splitext(filename)[1].lower()ifextnotinimage_exts:continueinput_pathos.path.join(input_dir,filename)# 输出统一用jpg后缀output_nameos.path.splitext(filename)[0].jpgoutput_pathos.path.join(output_dir,output_name)compress_image(input_path,output_path,target_size_kb500)processed1print(f\n处理完成共处理{processed}张图片)yda.set_variable(processed_count,processed)方法2批量调整图片尺寸【影刀操作】添加【Python】指令fromPILimportImageimportosdefresize_image(input_path,output_path,target_width800,target_heightNone,modefit,fill_color(255,255,255)): mode: fit - 等比缩放放在目标尺寸内不裁剪可能有留白 fill - 裁剪到精确尺寸 stretch - 强制拉伸到目标尺寸 imgImage.open(input_path)orig_w,orig_himg.sizeiftarget_heightisNone:# 只指定宽度等比缩放ratiotarget_width/orig_w target_heightint(orig_h*ratio)ifmodefit:img.thumbnail((target_width,target_height),Image.LANCZOS)# 居中放置周围填充背景色backgroundImage.new(RGB,(target_width,target_height),fill_color)offset((target_width-img.width)//2,(target_height-img.height)//2)background.paste(img,offset)resultbackgroundelifmodefill:# 先缩放到覆盖目标尺寸再中心裁剪ratiomax(target_width/orig_w,target_height/orig_h)new_wint(orig_w*ratio)new_hint(orig_h*ratio)imgimg.resize((new_w,new_h),Image.LANCZOS)# 中心裁剪left(new_w-target_width)//2top(new_h-target_height)//2resultimg.crop((left,top,lefttarget_width,toptarget_height))else:# stretchresultimg.resize((target_width,target_height),Image.LANCZOS)ifresult.mode!RGB:resultresult.convert(RGB)result.save(output_path,JPEG,quality90,optimizeTrue)# 批量处理电商主图统一800x800input_dirrC:\商品图片\原图output_dirrC:\商品图片\800x800os.makedirs(output_dir,exist_okTrue)forfilenameinos.listdir(input_dir):iffilename.lower().endswith((.jpg,.jpeg,.png)):input_pathos.path.join(input_dir,filename)output_pathos.path.join(output_dir,os.path.splitext(filename)[0].jpg)resize_image(input_path,output_path,800,800,modefill)print(f处理{filename})方法3批量格式转换【影刀操作】fromPILimportImageimportosdefconvert_format(input_dir,output_dir,from_formatpng,to_formatjpg,quality90):批量转换格式os.makedirs(output_dir,exist_okTrue)count0forfilenameinos.listdir(input_dir):ifnotfilename.lower().endswith(.from_format):continueinput_pathos.path.join(input_dir,filename)output_filenameos.path.splitext(filename)[0].to_format output_pathos.path.join(output_dir,output_filename)imgImage.open(input_path)ifto_format.lower()in(jpg,jpeg)andimg.modein(RGBA,P):bgImage.new(RGB,img.size,(255,255,255))ifimg.modeRGBA:bg.paste(img,maskimg.split()[3])else:bg.paste(img)imgbg save_kwargs{quality:quality,optimize:True}ifto_format.lower()in(jpg,jpeg)else{}img.save(output_path,**save_kwargs)count1print(f格式转换完成{count}张{from_format}→{to_format})returncount# PNG批量转JPGconvert_format(rC:\图片\PNG,rC:\图片\JPG,png,jpg)有什么坑坑1PNG透明背景变黑色PNG图有Alpha透明通道直接保存JPEG时透明区域变成黑色而非白色。解决方法保存前先把透明通道合并到白色背景代码里已处理。坑2CMYK格式的图片无法处理印刷厂给的图片是CMYK颜色模式Pillow处理某些CMYK图会出错。解决方法img img.convert(RGB)先转成RGB。坑3图片旋转方向不对手机拍的照片有EXIF旋转信息Pillow默认不处理导致某些图片显示方向不对。解决方法fromPILimportImageOps imgImageOps.exif_transpose(img)# 自动根据EXIF旋转坑4文件名有中文导致报错某些系统路径里的中文文件名处理有问题。解决方法用pathlib.Path代替字符串路径frompathlibimportPathforpinPath(input_dir).glob(*.png):imgImage.open(str(p))总结图片批量处理是Pillow最擅长的场景。压缩用二分法找quality值、调整尺寸区分fit/fill/stretch模式、格式转换注意RGBA→RGB。三个技术点搞清楚几百张图片的处理任务几分钟搞定。

相关新闻

NestOS与openEuler社区:深度探索云底座操作系统的协作开发模式

NestOS与openEuler社区:深度探索云底座操作系统的协作开发模式

2026/7/13 1:35:28

NestOS与openEuler社区:深度探索云底座操作系统的协作开发模式 【免费下载链接】nestos-website nestos-website is the source code repository for the NestOS website 项目地址: https://gitcode.com/openeuler/nestos-website 前往项目官网免费下载&…

BiSheng-Autotuner社区贡献指南:如何参与开源项目开发

BiSheng-Autotuner社区贡献指南:如何参与开源项目开发

2026/7/13 1:35:28

BiSheng-Autotuner社区贡献指南:如何参与开源项目开发 【免费下载链接】BiSheng-Autotuner BiSheng-Autotuner is a automate tuning command line tool for LLVM. 项目地址: https://gitcode.com/openeuler/BiSheng-Autotuner 前往项目官网免费下载&#xf…

Altium Designer 高效布线:自定义5个核心快捷键,布线效率提升30%

Altium Designer 高效布线:自定义5个核心快捷键,布线效率提升30%

2026/7/13 1:35:28

Altium Designer 高效布线:自定义5个核心快捷键,布线效率提升30%在PCB设计领域,效率就是生产力。对于每天需要处理复杂布线任务的中级用户来说,Altium Designer(AD)的默认快捷键配置往往无法满足个性化需求…

Unity热更新实战:基于HybridCLR与Addressables的完整框架搭建指南

Unity热更新实战:基于HybridCLR与Addressables的完整框架搭建指南

2026/7/13 7:25:51

1. 项目概述:为什么我们需要一个现代化的热更新框架?如果你正在开发一款Unity游戏,尤其是面向移动平台,那么“热更新”这个词对你来说一定不陌生。它不是一个锦上添花的功能,而是一个关乎项目生死存亡的基石。想象一下…

STM32驱动压电蜂鸣器的智能警报系统设计与实现

STM32驱动压电蜂鸣器的智能警报系统设计与实现

2026/7/13 7:25:51

1. 项目背景与核心需求在现代工业控制和智能设备领域,可靠的警报系统是不可或缺的安全保障组件。无论是工厂车间的设备故障预警,还是智能家居的安全防护,清晰可辨的警报声都是第一时间引起注意的关键手段。这次我们要实现的,是基于…

Blender 3MF插件:3D打印工作流的终极桥梁

Blender 3MF插件:3D打印工作流的终极桥梁

2026/7/13 7:25:51

Blender 3MF插件:3D打印工作流的终极桥梁 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中完整处理3D打印专用的3MF格式文件吗?Ble…

【ChatGPT正则表达式生成实战指南】:20年正则老兵亲授——3类高频场景、7步精准提示词、98.6%匹配准确率验证

【ChatGPT正则表达式生成实战指南】:20年正则老兵亲授——3类高频场景、7步精准提示词、98.6%匹配准确率验证

2026/7/13 7:25:51

更多请点击: https://intelliparadigm.com 第一章:ChatGPT正则表达式生成的底层逻辑与能力边界 ChatGPT 生成正则表达式并非基于专用正则引擎的符号推演,而是通过大规模语言模型对自然语言描述与常见正则模式之间统计关联的学习实现。其本质…

pin-for-openEuler深度解析:MLIR与LLVM集成的完整教程

pin-for-openEuler深度解析:MLIR与LLVM集成的完整教程

2026/7/13 7:25:51

pin-for-openEuler深度解析:MLIR与LLVM集成的完整教程 【免费下载链接】pin-for-openEuler plugin framework for compiler released as a binary package for openEuler and other OSes. 项目地址: https://gitcode.com/openeuler/pin-for-openEuler 前往项…

STM32L4A6ZG与AD7490构建高速多通道ADC采集系统

STM32L4A6ZG与AD7490构建高速多通道ADC采集系统

2026/7/13 7:15:50

1. 项目概述:高速ADC与MCU的完美组合在工业自动化、医疗设备和测试测量等领域,模拟信号的精确采集与实时处理一直是核心需求。AD7490作为ADI公司推出的一款12位高速、低功耗16通道ADC,配合STM32L4A6ZG这款兼具高性能与低功耗特性的ARM Cortex…

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践

2026/7/12 0:03:42

Unity游戏文本翻译架构深度解析:XUnity.AutoTranslator的技术实现与工程实践 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator作为Unity游戏社区中最成熟的文本翻译解决方…

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持

2026/7/12 0:03:42

openEuler Raspberry Pi Kernel设备驱动开发指南:为树莓派硬件添加支持 【免费下载链接】raspberrypi-kernel It provides openEuler kernel source for Raspberry Pi 项目地址: https://gitcode.com/openeuler/raspberrypi-kernel 前往项目官网免费下载&…

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧

2026/7/12 0:03:42

openEuler系统集成测试实战:基于smoke-test套件的环境验证技巧 【免费下载链接】integration-test The repo contains test suits for system integration test 项目地址: https://gitcode.com/openeuler/integration-test 前往项目官网免费下载:…

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

卡梅德生物技术快报|纯化重组蛋白:变异链球菌 SepM 截短蛋白载体构建、诱导优化与纯化重组蛋白全套参数方案

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)在口腔微生物分子机制研究中,SepM 蛋白酶是调控变异链球菌群体感应、致龋菌素合成的核心功能蛋白,体外功能验证、抗体开发均依赖高纯度可溶性 SepM 蛋白。当前原核表达体系针对 SepM 存在三大技…

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

卡梅德生物技术快报|重组蛋白的表达和纯化:IMAC 金属螯合色谱全流程工艺手册|基质 - 配基 - 金属离子匹配与蛋白质分离纯化参数优化

2026/7/13 0:05:25

1 研究背景与现存技术痛点(提出问题)基因工程、蛋白质组学、生物制药研发流程中,蛋白质分离纯化是决定下游实验成败的关键环节。当前实验室常规蛋白质分离纯化工艺存在三类难以标准化的技术瓶颈:传统离子交换、分子筛层析无特异性…

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

卡梅德生物技术快报|蛋白质分离纯化:肠激酶可溶性原核表达 + 两步层析全参数|标准化蛋白质分离纯化 SOP

2026/7/13 0:05:25

研究痛点提出(提出问题)重组肠激酶是融合标签切除核心工具酶,当前原核表达体系存在三大标准化难题,直接阻碍可复现的蛋白质分离纯化流程搭建:Trx、GST、单 SUMO 标签融合产物绝大多数为包涵体,沉淀占比超 9…