学校活动最有用的一集
学校搞电子绿化,
我力争赛博人生。
要求每日网上种树截图,
直接整条蟒蛇添加日期。
都别说这种诡异的活动没用奥,最起码它能锻炼我的编程能力
且看,画布造物神机!
import os
import datetime
from PIL import Image, ImageDraw, ImageFont
# 用户信息
user_info = {'学院': '数学与计算机学院'}
name = input("请输入姓名:")
student_id = input("请输入学号:")
user_info['姓名'] = name
user_info['学号'] = student_id
# 获取用户选择的图片存储方式,并进行有效性校验
while True:
storage_choice = input(
"请选择图片存储方式:\n1. 将所有图片都放在一个文件夹中\n2. 将图片每7天为一个单位,分别放在不同的文件夹中\n")
if storage_choice in ('1', '2'):
storage_choice = int(storage_choice)
break
else:
print("无效的输入,请输入1或2。")
# 用户自定义文件夹的基础路径
base_output_folder = f"{name}_processed_images"
# 定义文件名模板
file_name_template = "image ({}).jpg" # 根据实际情况调整文件名模板
# 输入图片文件目录
input_folder = "./input_images"
# 字体文件路径
font_path = "C:/Windows/Fonts/MiSans-Regular.ttf"
# 创建基础输出文件夹
if not os.path.exists(base_output_folder):
os.makedirs(base_output_folder)
# 初始化日期计算器,用于判断当前图片应放入哪个7天文件夹内
current_week_number = 0
last_week_start_date = None
# 遍历日期范围
start_date = datetime.date(2023, 4, 1)
end_date = datetime.date(2023, 5, 31)
for day in range((end_date - start_date).days + 1):
current_date = start_date + datetime.timedelta(days=day)
if storage_choice == 2 and day % 7 == 0: # 每7天创建新的文件夹
current_week_number += 1
last_week_start_date = current_date
week_folder = f"{base_output_folder}/week_{current_week_number}_{current_date.strftime('%Y%m%d')}"
output_folder = week_folder
if not os.path.exists(week_folder):
os.makedirs(week_folder)
# 绘制和保存图片到当前输出文件夹
formatted_date = current_date.strftime("%m月%d日")
# 构建图片文件名
img_file_name = file_name_template.format(str(day + 1).zfill(2))
img_path = os.path.join(input_folder, img_file_name)
try:
with Image.open(img_path) as image:
copied_image = image.copy()
draw = ImageDraw.Draw(copied_image)
fixed_text = f"{user_info['学院']} \n {user_info['姓名']} \n {user_info['学号']}"
date_text = f"日期:{formatted_date}"
font_fixed = ImageFont.truetype(font_path, size=100)
font_date = ImageFont.truetype(font_path, size=100)
fixed_text_bbox = draw.textbbox((20, 630), fixed_text, font=font_fixed)
extended_bbox = (
fixed_text_bbox[0], # 左上角x坐标不变
fixed_text_bbox[1], # 左上角y坐标不变
fixed_text_bbox[2], # 右下角x坐标不变
fixed_text_bbox[3] + 20 # 右下角y坐标增加10个像素
)
draw.rectangle([p - 10 for p in fixed_text_bbox], fill=(255, 255, 255))
draw.text((20, 620), fixed_text, font=font_fixed, fill=(0, 0, 0))
date_text_bbox = draw.textbbox((20, 935), date_text, font=font_date)
draw.rectangle([p - 10 for p in date_text_bbox], fill=(255, 255, 255))
draw.text((20, 925), date_text, font=font_date, fill=(0, 0, 0))
output_file_name = f"{current_date.strftime('%Y%m%d')}_processed.jpg"
output_path = os.path.join(output_folder, output_file_name)
copied_image.save(output_path)
print(f"图片 '{img_file_name}' 处理完成,已保存到 {output_path} 文件。")
except FileNotFoundError as fnf_error:
print(f"测试图片文件 '{img_file_name}' 未找到,请检查文件路径。错误详情:{fnf_error}")
except IOError as io_error:
print(
f"处理图片文件 '{img_file_name}' 时发生IO错误,请检查图片文件是否有效。错误详情:{io_error.filename} - {io_error.strerror}")
input("制作完成!\n按回车键退出")
需要一个名为 input_images 的文件夹,里面放入64张图片
(伪装一下手机截图左上角的时间,别都整一样的时间(bushi) 虽然但是,还是装一下比较好)