简介
本教程将指导你如何使用Python编程语言和PIL(Python Imaging
Library,现在称为Pillow)库来按比例缩放图片。按比例缩放意味着在保持图片原有宽高比的前提下,将图片的尺寸调整到指定的最大宽度和高度内。
准备工作
在开始之前,请确保你已经安装了Python和Pillow库。如果还没有安装Pillow库,可以通过以下命令安装:
pip install Pillow
代码解析
from pathlib import Path
from PIL import Image
def resize_image_proportionally(input_path, output_dir, max_width=1920, max_height=1200):
"""
将图片缩放到指定宽高内,而保持原来的宽高比
:param input_path:输入图片文件路径
:param output_dir:输出图片文件夹路径
:param max_width:缩放后图片最大宽度
:param max_height:缩放后图片最大高度
"""
# 打开图片
try:
img = Image.open(input_path)
except Exception as e:
print(f'打开图片出现错误:{e}')
return
# 获取原始图片的尺寸
original_width, original_height = img.size
# 只有图片宽度或高度超出指定范围,才缩放图片
if original_width > max_width or original_height > max_height:
# 计算缩放比例
ratio = min(max_width / original_width, max_height / original_height)
else:
print(f'原图宽高小于指定值,不适合缩放:{input_path}')
return
# 计算新尺寸
new_width = int(original_width * ratio)
new_height = int(original_height * ratio)
# 缩放图片
img_resized = img.resize((new_width, new_height), Image.LANCZOS)
# 保存图片
output_path = Path(output_dir).joinpath(Path(input_path).name)
img_resized.save(output_path)
print(f'输出缩放图片:{output_path}')
1. 导入必要的库
from pathlib import Path
from PIL import Image
Path
:用于路径操作,提供跨平台的路径处理能力。Image
:Pillow库中用于图像处理的模块。
2. 定义函数resize_image_proportionally
def resize_image_proportionally(input_path, output_dir, max_width=1920, max_height=1200):
"""
将图片缩放到指定宽高内,而保持原来的宽高比
:param input_path:输入图片文件路径
:param output_dir:输出图片文件夹路径
:param max_width:缩放后图片最大宽度
:param max_height:缩放后图片最大高度
"""
这个函数接受四个参数:输入图片的路径、输出目录的路径、最大宽度和最大高度。最大宽度和最大高度是可选参数,默认值分别为1920和1200。
3. 打开图片
try:
img = Image.open(input_path)
except Exception as e:
print(f'打开图片出现错误:{e}')
return
使用Image.open
尝试打开图片文件。如果出现错误(例如文件不存在或损坏),将打印错误信息并返回。
4. 获取原始图片尺寸
original_width, original_height = img.size
img.size
返回一个元组,包含图片的宽度和高度。
5. 判断是否需要缩放
if original_width > max_width or original_height > max_height:
# 计算缩放比例
ratio = min(max_width / original_width, max_height / original_height)
else:
print(f'原图宽高小于指定值,不适合缩放:{input_path}')
return
如果图片的宽度或高度超出了指定的最大值,计算缩放比例。否则,打印一条消息并返回,因为图片不需要缩放。
6. 计算新尺寸
new_width = int(original_width * ratio)
new_height = int(original_height * ratio)
根据缩放比例计算新的宽度和高度。
7. 缩放图片
img_resized = img.resize((new_width, new_height), Image.LANCZOS)
使用resize
方法按计算出的新尺寸缩放图片。Image.LANCZOS
是一种高质量的重采样滤波器。
8. 保存图片
output_path = Path(output_dir).joinpath(input_path.name)
img_resized.save(output_path)
print(f'输出缩放图片:{output_path}')
将缩放后的图片保存到指定的输出目录,并打印出保存的路径。
使用方法
要使用这个脚本,你需要指定输入图片的路径和输出目录的路径。例如:
resize_image_proportionally('path/to/your/image.jpg', 'path/to/output/directory')
这将把image.jpg
按比例缩放到最大宽度1920和最大高度1200内,并保存到指定的输出目录。