使用Python和PIL库进行图片比例缩放

简介

本教程将指导你如何使用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内,并保存到指定的输出目录。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值