Spaces:
Running
Running
LeafLeafLeaf
commited on
Upload 263 files
Browse files- meme_generator/memes/behead/__init__.py +42 -34
- meme_generator/memes/can_can_need/__init__.py +28 -20
- meme_generator/memes/do/__init__.py +46 -38
- meme_generator/memes/empathy/__init__.py +28 -20
- meme_generator/memes/fleshlight/__init__.py +72 -64
- meme_generator/memes/forbid/__init__.py +32 -22
- meme_generator/memes/grab/__init__.py +26 -18
- meme_generator/memes/jerk_off/__init__.py +41 -0
- meme_generator/memes/jerk_off/images/0.png +3 -0
- meme_generator/memes/jerk_off/images/1.png +3 -0
- meme_generator/memes/jerk_off/images/2.png +3 -0
- meme_generator/memes/jerk_off/images/3.png +3 -0
- meme_generator/memes/jerk_off/images/4.png +3 -0
- meme_generator/memes/jerk_off/images/5.png +3 -0
- meme_generator/memes/jerk_off/images/6.png +3 -0
- meme_generator/memes/jerk_off/images/7.png +3 -0
- meme_generator/memes/lash/__init__.py +42 -0
- meme_generator/memes/lash/images/0.png +3 -0
- meme_generator/memes/lash/images/1.png +3 -0
- meme_generator/memes/lash/images/2.png +3 -0
- meme_generator/memes/lash/images/3.png +3 -0
- meme_generator/memes/lash/images/4.png +3 -0
- meme_generator/memes/lash/images/5.png +3 -0
- meme_generator/memes/lash/images/6.png +3 -0
- meme_generator/memes/lash/images/7.png +3 -0
- meme_generator/memes/lash/images/8.png +3 -0
- meme_generator/memes/little_do/__init__.py +32 -0
- meme_generator/memes/little_do/images/0.png +3 -0
- meme_generator/memes/little_do/images/1.png +3 -0
- meme_generator/memes/little_do/images/2.png +3 -0
- meme_generator/memes/little_do/images/3.png +3 -0
- meme_generator/memes/little_do/images/4.png +3 -0
- meme_generator/memes/little_do/images/5.png +3 -0
- meme_generator/memes/little_do/images/6.png +3 -0
- meme_generator/memes/operator_generator/__init__.py +66 -64
- meme_generator/memes/shoot/__init__.py +34 -0
- meme_generator/memes/shoot/images/0.png +3 -0
- meme_generator/memes/shoot/images/1.png +3 -0
- meme_generator/memes/shoot/images/10.png +3 -0
- meme_generator/memes/shoot/images/11.png +3 -0
- meme_generator/memes/shoot/images/12.png +3 -0
- meme_generator/memes/shoot/images/2.png +3 -0
- meme_generator/memes/shoot/images/3.png +3 -0
- meme_generator/memes/shoot/images/4.png +3 -0
- meme_generator/memes/shoot/images/5.png +3 -0
- meme_generator/memes/shoot/images/6.png +3 -0
- meme_generator/memes/shoot/images/7.png +3 -0
- meme_generator/memes/shoot/images/8.png +3 -0
- meme_generator/memes/shoot/images/9.png +3 -0
- meme_generator/memes/stretch/__init__.py +26 -18
meme_generator/memes/behead/__init__.py
CHANGED
@@ -1,34 +1,42 @@
|
|
1 |
-
from
|
2 |
-
from
|
3 |
-
|
4 |
-
from meme_generator import add_meme
|
5 |
-
from meme_generator.utils import save_gif
|
6 |
-
from PIL.Image import Image as IMG
|
7 |
-
from pil_utils import BuildImage
|
8 |
-
|
9 |
-
img_dir = Path(__file__).parent / "images"
|
10 |
-
|
11 |
-
|
12 |
-
def behead(images:
|
13 |
-
img = images[0].convert("RGBA").square().resize((75, 75))
|
14 |
-
# fmt: off
|
15 |
-
locs = [
|
16 |
-
(80, 72, 0), (83, 73, 0), (82, 73, 0),
|
17 |
-
(78, 73, 0), (72, 74, 0), (72, 75, 0),
|
18 |
-
(73, 76, 0), (73, 76, 0), (73, 76, 0),
|
19 |
-
(74, 76, 0), (74, 76, 0), (70, 73, 12),
|
20 |
-
(61, 62, 25), (49, 40, 45), (46, 30, 65),
|
21 |
-
(50, 35, 85), (39, 34, 105), (19, 45, 135),
|
22 |
-
(9, 91, 155), (6, 161, 175), (-4, 248, 180),
|
23 |
-
]
|
24 |
-
# fmt: on
|
25 |
-
frames:
|
26 |
-
for i in range(21):
|
27 |
-
frame = BuildImage.open(img_dir / f"{i}.png")
|
28 |
-
x, y, angle = locs[i]
|
29 |
-
frame.paste(img.rotate(angle, expand=True), (x, y), below=True)
|
30 |
-
frames.append(frame.image)
|
31 |
-
return save_gif(frames, 0.05)
|
32 |
-
|
33 |
-
|
34 |
-
add_meme(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from meme_generator.utils import save_gif
|
6 |
+
from PIL.Image import Image as IMG
|
7 |
+
from pil_utils import BuildImage
|
8 |
+
|
9 |
+
img_dir = Path(__file__).parent / "images"
|
10 |
+
|
11 |
+
|
12 |
+
def behead(images: list[BuildImage], texts, args):
|
13 |
+
img = images[0].convert("RGBA").square().resize((75, 75))
|
14 |
+
# fmt: off
|
15 |
+
locs = [
|
16 |
+
(80, 72, 0), (83, 73, 0), (82, 73, 0),
|
17 |
+
(78, 73, 0), (72, 74, 0), (72, 75, 0),
|
18 |
+
(73, 76, 0), (73, 76, 0), (73, 76, 0),
|
19 |
+
(74, 76, 0), (74, 76, 0), (70, 73, 12),
|
20 |
+
(61, 62, 25), (49, 40, 45), (46, 30, 65),
|
21 |
+
(50, 35, 85), (39, 34, 105), (19, 45, 135),
|
22 |
+
(9, 91, 155), (6, 161, 175), (-4, 248, 180),
|
23 |
+
]
|
24 |
+
# fmt: on
|
25 |
+
frames: list[IMG] = []
|
26 |
+
for i in range(21):
|
27 |
+
frame = BuildImage.open(img_dir / f"{i}.png")
|
28 |
+
x, y, angle = locs[i]
|
29 |
+
frame.paste(img.rotate(angle, expand=True), (x, y), below=True)
|
30 |
+
frames.append(frame.image)
|
31 |
+
return save_gif(frames, 0.05)
|
32 |
+
|
33 |
+
|
34 |
+
add_meme(
|
35 |
+
"behead",
|
36 |
+
behead,
|
37 |
+
min_images=1,
|
38 |
+
max_images=1,
|
39 |
+
keywords=["砍头", "斩首"],
|
40 |
+
date_created=datetime(2023, 7, 1),
|
41 |
+
date_modified=datetime(2023, 7, 1),
|
42 |
+
)
|
meme_generator/memes/can_can_need/__init__.py
CHANGED
@@ -1,20 +1,28 @@
|
|
1 |
-
from
|
2 |
-
from
|
3 |
-
|
4 |
-
from meme_generator import add_meme
|
5 |
-
from pil_utils import BuildImage
|
6 |
-
|
7 |
-
img_dir = Path(__file__).parent / "images"
|
8 |
-
|
9 |
-
|
10 |
-
def can_can_need(images:
|
11 |
-
frame = BuildImage.open(img_dir / "0.jpg")
|
12 |
-
frame.paste(
|
13 |
-
images[1].convert("RGBA").circle().resize((340, 340)), (120, 21), alpha=True
|
14 |
-
).paste(
|
15 |
-
images[0].convert("RGBA").circle().resize((300, 300)), (611, 718), alpha=True
|
16 |
-
)
|
17 |
-
return frame.save_jpg()
|
18 |
-
|
19 |
-
|
20 |
-
add_meme(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from pil_utils import BuildImage
|
6 |
+
|
7 |
+
img_dir = Path(__file__).parent / "images"
|
8 |
+
|
9 |
+
|
10 |
+
def can_can_need(images: list[BuildImage], texts, args):
|
11 |
+
frame = BuildImage.open(img_dir / "0.jpg")
|
12 |
+
frame.paste(
|
13 |
+
images[1].convert("RGBA").circle().resize((340, 340)), (120, 21), alpha=True
|
14 |
+
).paste(
|
15 |
+
images[0].convert("RGBA").circle().resize((300, 300)), (611, 718), alpha=True
|
16 |
+
)
|
17 |
+
return frame.save_jpg()
|
18 |
+
|
19 |
+
|
20 |
+
add_meme(
|
21 |
+
"can_can_need",
|
22 |
+
can_can_need,
|
23 |
+
min_images=2,
|
24 |
+
max_images=2,
|
25 |
+
keywords=["看看你的"],
|
26 |
+
date_created=datetime(2023, 3, 16),
|
27 |
+
date_modified=datetime(2023, 3, 16),
|
28 |
+
)
|
meme_generator/memes/do/__init__.py
CHANGED
@@ -1,38 +1,46 @@
|
|
1 |
-
from
|
2 |
-
from
|
3 |
-
|
4 |
-
from meme_generator import add_meme
|
5 |
-
from meme_generator.utils import save_gif
|
6 |
-
from PIL.Image import Image as IMG
|
7 |
-
from pil_utils import BuildImage
|
8 |
-
|
9 |
-
img_dir = Path(__file__).parent / "images"
|
10 |
-
|
11 |
-
|
12 |
-
def do(images:
|
13 |
-
self_locs = [(116, -8), (109, 3), (130, -10)]
|
14 |
-
user_locs = [(2, 177), (12, 172), (6, 158)]
|
15 |
-
self_head = (
|
16 |
-
images[0]
|
17 |
-
.convert("RGBA")
|
18 |
-
.resize((122, 122), keep_ratio=True)
|
19 |
-
.circle()
|
20 |
-
.rotate(15)
|
21 |
-
)
|
22 |
-
user_head = (
|
23 |
-
images[1]
|
24 |
-
.convert("RGBA")
|
25 |
-
.resize((112, 112), keep_ratio=True)
|
26 |
-
.circle()
|
27 |
-
.rotate(90)
|
28 |
-
)
|
29 |
-
frames:
|
30 |
-
for i in range(3):
|
31 |
-
frame = BuildImage.open(img_dir / f"{i}.png")
|
32 |
-
frame.paste(user_head, user_locs[i], alpha=True)
|
33 |
-
frame.paste(self_head, self_locs[i], alpha=True)
|
34 |
-
frames.append(frame.image)
|
35 |
-
return save_gif(frames, 0.05)
|
36 |
-
|
37 |
-
|
38 |
-
add_meme(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from meme_generator.utils import save_gif
|
6 |
+
from PIL.Image import Image as IMG
|
7 |
+
from pil_utils import BuildImage
|
8 |
+
|
9 |
+
img_dir = Path(__file__).parent / "images"
|
10 |
+
|
11 |
+
|
12 |
+
def do(images: list[BuildImage], texts, args):
|
13 |
+
self_locs = [(116, -8), (109, 3), (130, -10)]
|
14 |
+
user_locs = [(2, 177), (12, 172), (6, 158)]
|
15 |
+
self_head = (
|
16 |
+
images[0]
|
17 |
+
.convert("RGBA")
|
18 |
+
.resize((122, 122), keep_ratio=True)
|
19 |
+
.circle()
|
20 |
+
.rotate(15)
|
21 |
+
)
|
22 |
+
user_head = (
|
23 |
+
images[1]
|
24 |
+
.convert("RGBA")
|
25 |
+
.resize((112, 112), keep_ratio=True)
|
26 |
+
.circle()
|
27 |
+
.rotate(90)
|
28 |
+
)
|
29 |
+
frames: list[IMG] = []
|
30 |
+
for i in range(3):
|
31 |
+
frame = BuildImage.open(img_dir / f"{i}.png")
|
32 |
+
frame.paste(user_head, user_locs[i], alpha=True)
|
33 |
+
frame.paste(self_head, self_locs[i], alpha=True)
|
34 |
+
frames.append(frame.image)
|
35 |
+
return save_gif(frames, 0.05)
|
36 |
+
|
37 |
+
|
38 |
+
add_meme(
|
39 |
+
"do",
|
40 |
+
do,
|
41 |
+
min_images=2,
|
42 |
+
max_images=2,
|
43 |
+
keywords=["撅", "狠狠地撅"],
|
44 |
+
date_created=datetime(2023, 3, 7),
|
45 |
+
date_modified=datetime(2023, 3, 7),
|
46 |
+
)
|
meme_generator/memes/empathy/__init__.py
CHANGED
@@ -1,20 +1,28 @@
|
|
1 |
-
from
|
2 |
-
from
|
3 |
-
|
4 |
-
from meme_generator import add_meme
|
5 |
-
from pil_utils import BuildImage
|
6 |
-
|
7 |
-
img_dir = Path(__file__).parent / "images"
|
8 |
-
|
9 |
-
|
10 |
-
def empathy(images:
|
11 |
-
frame = BuildImage.open(img_dir / "0.png")
|
12 |
-
frame.paste(
|
13 |
-
images[0].convert("RGBA").circle().resize((90, 90)).rotate(100),
|
14 |
-
(210, 425),
|
15 |
-
below=True,
|
16 |
-
)
|
17 |
-
return frame.save_jpg()
|
18 |
-
|
19 |
-
|
20 |
-
add_meme(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from pil_utils import BuildImage
|
6 |
+
|
7 |
+
img_dir = Path(__file__).parent / "images"
|
8 |
+
|
9 |
+
|
10 |
+
def empathy(images: list[BuildImage], texts, args):
|
11 |
+
frame = BuildImage.open(img_dir / "0.png")
|
12 |
+
frame.paste(
|
13 |
+
images[0].convert("RGBA").circle().resize((90, 90)).rotate(100),
|
14 |
+
(210, 425),
|
15 |
+
below=True,
|
16 |
+
)
|
17 |
+
return frame.save_jpg()
|
18 |
+
|
19 |
+
|
20 |
+
add_meme(
|
21 |
+
"empathy",
|
22 |
+
empathy,
|
23 |
+
min_images=1,
|
24 |
+
max_images=1,
|
25 |
+
keywords=["换位思考"],
|
26 |
+
date_created=datetime(2023, 4, 27),
|
27 |
+
date_modified=datetime(2023, 4, 27),
|
28 |
+
)
|
meme_generator/memes/fleshlight/__init__.py
CHANGED
@@ -1,64 +1,72 @@
|
|
1 |
-
from
|
2 |
-
from
|
3 |
-
|
4 |
-
from meme_generator import add_meme
|
5 |
-
from meme_generator.utils import FrameAlignPolicy, Maker, make_gif_or_combined_gif
|
6 |
-
from pil_utils import BuildImage
|
7 |
-
|
8 |
-
img_dir = Path(__file__).parent / "images"
|
9 |
-
|
10 |
-
|
11 |
-
def fleshlight(images:
|
12 |
-
params = [
|
13 |
-
(((0, 6), (205, 0), (213, 157), (8, 171)), (117, 59)),
|
14 |
-
(((0, 6), (205, 0), (213, 157), (8, 171)), (117, 59)),
|
15 |
-
(((0, 6), (205, 0), (213, 157), (8, 171)), (117, 59)),
|
16 |
-
(((0, 7), (204, 0), (213, 157), (8, 172)), (118, 58)),
|
17 |
-
(((0, 6), (207, 0), (213, 158), (8, 173)), (119, 57)),
|
18 |
-
(((0, 6), (207, 0), (213, 158), (8, 173)), (119, 57)),
|
19 |
-
(((0, 6), (207, 0), (213, 158), (8, 173)), (119, 57)),
|
20 |
-
(((0, 6), (205, 0), (212, 157), (7, 171)), (121, 58)),
|
21 |
-
(((0, 6), (205, 0), (212, 157), (7, 171)), (121, 58)),
|
22 |
-
(((0, 6), (206, 0), (212, 158), (8, 172)), (121, 56)),
|
23 |
-
(((0, 6), (206, 0), (212, 158), (8, 172)), (121, 56)),
|
24 |
-
(((0, 6), (207, 0), (214, 157), (10, 171)), (121, 55)),
|
25 |
-
(((0, 7), (201, 0), (218, 154), (13, 169)), (121, 49)),
|
26 |
-
(((0, 7), (195, 0), (219, 147), (18, 162)), (118, 50)),
|
27 |
-
(((0, 4), (196, 0), (223, 133), (18, 143)), (114, 54)),
|
28 |
-
(((0, 0), (192, 1), (219, 121), (17, 124)), (115, 58)),
|
29 |
-
(((0, 0), (188, 5), (220, 110), (20, 107)), (112, 61)),
|
30 |
-
(((0, 0), (185, 15), (217, 86), (26, 73)), (108, 72)),
|
31 |
-
(((0, 0), (182, 19), (234, 67), (34, 44)), (102, 88)),
|
32 |
-
(((0, 0), (175, 25), (224, 55), (22, 23)), (111, 105)),
|
33 |
-
(((0, 0), (167, 29), (209, 49), (13, 14)), (121, 110)),
|
34 |
-
(((0, 0), (144, 27), (195, 46), (8, 8)), (135, 110)),
|
35 |
-
(((0, 0), (177, 36), (206, 59), (13, 18)), (129, 93)),
|
36 |
-
(((0, 0), (180, 38), (211, 69), (16, 25)), (126, 83)),
|
37 |
-
(((0, 0), (181, 28), (220, 70), (26, 39)), (119, 82)),
|
38 |
-
(((0, 0), (180, 17), (227, 65), (27, 45)), (115, 89)),
|
39 |
-
(((0, 0), (181, 15), (230, 63), (33, 46)), (110, 95)),
|
40 |
-
(((0, 0), (184, 24), (228, 73), (27, 47)), (91, 102)),
|
41 |
-
(((0, 0), (189, 8), (208, 73), (0, 66)), (83, 94)),
|
42 |
-
(((19, 0), (202, 25), (204, 85), (0, 58)), (63, 82)),
|
43 |
-
(((12, 0), (196, 18), (205, 70), (0, 50)), (70, 87)),
|
44 |
-
(((4, 0), (189, 17), (205, 74), (0, 53)), (82, 79)),
|
45 |
-
(((0, 0), (184, 18), (205, 72), (1, 51)), (91, 74)),
|
46 |
-
(((0, 0), (183, 17), (206, 69), (4, 52)), (92, 73)),
|
47 |
-
]
|
48 |
-
|
49 |
-
def maker(i: int) -> Maker:
|
50 |
-
def make(
|
51 |
-
img =
|
52 |
-
frame = BuildImage.open(img_dir / f"{i}.png")
|
53 |
-
points, pos = params[i]
|
54 |
-
frame.paste(img.perspective(points), pos, below=True)
|
55 |
-
return frame
|
56 |
-
|
57 |
-
return make
|
58 |
-
|
59 |
-
return make_gif_or_combined_gif(
|
60 |
-
images
|
61 |
-
)
|
62 |
-
|
63 |
-
|
64 |
-
add_meme(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from meme_generator.utils import FrameAlignPolicy, Maker, make_gif_or_combined_gif
|
6 |
+
from pil_utils import BuildImage
|
7 |
+
|
8 |
+
img_dir = Path(__file__).parent / "images"
|
9 |
+
|
10 |
+
|
11 |
+
def fleshlight(images: list[BuildImage], texts, args):
|
12 |
+
params = [
|
13 |
+
(((0, 6), (205, 0), (213, 157), (8, 171)), (117, 59)),
|
14 |
+
(((0, 6), (205, 0), (213, 157), (8, 171)), (117, 59)),
|
15 |
+
(((0, 6), (205, 0), (213, 157), (8, 171)), (117, 59)),
|
16 |
+
(((0, 7), (204, 0), (213, 157), (8, 172)), (118, 58)),
|
17 |
+
(((0, 6), (207, 0), (213, 158), (8, 173)), (119, 57)),
|
18 |
+
(((0, 6), (207, 0), (213, 158), (8, 173)), (119, 57)),
|
19 |
+
(((0, 6), (207, 0), (213, 158), (8, 173)), (119, 57)),
|
20 |
+
(((0, 6), (205, 0), (212, 157), (7, 171)), (121, 58)),
|
21 |
+
(((0, 6), (205, 0), (212, 157), (7, 171)), (121, 58)),
|
22 |
+
(((0, 6), (206, 0), (212, 158), (8, 172)), (121, 56)),
|
23 |
+
(((0, 6), (206, 0), (212, 158), (8, 172)), (121, 56)),
|
24 |
+
(((0, 6), (207, 0), (214, 157), (10, 171)), (121, 55)),
|
25 |
+
(((0, 7), (201, 0), (218, 154), (13, 169)), (121, 49)),
|
26 |
+
(((0, 7), (195, 0), (219, 147), (18, 162)), (118, 50)),
|
27 |
+
(((0, 4), (196, 0), (223, 133), (18, 143)), (114, 54)),
|
28 |
+
(((0, 0), (192, 1), (219, 121), (17, 124)), (115, 58)),
|
29 |
+
(((0, 0), (188, 5), (220, 110), (20, 107)), (112, 61)),
|
30 |
+
(((0, 0), (185, 15), (217, 86), (26, 73)), (108, 72)),
|
31 |
+
(((0, 0), (182, 19), (234, 67), (34, 44)), (102, 88)),
|
32 |
+
(((0, 0), (175, 25), (224, 55), (22, 23)), (111, 105)),
|
33 |
+
(((0, 0), (167, 29), (209, 49), (13, 14)), (121, 110)),
|
34 |
+
(((0, 0), (144, 27), (195, 46), (8, 8)), (135, 110)),
|
35 |
+
(((0, 0), (177, 36), (206, 59), (13, 18)), (129, 93)),
|
36 |
+
(((0, 0), (180, 38), (211, 69), (16, 25)), (126, 83)),
|
37 |
+
(((0, 0), (181, 28), (220, 70), (26, 39)), (119, 82)),
|
38 |
+
(((0, 0), (180, 17), (227, 65), (27, 45)), (115, 89)),
|
39 |
+
(((0, 0), (181, 15), (230, 63), (33, 46)), (110, 95)),
|
40 |
+
(((0, 0), (184, 24), (228, 73), (27, 47)), (91, 102)),
|
41 |
+
(((0, 0), (189, 8), (208, 73), (0, 66)), (83, 94)),
|
42 |
+
(((19, 0), (202, 25), (204, 85), (0, 58)), (63, 82)),
|
43 |
+
(((12, 0), (196, 18), (205, 70), (0, 50)), (70, 87)),
|
44 |
+
(((4, 0), (189, 17), (205, 74), (0, 53)), (82, 79)),
|
45 |
+
(((0, 0), (184, 18), (205, 72), (1, 51)), (91, 74)),
|
46 |
+
(((0, 0), (183, 17), (206, 69), (4, 52)), (92, 73)),
|
47 |
+
]
|
48 |
+
|
49 |
+
def maker(i: int) -> Maker:
|
50 |
+
def make(imgs: list[BuildImage]) -> BuildImage:
|
51 |
+
img = imgs[0].convert("RGBA").resize((210, 170), keep_ratio=True)
|
52 |
+
frame = BuildImage.open(img_dir / f"{i}.png")
|
53 |
+
points, pos = params[i]
|
54 |
+
frame.paste(img.perspective(points), pos, below=True)
|
55 |
+
return frame
|
56 |
+
|
57 |
+
return make
|
58 |
+
|
59 |
+
return make_gif_or_combined_gif(
|
60 |
+
images, maker, 34, 0.1, FrameAlignPolicy.extend_first
|
61 |
+
)
|
62 |
+
|
63 |
+
|
64 |
+
add_meme(
|
65 |
+
"fleshlight",
|
66 |
+
fleshlight,
|
67 |
+
min_images=1,
|
68 |
+
max_images=1,
|
69 |
+
keywords=["飞机杯"],
|
70 |
+
date_created=datetime(2023, 4, 29),
|
71 |
+
date_modified=datetime(2023, 4, 29),
|
72 |
+
)
|
meme_generator/memes/forbid/__init__.py
CHANGED
@@ -1,22 +1,32 @@
|
|
1 |
-
from
|
2 |
-
from
|
3 |
-
|
4 |
-
from meme_generator import add_meme
|
5 |
-
from meme_generator.utils import make_jpg_or_gif
|
6 |
-
from pil_utils import BuildImage
|
7 |
-
|
8 |
-
img_dir = Path(__file__).parent / "images"
|
9 |
-
|
10 |
-
|
11 |
-
def forbid(images:
|
12 |
-
frame = BuildImage.open(img_dir / "0.png")
|
13 |
-
|
14 |
-
def make(
|
15 |
-
return frame.copy().paste(
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from meme_generator.utils import make_jpg_or_gif
|
6 |
+
from pil_utils import BuildImage
|
7 |
+
|
8 |
+
img_dir = Path(__file__).parent / "images"
|
9 |
+
|
10 |
+
|
11 |
+
def forbid(images: list[BuildImage], texts, args):
|
12 |
+
frame = BuildImage.open(img_dir / "0.png")
|
13 |
+
|
14 |
+
def make(imgs: list[BuildImage]) -> BuildImage:
|
15 |
+
return frame.copy().paste(
|
16 |
+
imgs[0].convert("RGBA").resize((304, 324), keep_ratio=True),
|
17 |
+
(0, 0),
|
18 |
+
below=True,
|
19 |
+
)
|
20 |
+
|
21 |
+
return make_jpg_or_gif(images, make)
|
22 |
+
|
23 |
+
|
24 |
+
add_meme(
|
25 |
+
"forbid",
|
26 |
+
forbid,
|
27 |
+
min_images=1,
|
28 |
+
max_images=1,
|
29 |
+
keywords=["禁止", "禁"],
|
30 |
+
date_created=datetime(2023, 3, 12),
|
31 |
+
date_modified=datetime(2023, 3, 12),
|
32 |
+
)
|
meme_generator/memes/grab/__init__.py
CHANGED
@@ -1,18 +1,26 @@
|
|
1 |
-
from
|
2 |
-
from
|
3 |
-
|
4 |
-
from meme_generator import add_meme
|
5 |
-
from pil_utils import BuildImage
|
6 |
-
|
7 |
-
img_dir = Path(__file__).parent / "images"
|
8 |
-
|
9 |
-
|
10 |
-
def grab(images:
|
11 |
-
frame = BuildImage.open(img_dir / "0.png")
|
12 |
-
frame.paste(
|
13 |
-
images[0].convert("RGBA").resize((500, 500), keep_ratio=True), below=True
|
14 |
-
)
|
15 |
-
return frame.save_jpg()
|
16 |
-
|
17 |
-
|
18 |
-
add_meme(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from pil_utils import BuildImage
|
6 |
+
|
7 |
+
img_dir = Path(__file__).parent / "images"
|
8 |
+
|
9 |
+
|
10 |
+
def grab(images: list[BuildImage], texts, args):
|
11 |
+
frame = BuildImage.open(img_dir / "0.png")
|
12 |
+
frame.paste(
|
13 |
+
images[0].convert("RGBA").resize((500, 500), keep_ratio=True), below=True
|
14 |
+
)
|
15 |
+
return frame.save_jpg()
|
16 |
+
|
17 |
+
|
18 |
+
add_meme(
|
19 |
+
"grab",
|
20 |
+
grab,
|
21 |
+
min_images=1,
|
22 |
+
max_images=1,
|
23 |
+
keywords=["抓"],
|
24 |
+
date_created=datetime(2023, 3, 28),
|
25 |
+
date_modified=datetime(2023, 3, 28),
|
26 |
+
)
|
meme_generator/memes/jerk_off/__init__.py
ADDED
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from meme_generator.utils import FrameAlignPolicy, Maker, make_gif_or_combined_gif
|
6 |
+
from pil_utils import BuildImage
|
7 |
+
|
8 |
+
img_dir = Path(__file__).parent / "images"
|
9 |
+
|
10 |
+
|
11 |
+
def jerk_off(images: list[BuildImage], texts, args):
|
12 |
+
jerk_w, jerk_h = BuildImage.open(img_dir / "0.png").size
|
13 |
+
img_w, img_h = images[0].size
|
14 |
+
if img_w / img_h > jerk_w / jerk_h:
|
15 |
+
frame_h = jerk_h
|
16 |
+
frame_w = round(frame_h * img_w / img_h)
|
17 |
+
else:
|
18 |
+
frame_w = jerk_w
|
19 |
+
frame_h = round(frame_w * img_h / img_w)
|
20 |
+
|
21 |
+
def maker(i: int) -> Maker:
|
22 |
+
def make(imgs: list[BuildImage]) -> BuildImage:
|
23 |
+
frame = imgs[0].convert("RGBA").resize((frame_w, frame_h), keep_ratio=True)
|
24 |
+
jerk = BuildImage.open(img_dir / f"{i}.png")
|
25 |
+
frame.paste(jerk, ((frame_w - jerk_w) // 2, frame_h - jerk_h), alpha=True)
|
26 |
+
return frame
|
27 |
+
|
28 |
+
return make
|
29 |
+
|
30 |
+
return make_gif_or_combined_gif(images, maker, 8, 0.1, FrameAlignPolicy.extend_loop)
|
31 |
+
|
32 |
+
|
33 |
+
add_meme(
|
34 |
+
"jerk_off",
|
35 |
+
jerk_off,
|
36 |
+
min_images=1,
|
37 |
+
max_images=1,
|
38 |
+
keywords=["打胶"],
|
39 |
+
date_created=datetime(2024, 8, 4),
|
40 |
+
date_modified=datetime(2024, 8, 4),
|
41 |
+
)
|
meme_generator/memes/jerk_off/images/0.png
ADDED
Git LFS Details
|
meme_generator/memes/jerk_off/images/1.png
ADDED
Git LFS Details
|
meme_generator/memes/jerk_off/images/2.png
ADDED
Git LFS Details
|
meme_generator/memes/jerk_off/images/3.png
ADDED
Git LFS Details
|
meme_generator/memes/jerk_off/images/4.png
ADDED
Git LFS Details
|
meme_generator/memes/jerk_off/images/5.png
ADDED
Git LFS Details
|
meme_generator/memes/jerk_off/images/6.png
ADDED
Git LFS Details
|
meme_generator/memes/jerk_off/images/7.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/__init__.py
ADDED
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from meme_generator.utils import save_gif
|
6 |
+
from PIL.Image import Image as IMG
|
7 |
+
from pil_utils import BuildImage
|
8 |
+
|
9 |
+
img_dir = Path(__file__).parent / "images"
|
10 |
+
|
11 |
+
|
12 |
+
def lash(images: list[BuildImage], texts, args):
|
13 |
+
self_head = images[0].convert("RGBA").circle().resize((22, 22))
|
14 |
+
user_head = images[1].convert("RGBA").circle().resize((22, 22))
|
15 |
+
# fmt: off
|
16 |
+
self_locs = [
|
17 |
+
(84,25), (87,23), (87,27), (86,28), (62,26),
|
18 |
+
(59,28), (76,20), (85,24), (80,23),
|
19 |
+
]
|
20 |
+
user_locs = [
|
21 |
+
(12,69), (15,66), (14,67), (15,66), (17,67),
|
22 |
+
(14,63), (21,56), (15,62), (17,69)
|
23 |
+
]
|
24 |
+
# fmt: on
|
25 |
+
frames: list[IMG] = []
|
26 |
+
for i in range(9):
|
27 |
+
frame = BuildImage.open(img_dir / f"{i}.png")
|
28 |
+
frame.paste(self_head, self_locs[i], alpha=True)
|
29 |
+
frame.paste(user_head, user_locs[i], alpha=True)
|
30 |
+
frames.append(frame.image)
|
31 |
+
return save_gif(frames, 0.05)
|
32 |
+
|
33 |
+
|
34 |
+
add_meme(
|
35 |
+
"lash",
|
36 |
+
lash,
|
37 |
+
min_images=2,
|
38 |
+
max_images=2,
|
39 |
+
keywords=["鞭笞", "鞭打", "鞭挞", "鞭策"],
|
40 |
+
date_created=datetime(2024, 7, 23),
|
41 |
+
date_modified=datetime(2024, 7, 23),
|
42 |
+
)
|
meme_generator/memes/lash/images/0.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/images/1.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/images/2.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/images/3.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/images/4.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/images/5.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/images/6.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/images/7.png
ADDED
Git LFS Details
|
meme_generator/memes/lash/images/8.png
ADDED
Git LFS Details
|
meme_generator/memes/little_do/__init__.py
ADDED
@@ -0,0 +1,32 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from meme_generator.utils import save_gif
|
6 |
+
from PIL.Image import Image as IMG
|
7 |
+
from pil_utils import BuildImage
|
8 |
+
|
9 |
+
img_dir = Path(__file__).parent / "images"
|
10 |
+
|
11 |
+
|
12 |
+
def little_do(images: list[BuildImage], texts, args):
|
13 |
+
self_head = images[0].convert("RGBA").circle().resize((21, 21))
|
14 |
+
user_head = images[1].convert("RGBA").circle().resize((21, 21)).rotate(90)
|
15 |
+
frames: list[IMG] = []
|
16 |
+
for i in range(7):
|
17 |
+
frame = BuildImage.open(img_dir / f"{i}.png")
|
18 |
+
frame.paste(self_head, (40, 4), alpha=True)
|
19 |
+
frame.paste(user_head, (6, 46), alpha=True)
|
20 |
+
frames.append(frame.image)
|
21 |
+
return save_gif(frames, 0.05)
|
22 |
+
|
23 |
+
|
24 |
+
add_meme(
|
25 |
+
"little_do",
|
26 |
+
little_do,
|
27 |
+
min_images=2,
|
28 |
+
max_images=2,
|
29 |
+
keywords=["小撅", "轻撅", "滑稽撅"],
|
30 |
+
date_created=datetime(2024, 7, 12),
|
31 |
+
date_modified=datetime(2024, 7, 12),
|
32 |
+
)
|
meme_generator/memes/little_do/images/0.png
ADDED
Git LFS Details
|
meme_generator/memes/little_do/images/1.png
ADDED
Git LFS Details
|
meme_generator/memes/little_do/images/2.png
ADDED
Git LFS Details
|
meme_generator/memes/little_do/images/3.png
ADDED
Git LFS Details
|
meme_generator/memes/little_do/images/4.png
ADDED
Git LFS Details
|
meme_generator/memes/little_do/images/5.png
ADDED
Git LFS Details
|
meme_generator/memes/little_do/images/6.png
ADDED
Git LFS Details
|
meme_generator/memes/operator_generator/__init__.py
CHANGED
@@ -1,64 +1,66 @@
|
|
1 |
-
import random
|
2 |
-
from
|
3 |
-
from
|
4 |
-
|
5 |
-
from meme_generator import add_meme
|
6 |
-
from pil_utils import BuildImage
|
7 |
-
|
8 |
-
img_dir = Path(__file__).parent / "images"
|
9 |
-
|
10 |
-
|
11 |
-
def operator_generator(images:
|
12 |
-
img = images[0].convert("RGBA").circle().resize((80, 80))
|
13 |
-
name = texts[0] if texts else "你好"
|
14 |
-
|
15 |
-
frame = BuildImage.new("RGBA", (640, 640), (160, 160, 160))
|
16 |
-
frame.paste(img, (20, 10), alpha=True)
|
17 |
-
frame.draw_text(
|
18 |
-
(120, 0, 620, 100),
|
19 |
-
f"{name},你的干员信息如下:",
|
20 |
-
fontsize=80,
|
21 |
-
fill="white",
|
22 |
-
stroke_fill="black",
|
23 |
-
stroke_ratio=0.1,
|
24 |
-
weight="bold",
|
25 |
-
allow_wrap=True,
|
26 |
-
lines_align="center",
|
27 |
-
)
|
28 |
-
|
29 |
-
rrange = BuildImage.open(
|
30 |
-
img_dir / f"1范围/范围101-25-{random.randint(0, 24):04d}.jpg"
|
31 |
-
).resize_width(320)
|
32 |
-
frame.paste(rrange, (0, 100))
|
33 |
-
rcharacteristic = BuildImage.open(
|
34 |
-
img_dir / f"2特性/特性202-25-{random.randint(0, 24):04d}.jpg"
|
35 |
-
).resize_width(320)
|
36 |
-
frame.paste(rcharacteristic, (320, 100))
|
37 |
-
rvalue = BuildImage.open(
|
38 |
-
img_dir / f"3基础数值/基础数值3031-{random.randint(0, 24):04d}.jpg"
|
39 |
-
).resize_width(320)
|
40 |
-
frame.paste(rvalue, (0, 280))
|
41 |
-
rtalent = BuildImage.open(
|
42 |
-
img_dir / f"4天赋/天赋404-25-{random.randint(0, 24):04d}.jpg"
|
43 |
-
).resize_width(320)
|
44 |
-
frame.paste(rtalent, (320, 280))
|
45 |
-
rskill = BuildImage.open(
|
46 |
-
img_dir / f"5技能/技能505-25-{random.randint(0, 24):04d}.jpg"
|
47 |
-
).resize_width(320)
|
48 |
-
frame.paste(rskill, (0, 460))
|
49 |
-
rspecail = BuildImage.open(
|
50 |
-
img_dir / f"6亮点毒点/亮点毒点606-{random.randint(0, 24):04d}.jpg"
|
51 |
-
).resize_width(320)
|
52 |
-
frame.paste(rspecail, (320, 460))
|
53 |
-
|
54 |
-
return frame.save_jpg()
|
55 |
-
|
56 |
-
|
57 |
-
add_meme(
|
58 |
-
"operator_generator",
|
59 |
-
operator_generator,
|
60 |
-
min_images=1,
|
61 |
-
max_images=1,
|
62 |
-
max_texts=1,
|
63 |
-
keywords=["合成大干员"],
|
64 |
-
)
|
|
|
|
|
|
1 |
+
import random
|
2 |
+
from datetime import datetime
|
3 |
+
from pathlib import Path
|
4 |
+
|
5 |
+
from meme_generator import add_meme
|
6 |
+
from pil_utils import BuildImage
|
7 |
+
|
8 |
+
img_dir = Path(__file__).parent / "images"
|
9 |
+
|
10 |
+
|
11 |
+
def operator_generator(images: list[BuildImage], texts: list[str], args):
|
12 |
+
img = images[0].convert("RGBA").circle().resize((80, 80))
|
13 |
+
name = texts[0] if texts else "你好"
|
14 |
+
|
15 |
+
frame = BuildImage.new("RGBA", (640, 640), (160, 160, 160))
|
16 |
+
frame.paste(img, (20, 10), alpha=True)
|
17 |
+
frame.draw_text(
|
18 |
+
(120, 0, 620, 100),
|
19 |
+
f"{name},你的干员信息如下:",
|
20 |
+
fontsize=80,
|
21 |
+
fill="white",
|
22 |
+
stroke_fill="black",
|
23 |
+
stroke_ratio=0.1,
|
24 |
+
weight="bold",
|
25 |
+
allow_wrap=True,
|
26 |
+
lines_align="center",
|
27 |
+
)
|
28 |
+
|
29 |
+
rrange = BuildImage.open(
|
30 |
+
img_dir / f"1范围/范围101-25-{random.randint(0, 24):04d}.jpg"
|
31 |
+
).resize_width(320)
|
32 |
+
frame.paste(rrange, (0, 100))
|
33 |
+
rcharacteristic = BuildImage.open(
|
34 |
+
img_dir / f"2特性/特性202-25-{random.randint(0, 24):04d}.jpg"
|
35 |
+
).resize_width(320)
|
36 |
+
frame.paste(rcharacteristic, (320, 100))
|
37 |
+
rvalue = BuildImage.open(
|
38 |
+
img_dir / f"3基础数值/基础数值3031-{random.randint(0, 24):04d}.jpg"
|
39 |
+
).resize_width(320)
|
40 |
+
frame.paste(rvalue, (0, 280))
|
41 |
+
rtalent = BuildImage.open(
|
42 |
+
img_dir / f"4天赋/天赋404-25-{random.randint(0, 24):04d}.jpg"
|
43 |
+
).resize_width(320)
|
44 |
+
frame.paste(rtalent, (320, 280))
|
45 |
+
rskill = BuildImage.open(
|
46 |
+
img_dir / f"5技能/技能505-25-{random.randint(0, 24):04d}.jpg"
|
47 |
+
).resize_width(320)
|
48 |
+
frame.paste(rskill, (0, 460))
|
49 |
+
rspecail = BuildImage.open(
|
50 |
+
img_dir / f"6亮点毒点/亮点毒点606-{random.randint(0, 24):04d}.jpg"
|
51 |
+
).resize_width(320)
|
52 |
+
frame.paste(rspecail, (320, 460))
|
53 |
+
|
54 |
+
return frame.save_jpg()
|
55 |
+
|
56 |
+
|
57 |
+
add_meme(
|
58 |
+
"operator_generator",
|
59 |
+
operator_generator,
|
60 |
+
min_images=1,
|
61 |
+
max_images=1,
|
62 |
+
max_texts=1,
|
63 |
+
keywords=["合成大干员"],
|
64 |
+
date_created=datetime(2023, 3, 28),
|
65 |
+
date_modified=datetime(2023, 3, 28),
|
66 |
+
)
|
meme_generator/memes/shoot/__init__.py
ADDED
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from meme_generator.utils import FrameAlignPolicy, Maker, make_gif_or_combined_gif
|
6 |
+
from pil_utils import BuildImage
|
7 |
+
|
8 |
+
img_dir = Path(__file__).parent / "images"
|
9 |
+
|
10 |
+
|
11 |
+
def shoot(images: list[BuildImage], texts, args):
|
12 |
+
def maker(i: int) -> Maker:
|
13 |
+
def make(imgs: list[BuildImage]) -> BuildImage:
|
14 |
+
img = imgs[0].convert("RGBA").resize((160, 97), keep_ratio=True)
|
15 |
+
fluid = BuildImage.open(img_dir / f"{i}.png")
|
16 |
+
img.paste(fluid, alpha=True)
|
17 |
+
return img
|
18 |
+
|
19 |
+
return make
|
20 |
+
|
21 |
+
return make_gif_or_combined_gif(
|
22 |
+
images, maker, 13, 0.15, FrameAlignPolicy.extend_loop
|
23 |
+
)
|
24 |
+
|
25 |
+
|
26 |
+
add_meme(
|
27 |
+
"shoot",
|
28 |
+
shoot,
|
29 |
+
min_images=1,
|
30 |
+
max_images=1,
|
31 |
+
keywords=["射", "🐍"],
|
32 |
+
date_created=datetime(2024, 8, 19),
|
33 |
+
date_modified=datetime(2024, 8, 19),
|
34 |
+
)
|
meme_generator/memes/shoot/images/0.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/1.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/10.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/11.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/12.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/2.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/3.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/4.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/5.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/6.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/7.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/8.png
ADDED
Git LFS Details
|
meme_generator/memes/shoot/images/9.png
ADDED
Git LFS Details
|
meme_generator/memes/stretch/__init__.py
CHANGED
@@ -1,18 +1,26 @@
|
|
1 |
-
from
|
2 |
-
from
|
3 |
-
|
4 |
-
from meme_generator import add_meme
|
5 |
-
from pil_utils import BuildImage
|
6 |
-
|
7 |
-
img_dir = Path(__file__).parent / "images"
|
8 |
-
|
9 |
-
|
10 |
-
def stretch(images:
|
11 |
-
frame = BuildImage.open(img_dir / "0.png")
|
12 |
-
frame.paste(
|
13 |
-
images[0].convert("RGBA").resize((500, 500), keep_ratio=True), below=True
|
14 |
-
)
|
15 |
-
return frame.save_jpg()
|
16 |
-
|
17 |
-
|
18 |
-
add_meme(
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from datetime import datetime
|
2 |
+
from pathlib import Path
|
3 |
+
|
4 |
+
from meme_generator import add_meme
|
5 |
+
from pil_utils import BuildImage
|
6 |
+
|
7 |
+
img_dir = Path(__file__).parent / "images"
|
8 |
+
|
9 |
+
|
10 |
+
def stretch(images: list[BuildImage], texts, args):
|
11 |
+
frame = BuildImage.open(img_dir / "0.png")
|
12 |
+
frame.paste(
|
13 |
+
images[0].convert("RGBA").resize((500, 500), keep_ratio=True), below=True
|
14 |
+
)
|
15 |
+
return frame.save_jpg()
|
16 |
+
|
17 |
+
|
18 |
+
add_meme(
|
19 |
+
"stretch",
|
20 |
+
stretch,
|
21 |
+
min_images=1,
|
22 |
+
max_images=1,
|
23 |
+
keywords=["双手", "伸展"],
|
24 |
+
date_created=datetime(2023, 3, 28),
|
25 |
+
date_modified=datetime(2023, 3, 28),
|
26 |
+
)
|