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)
解释代码:
-
导入需要的库:
PIL.Image
:用于处理图像文件。
-
定义文件夹路径:
input_folder
:存放输入图片的文件夹路径。output_folder
:存放处理后图片的文件夹路径。
-
确保输出文件夹存在:
- 使用
os.makedirs(output_folder, exist_ok=True)
确保输出文件夹存在,如果不存在则创建它。
- 使用
-
遍历输入文件夹中的图片文件:
- 使用
os.listdir(input_folder)
列出input_folder
中的所有文件。 - 对于每个文件名,检查它是否以
.jpg
、.png
或.jpeg
结尾,以确定它是否是图片文件。
- 使用
-
处理每个图片文件:
- 使用
Image.open()
打开图片文件。 - 使用
.size
属性获取图片的原始宽度和高度。
- 使用
-
调整图片大小:
- 如果图片宽度大于300px,则计算相应的高度,以保持宽高比。
- 使用
img.resize()
方法将图片调整为300px宽,并保存到img
变量中。
-
保存处理后的图片:
- 使用
img.save()
方法将处理后的图片保存到输出文件夹中,文件名与原始文件相同。
- 使用
-
完成处理:
- 所有图片处理完成后,打印消息提示。
注意事项:
- 本示例假设输入文件夹中只包含需要处理的图片文件(
.jpg
、.png
、.jpeg
),其他文件格式将被忽略。 - 如果输入文件夹中包含其他类型的文件,请根据需要添加文件类型检查或异常处理代码。
- 在实际使用中,请根据需要调整输入和输出文件夹的路径。
这段代码可以帮助你批量处理图片,将宽度大于300px的图片截取为300px宽,并保存到指定的输出文件夹中。