首先
pip install Pillow
compression_level
参数,该参数的范围从0到100,其中0表示最小尺寸(最高压缩),100表示最大质量(最小压缩)。这个脚本将尝试在保持图片可识别性的同时,尽可能地减小图片的大小。
from PIL import Image
import os
def compress_images(source_folder, target_folder, max_size=(1024, 1024), compression_level=50):
"""
压缩指定文件夹中的所有图片,并保存到目标文件夹,保持原有尺寸比例。
:param source_folder: 源文件夹路径
:param target_folder: 目标文件夹路径
:param max_size: 图片的最大尺寸,元组形式 (宽度, 高度)
:param compression_level: 压缩等级,0-100,等级越低,压缩后的图片越小
"""
# 确保目标文件夹存在
if not os.path.exists(target_folder):
os.makedirs(target_folder)
# 遍历源文件夹中的所有文件
for filename in os.listdir(source_folder):
# 检查文件扩展名是否为图片格式
if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
source_image_path = os.path.join(source_folder, filename)
target_image_path = os.path.join(target_folder, filename)
# 打开图片
with Image.open(source_image_path) as img:
# 保持图片的原始尺寸比例
img.thumbnail(max_size, Image.Resampling.LANCZOS)
# 根据压缩等级调整JPEG质量(PNG不受影响)
if img.format == 'JPEG':
quality = max(1, int(100 - compression_level * 2)) # JPEG质量范围1-95
img.save(target_image_path, quality=quality, optimize=True)
else:
# 对于PNG,我们尝试使用DEFLATE算法进行压缩
img.save(target_image_path, 'PNG', compress_level=compression_level, optimize=True)
print(f"Compressed {filename} with level {compression_level} and saved to {target_image_path}")
# 指定源文件夹和目标文件夹
source_folder = 'path/to/source/folder'
target_folder = 'path/to/target/folder'
# 调用函数,这里我们设置压缩等级为0以获得最小尺寸
compress_images(source_folder, target_folder, compression_level=0)
当compression_level
为0时,质量设置为1(最小值),当compression_level
为100时,质量设置为95(最大值)。对于PNG图片,我们使用了compress_level
参数,它是PNG的压缩级别,范围从0(无压缩)到9(最大压缩)。
点击链接中的链接,欢迎一起来交流学习
互联网搞钱-CSDN博客文章浏览阅读1k次。从事互联网行业近10余年,现在成为了自由职业者,全职投入互联网,主要从事互联网副业、信息差、创业、赚钱思路等方面研究、实战和经验分享。https://blog.csdn.net/qq_30776829/article/details/136265463