基于Python实现一个图片压缩工具
图片压缩是在保持图像质量的同时减小图像文件大小的过程。这在网络应用、移动应用和网页设计中非常有用,因为它可以减少加载时间和存储空间占用。在本文中,将学习如何使用Python来实现一个简单但功能强大的图片压缩工具,以及如何在不同情境下进行图片压缩。
安装必要的库
在开始之前,需要安装两个Python库:Pillow和tqdm。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图片压缩工具的资料请关注脚本之家其它相关文章!

微信公众号搜索 “ 脚本之家 ” ,选择关注
程序猿的那些事、送书等活动等着你
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!
最新评论