Python自动化脚本裁剪图片为1:1比例(多文件夹手动输入版)

一、准备工作参考本文:

Python自动化脚本裁剪图片为1:1比例(多文件夹版)_python 图片处理像素为1:1-CSDN博客文章浏览阅读426次,点赞13次,收藏3次。Python自动化脚本裁剪图片为1:1比例(多文件夹版)可以实现多个文件夹进行处理,并将处理后的图片放入到对应的文件夹中,不改变文件夹名字和图片名字。_python 图片处理像素为1:1 https://blog.csdn.net/p_s_p/article/details/143875899?spm=1001.2014.3001.5501

二、源码:

import os
from PIL import Image

def crop_images_to_square(input_folders, base_output_folder):
    """
    Crop all images in multiple input folders to square shape and save them in corresponding output folders.

    Args:
        input_folders (list): List of paths to input folders containing images.
        base_output_folder (str): Base path for output folders.
    """
    for input_folder in input_folders:
        # Create corresponding output folder structure
        relative_folder = os.path.relpath(input_folder, start=os.path.commonpath(input_folders))
        output_folder = os.path.join(base_output_folder, relative_folder)
        os.makedirs(output_folder, exist_ok=True)

        # Process each file in the current input folder
        for filename in os.listdir(input_folder):
            if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
                img_path = os.path.join(input_folder, filename)
                try:
                    with Image.open(img_path) as img:
                        # Get image dimensions
                        width, height = img.size
                        new_size = min(width, height)

                        # Calculate cropping box
                        left = (width - new_size) / 2
                        top = (height - new_size) / 2
                        right = (width + new_size) / 2
                        bottom = (height + new_size) / 2

                        # Crop and save the image
                        img_cropped = img.crop((left, top, right, bottom))
                        img_cropped.save(os.path.join(output_folder, filename))
                        print(f'Cropped and saved: {os.path.join(output_folder, filename)}')
                except Exception as e:
                    print(f"Error processing file {img_path}: {e}")

if __name__ == '__main__':
    # Manually input folder paths
    input_folders = []
    print("Enter the paths to the input folders (leave empty to stop):")
    while True:
        folder = input("Input folder path: ")
        if folder == '':
            break
        elif os.path.isdir(folder):
            input_folders.append(folder)
        else:
            print(f"Invalid folder path: {folder}, please try again.")

    # Define the base output folder
    base_output_folder = input("Enter the base output folder path: ")

    # Crop images in all input folders
    if input_folders:
        crop_images_to_square(input_folders, base_output_folder)
    else:
        print("No valid input folders provided. Exiting.")

三、运行示例:

运行后输入文件夹路径点回车输入下一个文件夹路径,全输入完后点回车,输入输出文件夹路径,再回车运行,提前建立输出文件夹路径

四、运行结果 :

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值