File size: 2,570 Bytes
346533a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from typing import List

from PIL import ImageFilter
from pil_utils import BuildImage, Text2Image
from pil_utils.gradient import ColorStop, LinearGradient

from meme_generator import MemeArgsModel, add_meme
from meme_generator.exception import TextOrNameNotEnough, TextOverLength


def ask(images: List[BuildImage], texts: List[str], args: MemeArgsModel):
    if not texts and not args.user_infos:
        raise TextOrNameNotEnough("ask")

    name = texts[0] if texts else args.user_infos[0].name
    ta = "他" if args.user_infos and args.user_infos[0].gender == "male" else "她"

    img = images[0].resize_width(640)
    img_w, img_h = img.size
    gradient_h = 150
    gradient = LinearGradient(
        (0, 0, 0, gradient_h),
        [ColorStop(0, (0, 0, 0, 220)), ColorStop(1, (0, 0, 0, 30))],
    )
    gradient_img = gradient.create_image((img_w, gradient_h))
    mask = BuildImage.new("RGBA", img.size)
    mask.paste(gradient_img, (0, img_h - gradient_h), alpha=True)
    mask = mask.filter(ImageFilter.GaussianBlur(radius=3))
    img.paste(mask, alpha=True)

    start_w = 20
    start_h = img_h - gradient_h + 5
    text1 = name
    text2 = f"{name}不知道哦。"
    text2img1 = Text2Image.from_text(text1, 28, weight="bold")
    text2img2 = Text2Image.from_text(text2, 28, weight="bold")
    img.draw_text(
        (start_w + 40 + (text2img2.width - text2img1.width) // 2, start_h),
        text1,
        fontsize=28,
        fill="orange",
        weight="bold",
    )
    img.draw_text(
        (start_w + 40, start_h + text2img1.height + 10),
        text2,
        fontsize=28,
        fill="white",
        weight="bold",
    )

    line_h = start_h + text2img1.height + 5
    img.draw_line(
        (start_w, line_h, start_w + text2img2.width + 80, line_h),
        fill="orange",
        width=2,
    )

    sep_w = 30
    sep_h = 80
    frame = BuildImage.new("RGBA", (img_w + sep_w * 2, img_h + sep_h * 2), "white")
    try:
        frame.draw_text(
            (sep_w, 0, img_w + sep_w, sep_h),
            f"让{name}告诉你吧",
            max_fontsize=35,
            halign="left",
        )
        frame.draw_text(
            (sep_w, img_h + sep_h, img_w + sep_w, img_h + sep_h * 2),
            f"啊这,{ta}说不知道",
            max_fontsize=35,
            halign="left",
        )
    except ValueError:
        raise TextOverLength(name)
    frame.paste(img, (sep_w, sep_h), alpha=True)
    return frame.save_png()


add_meme(
    "ask", ask, min_images=1, max_images=1, min_texts=0, max_texts=1, keywords=["问问"]
)