画布造物神机

学校活动最有用的一集

学校搞电子绿化,
我力争赛博人生。
要求每日网上种树截图,
直接整条蟒蛇添加日期。

都别说这种诡异的活动没用奥,最起码它能锻炼我的编程能力


且看,画布造物神机!

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)  虽然但是,还是装一下比较好)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值