Skip to content

Commit

Permalink
feat: add certificate (#74)
Browse files Browse the repository at this point in the history
  • Loading branch information
ilharp committed Dec 3, 2023
1 parent 9fdabe3 commit bb082d5
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 0 deletions.
110 changes: 110 additions & 0 deletions meme_generator/memes/certificate/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
from datetime import datetime
from pathlib import Path
from typing import List

import dateparser
from pil_utils import BuildImage
from pydantic import Field

from meme_generator import MemeArgsModel, MemeArgsParser, MemeArgsType, add_meme
from meme_generator.exception import TextOverLength

parser = MemeArgsParser()
parser.add_argument("-t", "--time", type=str, default="", help="指定时间")


class Model(MemeArgsModel):
time: str = Field("", description="指定时间")


img_dir = Path(__file__).parent / "images"


def certificate(images, texts: List[str], args: Model):
time = datetime.now()
if args.time and (parsed_time := dateparser.parse(args.time)):
time = parsed_time

frame = BuildImage.open(img_dir / "0.png")

try:
frame.draw_text(
(340, 660, 770, 800),
texts[0],
allow_wrap=False,
max_fontsize=80,
min_fontsize=20,
)
except ValueError:
raise TextOverLength(texts[0])
try:
frame.draw_text(
(565, 1040, 2100, 1320),
texts[1],
fill="red",
allow_wrap=True,
max_fontsize=120,
min_fontsize=60,
)
except ValueError:
raise TextOverLength(texts[1])
try:
frame.draw_text(
(1500, 1400, 2020, 1520),
texts[2],
allow_wrap=False,
max_fontsize=60,
min_fontsize=20,
)
except ValueError:
raise TextOverLength(texts[2])
try:
frame.draw_text(
(450, 850, 2270, 1080),
texts[3]
if len(texts) >= 4
else "  在本学年第一学期中表现优秀,被我校决定评为",
allow_wrap=True,
max_fontsize=80,
min_fontsize=40,
halign="left",
valign="top",
)
except ValueError:
raise TextOverLength(texts[3])

frame.draw_text(
(1565, 1527),
"{:04d}".format(time.year),
allow_wrap=False,
fontsize=60,
)
frame.draw_text(
(1752, 1527),
"{:02d}".format(time.month),
allow_wrap=False,
fontsize=60,
)
frame.draw_text(
(1865, 1527),
"{:02d}".format(time.day),
allow_wrap=False,
fontsize=60,
)

return frame.save_png()


add_meme(
"certificate",
certificate,
min_texts=3,
max_texts=4,
default_texts=[
"小王",
"优秀学生",
"一年一班",
],
args_type=MemeArgsType(parser, Model),
keywords=["奖状", "证书"],
)
Binary file added meme_generator/memes/certificate/images/0.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit bb082d5

Please sign in to comment.