基于Python实现一个图片压缩工具

 更新时间:2024年01月29日 08:29:47   作者:Sitin涛哥  
图片压缩是在保持图像质量的同时减小图像文件大小的过程,本文将学习如何使用Python来实现一个简单但功能强大的图片压缩工具,以及如何在不同情境下进行图片压缩,希望对大家有所帮助

Python客栈送红包、纸质书

图片压缩是在保持图像质量的同时减小图像文件大小的过程。这在网络应用、移动应用和网页设计中非常有用,因为它可以减少加载时间和存储空间占用。在本文中,将学习如何使用Python来实现一个简单但功能强大的图片压缩工具,以及如何在不同情境下进行图片压缩。

安装必要的库

在开始之前,需要安装两个Python库:Pillow和tqdm。Pillow是一个强大的图像处理库,而tqdm用于显示压缩进度。

可以使用以下命令来安装这两个库:

1
pip install Pillow tqdm

基本的图片压缩

首先,将学习如何实现一个基本的图片压缩工具,该工具将图像的质量减小为指定的百分比。将使用Pillow库来执行图像处理操作。

以下是一个简单的图片压缩函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
from PIL import Image
import os
 
def compress_image(input_path, output_path, quality=80):
    """
    压缩图片的函数
 
    :param input_path: 输入图片文件路径
    :param output_path: 输出图片文件路径
    :param quality: 图片质量(0-100),默认为80
    """
    try:
        # 打开输入图片
        with Image.open(input_path) as img:
            # 保存为输出图片(JPG格式),设置质量
            img.save(output_path, "JPEG", quality=quality)
        return True
    except Exception as e:
        print(f"压缩图片时出错:{e}")
        return False
 
# 示例用法
input_image = "input.jpg"
output_image = "output.jpg"
compress_image(input_image, output_image, quality=60)

在这个函数中,首先使用Pillow库的Image.open方法打开输入图片。然后,使用Image.save方法将图像保存为JPG格式,并设置图像质量。较低的质量值会导致更大的压缩比。

批量图片压缩

通常,需要批量处理多个图片文件。

以下是一个示例代码,演示如何批量压缩多个图片文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from PIL import Image
import os
from tqdm import tqdm
 
