python:图片压缩脚本

本教程记录了将图片进行压缩的python脚本,可以输入一张图片,进行压缩,返回一个新的压缩后的图片。

# -*- coding: utf-8 -*-
from PIL import Image
import os


def compress_image(input_path, output_path, target_size_kb, step=5, min_quality=10, scale_factor=0.9):
    """
    压缩图片到指定大小(KB),优先调整质量,不足时降低分辨率
    :param input_path: 输入图片路径
    :param output_path: 输出图片路径
    :param target_size_kb: 目标大小(KB)
    :param step: 质量调整步长
    :param min_quality: 最低质量限制
    :param scale_factor: 缩放比例(当质量不够时缩小尺寸)
    """
    img = Image.open(input_path)
    quality = 95  # 初始质量

    while quality >= min_quality:
        img.save(output_path, 'JPEG', quality=quality)
        file_size = os.path.getsize(output_path) / 1024  # KB

        if file_size <= target_size_kb:
            print(f"压缩成功: {file_size:.2f} KB")
            return

        quality -= step

    # 如果质量调整不够,尝试缩小分辨率
    while file_size > target_size_kb:
        width, height = img.size
        new_width, new_height = int(width * scale_factor), int(height * scale_factor)
        img = img.resize((new_width, new_height))  # 这里去掉了 Image.ANTIALIAS
        img.save(output_path, 'JPEG', quality=min_quality)
        file_size = os.path.getsize(output_path) / 1024  # KB

        if file_size <= target_size_kb:
            print(f"通过缩小分辨率压缩成功: {file_size:.2f} KB")
            return

    print("无法压缩到指定大小,请选择更小的目标大小。")


# 示例用法
input_image = "C:\\Users\\Administrator\\Desktop\\test\\a4060c93c148a2586a7069efd075933.jpg"  # 替换为你的输入图片
output_image = "C:\\Users\\Administrator\\Desktop\\test\\output.jpg"  # 替换为你的输出图片
target_size_kb = 100  # 目标大小 100KB

compress_image(input_image, output_image, target_size_kb)

你可能感兴趣的:(python,实用脚本,小脚本,python)