使用python压缩图片
- 首先Linux上面要安装一些软件包
yum install -y libjpeg-devel
yum install -y zlib-devel
yum install -y libjpeg libtiff freetype
- 其次需要安装python的依赖
pip3 install tinify
pip3 install Pillow
- 编写并运行以下代码
import os
from PIL import Image
import tinify
from concurrent.futures import ThreadPoolExecutor
# 配置部分
input_folder = '/img' # 要压缩的图片文件夹
whitelist = {'example1.jpg', 'important_image.png'} # 白名单中的文件
quality = 75 # 压缩质量
def compress_image(img_path, quality):
"""
压缩单张图片并覆盖原文件。
:param img_path: 图片路径
:param quality: 压缩质量
"""
try:
img = Image.open(img_path)
img.save(img_path, optimize=True, quality=quality)
print(f"Compressed and saved in place: {img_path}")
except Exception as e:
print(f"Failed to compress {img_path}: {e}")
def compress_images_in_place(input_folder, whitelist=None, quality=75):
"""
使用 Pillow 压缩图片并覆盖原文件,支持白名单功能。使用多线程加速处理。
:param input_folder: 原始图片文件夹路径
:param whitelist: 白名单列表,包含不希望被压缩的图片文件名(可选)
:param quality: 压缩质量,默认75
"""
if whitelist is None:
whitelist = set()
# 创建一个 ThreadPoolExecutor 来处理压缩任务
with ThreadPoolExecutor() as executor:
futures = []
for root, dirs, files in os.walk(input_folder):
for file in files:
if file in whitelist:
print(f"Skipping (whitelisted): {file}")
continue
if file.lower().endswith(('.jpg', '.jpeg', '.png')):
img_path = os.path.join(root, file)
futures.append(executor.submit(compress_image, img_path, quality))
# 等待所有任务完成
for future in futures:
future.result()
# 调用压缩函数
compress_images_in_place(input_folder, whitelist, quality)
使用python压缩图片
https://blog.liuzijian.com/post/1728e608-681f-f381-82e5-b5a8b048620f.html