def batch_compress_images(input_folder, output_folder, quality=80):
    """
    批量压缩图片的函数
 
    :param input_folder: 输入图片文件夹路径
    :param output_folder: 输出图片文件夹路径
    :param quality: 图片质量(0-100),默认为80
    """
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)
     
    # 获取输入文件夹中的所有图片文件
    image_files = [f for f in os.listdir(input_folder) if f.endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp'))]
     
    for image_file in tqdm(image_files, desc="压缩进度"):
        try:
            input_path = os.path.join(input_folder, image_file)
            output_path = os.path.join(output_folder, image_file)
             
            # 压缩图片
            compress_image(input_path, output_path, quality)
        except Exception as e:
            print(f"处理图片 {image_file} 时出错:{e}")
 
# 示例用法
input_folder = "input_images"
output_folder = "output_images"
batch_compress_images(input_folder, output_folder, quality=60)

这个函数接受输入图片文件夹路径和输出图片文件夹路径,并遍历输入文件夹中的所有图片文件,对每个文件进行压缩并保存到输出文件夹中。使用tqdm库来显示压缩进度。

自动选择压缩质量

有时,可能希望自动选择压缩质量,以便在指定文件大小内获得最佳的图像质量。

以下是一个示例代码,演示如何实现自动选择压缩质量的功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from PIL import Image
import os
from tqdm import tqdm
 
def auto_compress_images(input_folder, output_folder, target_size_kb):
    """
    自动选择压缩质量以达到目标文件大小的函数
 
    :param input_folder: 输入图片文件夹路径
    :param output_folder: 输出图片文件夹路径
    :param target_size_kb: 目标文件大小(KB)
    """
    # 创建输出文件夹
    os.makedirs(output_folder, exist_ok=True)
     
    # 获取输入文件夹中的所有图片文件
    image_files = [f for f in os.listdir(input_folder) if f.endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp'))]
     
    for image_file in tqdm(image_files, desc="压缩进度"):
        try:
            input_path = os.path.join(input_folder, image_file)
            output_path = os.path.join(output_folder, image_file)
             
            # 初始化质量
            quality = 80  # 初始质量设为80
             
            while os.path.getsize(input_path) > target_size_kb * 1024:
                # 压缩图片并保存到临时文件
                temp_output_path = os.path.join(output_folder, "temp.jpg")
                compress_image(input_path, temp_output_path, quality)
                 
                # 用临时文件替换原始文件
                os.replace(temp_output_path, input_path)
                 
                # 减小质量以进一步压缩
                quality -= 10
                if quality < 10:
                    break
        except Exception as e:
            print(f"处理图片 {image_file} 时出错:{e}")
 
# 示例用法
input_folder = "input_images"
output_folder = "output_images_auto"
target_size_kb = 100  # 目标文件大小(KB)
auto_compress_images(input_folder, output_folder, target_size_kb)

这个函数根据目标文件大小自动选择压缩质量,以便在不超过指定大小的情况下获得最佳的图像质量。它会不断尝试降低质量,直到图像大小小于或等于目标大小为止。

总结

通过本文,学习了如何使用Python和Pillow库来实现图片压缩工具。涵盖了基本的图片压缩、批量图片压缩和自动选择压缩质量等不同情境下的图片压缩方法。这个工具可以帮助大家在不同项目中处理图片,并根据需要进行压缩,以便在减小文件大小的同时保持图像质量。希望这些示例代码能帮助大家更好地理解和应用图片压缩技术。

以上就是基于Python实现一个图片压缩工具的详细内容,更多关于Python图片压缩工具的资料请关注脚本之家其它相关文章!

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/wuShiJingZuo/article/details/135765125

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • Python面向对象编程(三)

    Python面向对象编程(三)

    本文详细讲解了Python的面向对象编程,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • Python数据分析matplotlib设置多个子图的间距方法

    Python数据分析matplotlib设置多个子图的间距方法

    今天小编就为大家分享一篇Python数据分析matplotlib设置多个子图的间距方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Python中super函数的用法

    Python中super函数的用法

    这篇文章主要介绍了Python中super函数的用法,详细的介绍了Python super函数的具体用法和实例,具有一定的参考价值,有兴趣的可以了解一下
    2017-11-11
  • Docker如何部署Python项目的实现详解

    Docker如何部署Python项目的实现详解

    这篇文章主要介绍了Docker如何部署Python项目的实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • python+opencv实现霍夫变换检测直线

    python+opencv实现霍夫变换检测直线

    这篇文章主要为大家详细介绍了python+opencv实现霍夫变换检测直线,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-12-12
  • Python数据处理之savetxt()和loadtxt()使用详解

    Python数据处理之savetxt()和loadtxt()使用详解

    这篇文章主要介绍了Python数据处理之savetxt()和loadtxt()使用详解,NumPy提供了多种存取数组内容的文件操作函数,保存数组数据的文件可以是二进制格式或者文本格式,今天我们来看看savetxt()和loadtxt()的用法,需要的朋友可以参考下
    2023-08-08
  • Python中函数的多种格式和使用实例及小技巧

    Python中函数的多种格式和使用实例及小技巧

    这篇文章主要介绍了Python中函数的多种格式和使用实例及小技巧,本文讲解了普通格式、带收集位置参数的函数、带收集关键字参数的函数、函数特殊用法、内嵌函数和闭包等内容,需要的朋友可以参考下
    2015-04-04
  • Python实现数据可视化案例分析

    Python实现数据可视化案例分析

    这篇文章主要介绍了Python实现数据可视化案例分析,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • python实现将多个文件分配到多个文件夹的方法

    python实现将多个文件分配到多个文件夹的方法

    今天小编就为大家分享一篇python实现将多个文件分配到多个文件夹的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python字典操作实例详解

    python字典操作实例详解

    这篇文章主要为大家详细介绍了python字典操作实例的相关代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-11-11

最新评论