大家好今天要教大家一个超实用的技能 —— 使用Pillow库来批量处理图片。无论是调整图片大小、添加水印还是批量格式转换都能轻松搞定让我们一起进入图片处理的奇妙世界吧一、准备工作首先安装Pillow库1pipinstallPillow小贴士Pillow是PILPython Imaging Library的一个分支但功能更强大、维护更活跃。二、基础图片操作让我们从最基本的图片操作开始12345678910111213141516171819202122232425262728293031fromPILimportImage, ImageDraw, ImageFontimportosdefbasic_image_ops(image_path):基础图片操作示例# 打开图片imgImage.open(image_path)# 获取图片信息print(f图片大小{img.size})print(f图片格式{img.format})print(f图片模式{img.mode})# 调整大小resized_imgimg.resize((800,600))# 旋转图片rotated_imgimg.rotate(45, expandTrue)# 裁剪图片cropped_imgimg.crop((100,100,500,500))# (左, 上, 右, 下)# 保存处理后的图片resized_img.save(resized.jpg)rotated_img.save(rotated.jpg)cropped_img.save(cropped.jpg)# 使用示例basic_image_ops(example.jpg)三、批量调整图片大小在电商工作中经常需要把产品图片统一调整为特定尺寸123456789101112131415161718192021222324252627282930313233343536373839404142defbatch_resize_images(input_folder, output_folder, size(800,600)):批量调整图片大小:param input_folder: 输入文件夹路径:param output_folder: 输出文件夹路径:param size: 目标尺寸宽高# 确保输出文件夹存在ifnotos.path.exists(output_folder):os.makedirs(output_folder)# 支持的图片格式supported_formats{.jpg,.jpeg,.png,.bmp}success_count0fail_count0forfilenameinos.listdir(input_folder):ifany(filename.lower().endswith(fmt)forfmtinsupported_formats):try:# 打开图片image_pathos.path.join(input_folder, filename)imgImage.open(image_path)# 保持纵横比调整大小img.thumbnail(size, Image.Resampling.LANCZOS)# 保存处理后的图片output_pathos.path.join(output_folder, filename)img.save(output_path, quality95)success_count1print(f成功处理{filename})exceptException as e:fail_count1print(f处理失败 - {filename}: {str(e)})print(f\n处理完成成功{success_count}失败{fail_count})# 使用示例batch_resize_images(input_images,output_images, (1024,768))四、添加水印保护图片版权给图片添加水印12345678910111213141516171819202122232425262728293031323334353637383940414243444546defadd_watermark(image_path, watermark_text, output_path):给图片添加文字水印# 打开图片imgImage.open(image_path)# 创建绘图对象drawImageDraw.Draw(img)# 加载字体请确保字体文件存在try:fontImageFont.truetype(arial.ttf,36)except:fontImageFont.load_default()# 计算水印位置右下角text_widthdraw.textlength(watermark_text, fontfont)text_height36ximg.width-text_width-20yimg.height-text_height-20# 添加半透明文字draw.text((x, y),watermark_text,fill(255,255,255,128),# 白色半透明fontfont)# 保存图片img.save(output_path)# 批量添加水印defbatch_add_watermark(input_folder, output_folder, watermark_text):批量给图片添加水印ifnotos.path.exists(output_folder):os.makedirs(output_folder)forfilenameinos.listdir(input_folder):iffilename.lower().endswith((.jpg,.jpeg,.png)):input_pathos.path.join(input_folder, filename)output_pathos.path.join(output_folder, fwatermarked_{filename})add_watermark(input_path, watermark_text, output_path)五、高级技巧1. 图片格式转换12345678910111213141516171819defconvert_format(input_path, output_format):转换图片格式:param input_path: 输入图片路径:param output_format: 目标格式如PNGimgImage.open(input_path)# 如果是PNG保持透明通道ifoutput_format.upper()PNG:ifimg.modein(RGBA,LA):output_pathinput_path.rsplit(.,1)[0].pngimg.save(output_path, output_format)return# 转换为RGB模式去除透明通道rgb_imgimg.convert(RGB)output_pathinput_path.rsplit(.,1)[0].output_format.lower()rgb_img.save(output_path, output_format)2. 图片优化1234567891011121314151617defoptimize_image(input_path, output_path, max_size_kb500):优化图片大小控制在指定KB以内imgImage.open(input_path)quality95whileTrue:img.save(output_path, qualityquality)size_kbos.path.getsize(output_path)/1024ifsize_kb max_size_kborquality 5:breakquality-5print(f优化完成{size_kb:.2f}KB质量{quality})练习小任务尝试实现以下功能给图片添加图片水印批量为图片添加边框制作图片缩略图画廊图片色彩增强实用技巧处理大量图片时注意内存使用保持原图备份注意图片质量和文件大小的平衡使用多线程提高处理速度