python实现图片压缩

首先

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

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小码哥(xmgcode88)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值