python修改图像的大小以及图像类型
要使用Python修改图像的大小和类型,可以使用 Pillow 库
(PIL的分支)。
1.安装 Pillow
如果未安装 Pillow,先通过 pip 安装
:
pip install Pillow # 安装所需要的库
2. 修改图像大小
方法一:直接指定新尺寸(可能拉伸图像)
resize
from PIL import Image
# 打开图像
image = Image.open("input.jpg")
# 定义新尺寸 (width, height)
new_size = (800, 600)
# 修改尺寸(可能拉伸)
resized_image = image.resize(new_size)
# 保存结果
resized_image.save("output_resized.jpg")
方法二:保持宽高比(推荐)
resize进行了一定的限制,通过定义函数,使得能够保持宽高比
from PIL import Image
def resize_with_aspect_ratio(image_path, max_width=None, max_height=None):
image = Image.open(image_path)
original_width, original_height = image.size
# 计算新尺寸,保持宽高比
if max_width and max_height:
ratio = min(max_width / original_width, max_height / original_height)
elif max_width:
ratio = max_width / original_width
elif max_height:
ratio = max_height / original_height
else:
return image # 无修改
new_size = (int(original_width * ratio), int(original_height * ratio))
return image.resize(new_size, Image.Resampling.LANCZOS)
# 示例:限制最大宽度为800,高度按比例调整
resized_image = resize_with_aspect_ratio("input.jpg", max_width=800)
resized_image.save("output_resized_proportional.jpg")
3. 修改图像类型(格式)
通过 save
方法的第二个参数直接指定新格式:
from PIL import Image
image = Image.open("input.jpg")
# 转换为PNG格式
image.save("output.png", "PNG")
# 转换为WebP格式(需要Pillow支持)
image.save("output.webp", "WEBP")
4. 综合示例:同时修改大小和类型
保持比例进行缩放,输入最大的宽高,然后按照比例进行缩放,谁大随谁
。
from PIL import Image
def process_image(input_path, output_path, new_size, format="JPEG"):
image = Image.open(input_path)
# 调整大小(保持比例)
image.thumbnail(new_size) # thumbnail会保持比例,new_size是最大允许尺寸
# 保存为指定格式
image.save(output_path, format, quality=95) # quality参数适用于JPEG/WebP
# 使用示例
process_image(
input_path="input.jpg",
output_path="output_small.png",
new_size=(800, 800), # 限制最大宽度/高度为800
format="PNG"
)
关键参数说明
-
resize(): 直接调整尺寸(可能拉伸)。
-
thumbnail(): 保持宽高比调整尺寸(更安全)。
-
save():
-
通过第二个参数(如 “PNG”)指定输出格式。
-
quality=85(1-100):适用于JPEG/WebP的压缩质量。
-
optimize=True:启用压缩优化。
-
注意事项
格式支持:不同格式支持的特性不同(如PNG支持透明度,JPEG不支持)。
图像质量:转换为有损格式(如JPEG)时,quality 参数影响文件大小和清晰度。
批量处理:可通过循环遍历文件实现批量修改。
如果有更复杂的需求(如添加水印、调整颜色),Pillow也提供了丰富的API支持。