只压缩新增的图片,压缩效果如图:Responsive Image

Responsive Image

操作步骤

1. 将脚本保存到任意位置

compress_images.py

import os
import time
from PIL import Image
import sys

def compress_image(input_path, quality=75):
    """
    压缩图片并直接覆盖原文件
    :param input_path: 输入图片路径
    :param quality: 压缩质量 (1-100)
    """
    try:
        # 创建临时备份文件
        backup_path = f"{input_path}.bak"
        os.rename(input_path, backup_path)

        with Image.open(backup_path) as img:
            if img.mode != 'RGB':
                img = img.convert('RGB')
            img.save(input_path, quality=quality, optimize=True)

        # 删除备份文件
        os.remove(backup_path)
        print(f"成功压缩并替换: {input_path}")
    except Exception as e:
        print(f"处理 {input_path} 时出错: {str(e)}")

def process_directory(input_dir, quality=75, timestamp_file='.compress_timestamp'):
    """
    处理目录中新增或修改的图片文件并直接覆盖原文件
    :param input_dir: 输入目录
    :param quality: 压缩质量 (1-100)
    :param timestamp_file: 记录上次压缩时间的文件
    """
    supported_extensions = ('.jpg', '.jpeg', '.png', '.webp')

    # 获取上次压缩时间
    last_compress_time = 0
    if os.path.exists(timestamp_file):
        with open(timestamp_file, 'r') as f:
            last_compress_time = float(f.read())

    # 遍历目录处理文件
    for root, _, files in os.walk(input_dir):
        for file in files:
            if file.lower().endswith(supported_extensions):
                input_path = os.path.join(root, file)
                file_mtime = os.path.getmtime(input_path)
                if file_mtime > last_compress_time:
                    compress_image(input_path, quality)

    # 更新压缩时间记录
    with open(timestamp_file, 'w') as f:
        f.write(str(time.time()))

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("用法: python compress_images.py <输入目录> [质量(1-100)] [时间戳文件]")
        sys.exit(1)

    input_dir = sys.argv[1]
    quality = int(sys.argv[2]) if len(sys.argv) > 2 else 75
    timestamp_file = sys.argv[3] if len(sys.argv) > 3 else '.compress_timestamp'

    process_directory(input_dir, quality, timestamp_file)

注意:

  1. 该脚本默认压缩质量为 75,可根据需要自行修改。
  2. 该脚本默认会在当前目录下创建一个.compress_timestamp文件来记录上次压缩时间,可根据需要自行修改。

2. 运行脚本

  1. 默认压缩
python compress_images.py content
  1. 自定义压缩质量
python compress_images.py content 85
  1. 自定义时间戳文件
python compress_images.py content 85 my_timestamp.txt