python代码示例将input_images文件夹中的所有图片,如果图片宽度大于300px的则截取为300px

python代码示例将input_images文件夹中的所有图片,如果图片宽度大于300px的则截取为300px

代码示例:

from PIL import Image
import os
import sys
import datetime

# pip install Pillow
# 执行命令:python cutimg.py 600 2024-07-23 2024-07-23
# 图片宽度,日期开始,日期结束

def process_images(width=300, start_date=None, end_date=None):
    input_folder = 'input_images/'

    # 获取开始日期和结束日期的时间戳
    if start_date is None:
        start_date = datetime.date.today() - datetime.timedelta(days=1)
    else:
        start_date = datetime.datetime.strptime(start_date, "%Y-%m-%d")

    if end_date is None:
        end_date = start_date + datetime.timedelta(days=1) - datetime.timedelta(seconds=1)
    else:
        end_date = datetime.datetime.strptime(end_date, "%Y-%m-%d") + datetime.timedelta(days=1) - datetime.timedelta(seconds=1)

    # 遍历输入文件夹中的所有文件
    for filename in os.listdir(input_folder):
        file_path = os.path.join(input_folder, filename)

        # 检查文件是否为图片
        if filename.lower().endswith(('.jpg', '.jpeg', '.png')):
            # 检查文件的创建时间
            creation_time = datetime.datetime.fromtimestamp(os.path.getctime(file_path))
            print(filename, creation_time)
            # 只处理在指定时间范围内创建的图片
            if start_date <= creation_time <= end_date:
                try:
                    with Image.open(file_path) as img:
                        img_width, img_height = img.size
                        
                        # 直接原图尺寸resize一下就会压缩一半的大小
                        img = img.resize((img_width, img_height), Image.LANCZOS)
                        img.save(file_path)
                        print(f"成功")
                        
                        #以上是根据传入的宽度来裁剪
                        #if img_width > width:
                            #new_height = int(width * img_height / img_width)
                            #img = img.resize((width, new_height), Image.LANCZOS)                            
                            #img.save(file_path)# 直接覆盖原图
                            #print(f"成功")
                        #else:
                            #print(f"不处理(宽度小于{width})")
        
                        
                except Exception as e:
                    print(f"失败: {e}")
            else:
                print(f"不处理(日期不在范围)")

    print("图片处理完成!")

if __name__ == "__main__":
    # 从命令行参数获取宽度、开始日期和结束日期
    if len(sys.argv) > 1:
        width = int(sys.argv[1])
    else:
        width = 300

    if len(sys.argv) > 2:
        start_date = sys.argv[2]
    else:
        start_date = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")

    if len(sys.argv) > 3:
        end_date = sys.argv[3]
    else:
        end_date = (datetime.date.today() - datetime.timedelta(days=1)).strftime("%Y-%m-%d")

    process_images(width, start_date, end_date)

解释代码:

  1. 导入需要的库

    • PIL.Image:用于处理图像文件。
  2. 定义文件夹路径

    • input_folder:存放输入图片的文件夹路径。
    • output_folder:存放处理后图片的文件夹路径。
  3. 确保输出文件夹存在

    • 使用os.makedirs(output_folder, exist_ok=True)确保输出文件夹存在,如果不存在则创建它。
  4. 遍历输入文件夹中的图片文件

    • 使用os.listdir(input_folder)列出input_folder中的所有文件。
    • 对于每个文件名,检查它是否以.jpg.png.jpeg结尾,以确定它是否是图片文件。
  5. 处理每个图片文件

    • 使用Image.open()打开图片文件。
    • 使用.size属性获取图片的原始宽度和高度。
  6. 调整图片大小

    • 如果图片宽度大于300px,则计算相应的高度,以保持宽高比。
    • 使用img.resize()方法将图片调整为300px宽,并保存到img变量中。
  7. 保存处理后的图片

    • 使用img.save()方法将处理后的图片保存到输出文件夹中,文件名与原始文件相同。
  8. 完成处理

    • 所有图片处理完成后,打印消息提示。

注意事项:

  • 本示例假设输入文件夹中只包含需要处理的图片文件(.jpg.png.jpeg),其他文件格式将被忽略。
  • 如果输入文件夹中包含其他类型的文件,请根据需要添加文件类型检查或异常处理代码。
  • 在实际使用中,请根据需要调整输入和输出文件夹的路径。

这段代码可以帮助你批量处理图片,将宽度大于300px的图片截取为300px宽,并保存到指定的输出文件夹中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值