【图像处理-批量缩放】python代码批量缩放图像(附python代码)

一个愿意伫立在巨人肩膀上的农民......

一、缩放图像应用概述

1、节省时间:手动缩放每张图像不仅耗时,而且容易出错。使用Python脚本进行批量处理可以极大地节省时间,特别是在处理大量图像时。
2、自动化流程:通过编写脚本,可以自动完成图像的读取、缩放、保存等步骤,形成一个完整的处理流程,减少人为干预。
3、统一尺寸:批量缩放可以将不同大小的图像调整为统一的大小,这对于后续的图像处理、分析或展示至关重要。
4、保持比例:在缩放过程中,保持图像的宽高比可以避免图像变形,确保图像的质量和视觉效果。
5、适应不同设备:在移动设备、网页或其他平台上展示图像时,可能需要不同大小的图像版本。批量缩放可以生成适合不同设备和分辨率的图像。
6、优化存储和传输:通过缩小图像尺寸,可以节省存储空间并减少网络传输时间,这对于在线服务和应用尤为重要。

二、图像缩放的三种方式

三、代码

1、按照原图宽高比等比例缩放

##!/usr/bin/python3
# -*- coding: utf-8 -*-            
# @Author : 码韵

#################################################
# 将图片等比例缩放,长边按照给定的尺寸,图片长宽比不变
#################################################

import os  
from PIL import Image  
  
def resize_image_proportionally(input_image_path, output_image_path, size):  
    original_image = Image.open(input_image_path)  
    max_size = (size, size)

    original_image.thumbnail(max_size, Image.LANCZOS)
    # Image.NEAREST: 最近邻插值(速度最快但质量最低)。
    # Image.BILINEAR: 双线性插值(速度和质量中等)。
    # Image.BICUBIC: 双三次插值(速度较慢但质量较高)。
    # Image.LANCZOS: Lanczos插值(质量最高但速度最慢)。  

    original_image.thumbnail(max_size, Image.LANCZOS)  
    original_image.save(output_image_path)  
  
def batch_resize_images_proportionally(input_folder, output_folder, size):  
    if not os.path.exists(output_folder):  
        os.makedirs(output_folder)  
  
    for filename in os.listdir(input_folder):  
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff', '.webp')):  
            input_path = os.path.join(input_folder, filename)  
            output_path = os.path.join(output_folder, filename)  
            try:  
                resize_image_proportionally(input_path, output_path, size)  
                print(f"处理 /{filename}/ 并成功保存")  
            except Exception as e:  
                print(f"Error resizing {filename}: {e}")  

if __name__ == "__main__": 
    input_folder = 'images'  # 修改为你的图片文件夹路径  
    output_folder = 'LongB_image'  # 修改为你想要保存缩放后图片的文件夹路径 
    size = 1024
    print(f"开始将图片按长边为{size}等比例缩放")
    batch_resize_images_proportionally(input_folder, output_folder, size)
    print("处理完毕")

结果如下:

2、强制缩放到固定分辨率

##!/usr/bin/python3
# -*- coding: utf-8 -*-            
# @Author : 码韵

#################################################
# 将图片强制缩放,生成长宽比为1:1的图像,不保留原图的长宽比
#################################################

import os  
from PIL import Image  
  
def resize_images_in_folder(input_folder_path, output_folder_path, size):  
    if not os.path.exists(output_folder_path):  
        os.makedirs(output_folder_path)  
  
    for filename in os.listdir(input_folder_path):  
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff', '.webp')):  # 添加你需要的图片格式  
            input_file_path = os.path.join(input_folder_path, filename)  
            output_file_path = os.path.join(output_folder_path, filename)  
  
            try:  
                with Image.open(input_file_path) as img:  
                    img_resized = img.resize(size)  
                    img_resized.save(output_file_path)  
            except IOError as e:  
                print(f"I/O error({e.errno}): {e.strerror} - {input_file_path}")  
            except ValueError as e:  
                print(f"Value error: {e} - {input_file_path}")  
  
if __name__ == "__main__": 
    input_path = 'images'  # 修改为你的图片文件夹路径  
    output_path = 'over_image'  # 修改为你想要保存缩放后图片的文件夹路径 
    size = (1024, 1024) 
    print(f"开始将图片强制缩放为{size}尺寸")
    resize_images_in_folder(input_path, output_path, size)
    print("处理完毕")

结果如下:

3、等比例缩放到固定分辨率,并填充指定像素值(此处填充像素值为(144, 144, 144))

##!/usr/bin/python3
# -*- coding: utf-8 -*-            
# @Author : 码韵

#################################################
# 将图片等比例缩放,并生成长宽比为1:1的图像,短边填充
#################################################

import os  
from PIL import Image  
  
def resize_and_pad_image(input_image_path, output_image_path, size=(512, 512), bg_color=(0, 0, 0)):  
    # 打开原始图片  
    original_image = Image.open(input_image_path)  
    max_size = (size[0], size[1])  

    original_image.thumbnail(max_size, Image.LANCZOS)
    # Image.NEAREST: 最近邻插值(速度最快但质量最低)。
    # Image.BILINEAR: 双线性插值(速度和质量中等)。
    # Image.BICUBIC: 双三次插值(速度较慢但质量较高)。
    # Image.LANCZOS: Lanczos插值(质量最高但速度最慢)。

    # 获取缩放后的图片尺寸  
    resized_width, resized_height = original_image.size  
      
    # 计算填充区域  
    pad_width = (size[0] - resized_width) // 2  
    pad_height = (size[1] - resized_height) // 2  
      
    # 创建一个新的512x512大小的图片,并用背景色填充  
    new_image = Image.new('RGB', size, bg_color)  
      
    # 将缩放后的图片粘贴到新的图片上  
    new_image.paste(original_image, (pad_width, pad_height))  
      
    # 保存新的图片  
    new_image.save(output_image_path)  
  
def batch_resize_and_pad_images(input_folder, output_folder, size, bg_color):  
    if not os.path.exists(output_folder):  
        os.makedirs(output_folder)  
  
    # 遍历输入文件夹中的所有文件  
    for filename in os.listdir(input_folder):  
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp', '.tiff', '.webp')):  
            input_path = os.path.join(input_folder, filename)  
            output_path = os.path.join(output_folder, filename)  
            try:  
                resize_and_pad_image(input_path, output_path, size, bg_color)  
                print(f"处理 /{filename}/ 并成功保存")  
            except Exception as e:  
                print(f"Error processing {filename}: {e}")  
  
# 使用示例  
input_folder = 'images'  # 图片文件夹路径  
output_folder = 'resize_image'  # 保存缩放后图片的文件夹路径 
size = (1024, 1024)  # 缩放图像大小
bg_color=(144, 144, 144)  # 短边填充部分像素值
print(f"开始将图片缩放为{size}大小的图像")
batch_resize_and_pad_images(input_folder, output_folder, size, bg_color)
print("处理完毕")

欢迎在这里评论、沟通、指正。

创作不易,引用请附原文链接。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码韵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值