目录
起源是我收藏了很多照片,但是太大的照片不利于分享使用,而且我并不需要那么高清晰度,通过在线压缩工具tinypng又太慢
拥有python
下载python教程有很多,但我推荐使用anaconda管理python,可以灵活的管理python版本,还不会导致本地版本冲突
单个文件夹压缩脚本
安装pillow库,我在pycharm里可以直接安装到conda里,实在好管理
pip install Pillow
使用r反斜杠\
不会被当作转义字符来处理
下面代码的主要功能就是把本地文件夹里的图片压缩质量(也就是大小)输出到另一个文件夹,但为了方便也可以原地输出(会覆盖掉原图片,谨慎)
# 导入Pillow库中的Image模块,用于处理图片
from PIL import Image
# 导入os模块,用于与操作系统交互,如读取文件列表
import os
# 定义一个函数,用于压缩图片
def compress_image(input_folder, output_folder, quality):
# 遍历输入文件夹中的每个文件
for filename in os.listdir(input_folder):
# 检查文件是否是支持的图片格式
# 使用lower()方法确保文件扩展名不区分大小写
if filename.lower().endswith((".jpg", ".jpeg", ".png", ".bmp", ".gif", ".webp")):
# 使用Image.open打开输入文件夹中的图片文件
img = Image.open(os.path.join(input_folder, filename))
# 获取文件扩展名
extension = os.path.splitext(filename)[1].lower()
# 根据文件类型决定是否使用quality参数
if extension == ".gif":
# 对于GIF格式,使用optimize=True来优化文件大小
# 注意:这可能会将动画GIF转换为静态图像
img.save(os.path.join(output_folder, filename), optimize=True)
else:
# 对于其他格式,保存图片到输出文件夹,并指定压缩质量
# 使用optimize=True来进一步优化文件大小
img.save(os.path.join(output_folder, filename), quality=quality, optimize=True)
# 设置输入文件夹的路径
input_folder = r"C:\Users\HML\Desktop\PictrueMaterial\雕塑"
# 设置输出文件夹的路径
output_folder = r"C:\Users\HML\Desktop\PictrueMaterial\雕塑"
# 设置压缩质量,这里设置为80
# Quality参数的取值范围是1到95,95表示最高质量
quality = 80
# 调用compress_image函数,传入输入文件夹路径、输出文件夹路径和压缩质量
compress_image(input_folder, output_folder, quality)
批量文件夹压缩(原地)
我发现如果图片分为很多文件夹,每个文件夹压缩都要修改代码路径太麻烦了
所以干脆给一个根路径,自动每个子文件夹路径作为输入输出文件夹,将所有子文件夹里的图片原地压缩(不希望原地覆盖别做)
from PIL import Image
import os
def compress_image_folder(folder_path, quality):
# 遍历文件夹中的每个子文件夹
for subdir, dirs, files in os.walk(folder_path):
# 为每个子文件夹创建一个输出文件夹路径
output_subdir = subdir
# 遍历子文件夹中的每个文件
for filename in files:
# 检查文件是否是支持的图片格式
if filename.lower().endswith((".jpg", ".jpeg", ".png", ".bmp", ".gif", ".webp")):
# 构建完整的输入和输出文件路径
input_file_path = os.path.join(subdir, filename)
output_file_path = os.path.join(output_subdir, filename)
# 打开并压缩图片
img = Image.open(input_file_path)
img.save(output_file_path, quality=quality)
# 设置包含子文件夹的根文件夹路径
root_folder = r"C:\Users\HML\Desktop\PictrueMaterial"
# 设置压缩质量,这里设置为80
quality = 50
# 调用compress_image_folder函数,传入根文件夹路径和压缩质量
compress_image_folder(root_folder, quality)