diff --git a/.gitattributes b/.gitattributes index 61989145f4e995b3358bdf8d18fd1248f396d577..1bdaabfc91ef6c697e9c85b35c353472899ed045 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1178,3 +1178,7 @@ meme_generator/memes_emoji/kurogames_suoming_say/images/0.png filter=lfs diff=lf meme_generator/memes_emoji/kurogames_xuanling_say/images/0.png filter=lfs diff=lfs merge=lfs -text meme_generator/memes_emoji/nailoong_snuggle/images/20.png filter=lfs diff=lfs merge=lfs -text meme_generator/memes_emoji/nailoong_snuggle/images/74.png filter=lfs diff=lfs merge=lfs -text +meme_generator/memes_emoji/ai_ace/images/0.png filter=lfs diff=lfs merge=lfs -text +meme_generator/memes_emoji/heart_shape/images/0.png filter=lfs diff=lfs merge=lfs -text +meme_generator/memes_emoji/prosperitywish/images/0.png filter=lfs diff=lfs merge=lfs -text +meme_generator/memes_tudou/nawabao/images/0.png filter=lfs diff=lfs merge=lfs -text diff --git a/meme_generator/memes_emoji/ai_ace/__init__.py b/meme_generator/memes_emoji/ai_ace/__init__.py index f99e6db17629fba03d351fc8c40fa4486a64976c..0c7a3e6505ced43f717d32575e8d914360bd3de3 100644 --- a/meme_generator/memes_emoji/ai_ace/__init__.py +++ b/meme_generator/memes_emoji/ai_ace/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def ai_ace(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -18,10 +18,10 @@ def ai_ace(images: list[BuildImage], texts: list[str], args: MemeArgsModel): text = f"不用了\n我{name}是AI高手\n正在用AI写代码中ing" try: frame.draw_text( - (35, 19, 594, 406), + (115, 83, 1104, 744), text, fill=(58, 58, 58), - max_fontsize=100, + max_fontsize=200, min_fontsize=20, lines_align="left", font_families=["FZShaoEr-M11S"], @@ -29,9 +29,9 @@ def ai_ace(images: list[BuildImage], texts: list[str], args: MemeArgsModel): except ValueError: raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: - img = imgs[0].convert("RGBA").resize((340, 340)) - return frame.copy().paste(img, (600, 77), alpha=True, below=True) - return make_jpg_or_gif(images, make) + img = imgs[0].convert("RGBA").resize((650, 650)) + return frame.copy().paste(img, (1142, 151), alpha=True, below=True) + return make_png_or_gif(images, make) add_meme( "ai_ace", ai_ace, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["AI高手","ai高手"], date_created=datetime(2025, 7, 11), - date_modified=datetime(2025, 7, 11), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/ai_ace/images/0.png b/meme_generator/memes_emoji/ai_ace/images/0.png index 40d00c4dcf15cf9f8beba1612b294a17473bfb0b..b7228f3484987c2375445954c399586e9b3fa726 100644 --- a/meme_generator/memes_emoji/ai_ace/images/0.png +++ b/meme_generator/memes_emoji/ai_ace/images/0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:fa2e6a5ad864d59fa4d8a887bd79569b5abeca0b9c2fccbd3f2c2f286bd26fc5 -size 487266 +oid sha256:1658392c3c19a799622b7cc13cf7793fcfc415ca1550d8f71d8f01910c58ae88 +size 2897988 diff --git a/meme_generator/memes_emoji/allegiance/__init__.py b/meme_generator/memes_emoji/allegiance/__init__.py index 40dc243ce605f288fb7444e14003b114a07672aa..39d36c96e2e5c1cb49448cfffcb526e2dac419fb 100644 --- a/meme_generator/memes_emoji/allegiance/__init__.py +++ b/meme_generator/memes_emoji/allegiance/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def allegiance(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def allegiance(images: list[BuildImage], texts: list[str], args: MemeArgsModel): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((436, 400)) return frame.copy().paste(img, (279, 159), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "allegiance", allegiance, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["충성","忠橙","敬礼"], date_created=datetime(2025, 8, 16), - date_modified=datetime(2025, 8, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/anyliew_struggling/__init__.py b/meme_generator/memes_emoji/anyliew_struggling/__init__.py index 5a79f896376dfeae33bf293c262031a08c220f02..d74769dafef22e06327388517062ae49f2fe94d3 100644 --- a/meme_generator/memes_emoji/anyliew_struggling/__init__.py +++ b/meme_generator/memes_emoji/anyliew_struggling/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def anyliew_struggling(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -11,7 +10,7 @@ def anyliew_struggling(images: list[BuildImage], texts: list[str], args: MemeArg img = imgs[0].convert("RGBA").circle().resize((300, 300)) img = img.rotate(25, expand=True) return frame.copy().paste(img, (275, 28), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "anyliew_struggling", anyliew_struggling, @@ -21,5 +20,5 @@ add_meme( max_texts=0, keywords=["挣扎"], date_created=datetime(2025, 5, 26), - date_modified=datetime(2025, 5, 26), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/atri_like/__init__.py b/meme_generator/memes_emoji/atri_like/__init__.py index 9c87c10bf024dbceffa3847dd9077ebac1d163f0..e06b5cb09ff09296aa5e5f244f7271cd853b44af 100644 --- a/meme_generator/memes_emoji/atri_like/__init__.py +++ b/meme_generator/memes_emoji/atri_like/__init__.py @@ -4,7 +4,7 @@ from pil_utils import BuildImage from meme_generator import add_meme from meme_generator.exception import TextOverLength from meme_generator.tags import MemeTags -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" default_text = "亚托莉喜欢这个" def atri_like(images: list[BuildImage], texts: list[str], args): @@ -24,7 +24,7 @@ def atri_like(images: list[BuildImage], texts: list[str], args): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((305, 235), keep_ratio=True) return frame.copy().paste(img, (106, 72), below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "atri_like", atri_like, @@ -36,5 +36,5 @@ add_meme( keywords=["亚托莉喜欢"], tags=MemeTags.atri, date_created=datetime(2025, 5, 25), - date_modified=datetime(2025, 5, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/baby/__init__.py b/meme_generator/memes_emoji/baby/__init__.py index 470173cc2db3ab6ee297981511a0a6ebb1d5d1b6..0f418c947affce5ed76951b95d2311e7d48e55c4 100644 --- a/meme_generator/memes_emoji/baby/__init__.py +++ b/meme_generator/memes_emoji/baby/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def baby (images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -11,7 +10,7 @@ def baby (images: list[BuildImage], texts: list[str], args: MemeArgsModel): img = imgs[0].convert("RGBA").resize((235, 235)) img = img.rotate(-8, expand=True) return frame.copy().paste(img, (140, 480), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "baby", baby, @@ -21,5 +20,5 @@ add_meme( max_texts=0, keywords=["宝宝","BB","bb","baby","Baby"], date_created=datetime(2025, 6, 11), - date_modified=datetime(2025, 6, 11), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/begged_me/__init__.py b/meme_generator/memes_emoji/begged_me/__init__.py index ed5242d9bdd31968d937c2d77d6e9e74a7f9fe74..45ebfbdb85ea0ab481fe5be93b0cda8daae7d87f 100644 --- a/meme_generator/memes_emoji/begged_me/__init__.py +++ b/meme_generator/memes_emoji/begged_me/__init__.py @@ -2,42 +2,28 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif + img_dir = Path(__file__).parent / "images" + def begged_me(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) + def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((1720, 1720)) img = img.rotate(-15, expand=True) - return frame.copy().paste(img, (125, 655), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return frame.copy().paste(img, (125, 655), alpha=True, below=True) + + return make_png_or_gif(images, make) + add_meme( "begged_me", begged_me, min_images=1, max_images=1, - max_texts=1, + min_texts=0, + max_texts=0, keywords=["求我"], date_created=datetime(2025, 3, 10), - date_modified=datetime(2025, 3, 10), -) + date_modified=datetime(2026, 10, 12), +) \ No newline at end of file diff --git a/meme_generator/memes_emoji/beloveds/__init__.py b/meme_generator/memes_emoji/beloveds/__init__.py index b8ba3c6ea3b37b807189c835b94b60d33331ad5f..8e06f1fdb0af73ef4afa15b2bbfcf205981a6fea 100644 --- a/meme_generator/memes_emoji/beloveds/__init__.py +++ b/meme_generator/memes_emoji/beloveds/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def beloveds(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def beloveds(images: list[BuildImage], texts: list[str], args: MemeArgsModel): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((330, 330)) return frame.copy().paste(img, (330, 140), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "beloveds", beloveds, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["挚爱"], date_created=datetime(2025, 5, 26), - date_modified=datetime(2025, 10, 4), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/catch/__init__.py b/meme_generator/memes_emoji/catch/__init__.py index eb8286713c917ad7cb4351d903320961f2fa57a2..22a1f282c77d39a95bb1ce005002ac971bbe94cf 100644 --- a/meme_generator/memes_emoji/catch/__init__.py +++ b/meme_generator/memes_emoji/catch/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def catch (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["抓住"], date_created=datetime(2026, 4, 17), - date_modified=datetime(2026, 4, 17), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/chillet_deer/__init__.py b/meme_generator/memes_emoji/chillet_deer/__init__.py index b9546e33f09206a2dc7ad192f51459d7a6776869..48e6058828668ff6d08541cce979f3d1923138db 100644 --- a/meme_generator/memes_emoji/chillet_deer/__init__.py +++ b/meme_generator/memes_emoji/chillet_deer/__init__.py @@ -2,23 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def chillet_deer(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((549, 463)) return frame.copy().paste(img, (202, 289), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "chillet_deer", chillet_deer, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["疾风鹿"], date_created=datetime(2025, 8, 14), - date_modified=datetime(2025, 8, 14), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/christmas_hat/__init__.py b/meme_generator/memes_emoji/christmas_hat/__init__.py index d8c67aa3a72a2824d167d538537fb252862b1dfd..5c9b75b7a7e14de5518047416e224454b226f70f 100644 --- a/meme_generator/memes_emoji/christmas_hat/__init__.py +++ b/meme_generator/memes_emoji/christmas_hat/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def christmas_hat(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["圣诞帽子","圣诞帽"], date_created=datetime(2025, 12, 6), - date_modified=datetime(2025, 12, 6), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/cleverer/__init__.py b/meme_generator/memes_emoji/cleverer/__init__.py index 8139cbb6e7edb4bbc99e01016ff1ba87ef81f39a..f957de115a08db6badc7a847a477c1f221033871 100644 --- a/meme_generator/memes_emoji/cleverer/__init__.py +++ b/meme_generator/memes_emoji/cleverer/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -59,5 +58,5 @@ add_meme( max_texts=1, keywords=["比聪明"], date_created=datetime(2025, 11, 21), - date_modified=datetime(2025, 11, 21), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/commemorate/__init__.py b/meme_generator/memes_emoji/commemorate/__init__.py index 5e9fd1d5710f1a9726255dbf31d1595c6b34cbde..89d1e6d474843b5a8fab453c5267d90f85fee65f 100644 --- a/meme_generator/memes_emoji/commemorate/__init__.py +++ b/meme_generator/memes_emoji/commemorate/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def commemorate(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -11,15 +10,15 @@ def commemorate(images: list[BuildImage], texts: list[str], args: MemeArgsModel) img = imgs[0].convert("RGBA").resize((815, 747), keep_ratio=True) img = img.convert("L").convert("RGBA") return frame.copy().paste(img, (129, 218), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "commemorate", commemorate, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["奠","寄"], date_created=datetime(2026, 1, 12), - date_modified=datetime(2026, 1, 12), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/dalia_everyone/__init__.py b/meme_generator/memes_emoji/dalia_everyone/__init__.py index 9f1185e6f2969f8036f9c8aee986262eaea024fa..630be0b6d18356d2a9954800f5dd0f8b9ff00470 100644 --- a/meme_generator/memes_emoji/dalia_everyone/__init__.py +++ b/meme_generator/memes_emoji/dalia_everyone/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def dalia_everyone(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def dalia_everyone(images: list[BuildImage], texts: list[str], args: MemeArgsMod def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((95, 95)).circle().rotate(-5, expand=True) return frame.copy().paste(img, (611, 387), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "dalia_everyone", dalia_everyone, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["所有人"], date_created=datetime(2025, 12, 1), - date_modified=datetime(2025, 12, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/deer_time/__init__.py b/meme_generator/memes_emoji/deer_time/__init__.py index 2402e0a6fd1a0f6def31f349fe62d1081825b501..9ce0e69903310be2a889fc3ee70ebd79508689e5 100644 --- a/meme_generator/memes_emoji/deer_time/__init__.py +++ b/meme_generator/memes_emoji/deer_time/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -21,5 +20,5 @@ add_meme( max_texts=0, keywords=["鹿管时间"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 9, 13), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/dinosaur_head/__init__.py b/meme_generator/memes_emoji/dinosaur_head/__init__.py index ed9309fd517859643b8953daba2fd32c3f7335f5..7e80b3bce03ae16428e822db3d8e3c4ae2009b12 100644 --- a/meme_generator/memes_emoji/dinosaur_head/__init__.py +++ b/meme_generator/memes_emoji/dinosaur_head/__init__.py @@ -2,42 +2,27 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif + img_dir = Path(__file__).parent / "images" + def dinosaur_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (27, 73, 374, 136), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) + def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((620, 620)) return frame.copy().paste(img, (215, 245), alpha=True, below=True) - return make_jpg_or_gif(images, make) + + return make_png_or_gif(images, make) + add_meme( "dinosaur_head", dinosaur_head, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["恐龙头"], date_created=datetime(2024, 7, 26), - date_modified=datetime(2024, 7, 26), -) + date_modified=datetime(2026, 10, 12), +) \ No newline at end of file diff --git a/meme_generator/memes_emoji/doro_contact/__init__.py b/meme_generator/memes_emoji/doro_contact/__init__.py index 74d22ca19dd51375375f0f2fa8e0ad49b34aef28..499e68193c47ec40322075ba989888f0d9a28afb 100644 --- a/meme_generator/memes_emoji/doro_contact/__init__.py +++ b/meme_generator/memes_emoji/doro_contact/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def doro_contact(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def doro_contact(images: list[BuildImage], texts: list[str], args: MemeArgsModel def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((108, 108)) return frame.copy().paste(img, (145, 278), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "doro_contact", doro_contact, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["交往","doro交往","Doro交往","DORO交往","桃乐丝交往"], date_created=datetime(2025, 7, 7), - date_modified=datetime(2025, 7, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/doro_dear/__init__.py b/meme_generator/memes_emoji/doro_dear/__init__.py index 6725d636501636f7ed8446c3c6ddcb726ba15dda..bee0bc3a4906dc89913b1ba62c9fcc6c555b9ace 100644 --- a/meme_generator/memes_emoji/doro_dear/__init__.py +++ b/meme_generator/memes_emoji/doro_dear/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def doro_dear(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def doro_dear(images: list[BuildImage], texts: list[str], args: MemeArgsModel): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((100, 100)) return frame.copy().paste(img, (576, 529), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "doro_dear", doro_dear, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["最爱","doro最爱","Doro最爱","DORO最爱","桃乐丝最爱"], date_created=datetime(2025, 7, 7), - date_modified=datetime(2025, 7, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/doro_group_photo/__init__.py b/meme_generator/memes_emoji/doro_group_photo/__init__.py index 8e92be0b1ce2164cfd18a6e14bda8dd11e46e9ac..49b286ffcbae62ad831b9a77a01c8e3b654fc9c3 100644 --- a/meme_generator/memes_emoji/doro_group_photo/__init__.py +++ b/meme_generator/memes_emoji/doro_group_photo/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def doro_group_photo(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["doro合影","Doro合影","桃乐丝合影"], date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/doro_orange/__init__.py b/meme_generator/memes_emoji/doro_orange/__init__.py index 830e475cc65dc3b0e2daecde7bf060ecbc548358..08952ebd97cfcbb5374d8507817a901bd3b910eb 100644 --- a/meme_generator/memes_emoji/doro_orange/__init__.py +++ b/meme_generator/memes_emoji/doro_orange/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def doro_orange(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def doro_orange(images: list[BuildImage], texts: list[str], args: MemeArgsModel) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((270, 270)) return frame.copy().paste(img, (588, 65), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "doro_orange", doro_orange, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["欧润吉","润吉","润橘","橘子","橘","🍊"], date_created=datetime(2025, 7, 7), - date_modified=datetime(2025, 7, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/doro_surrounding_photos/__init__.py b/meme_generator/memes_emoji/doro_surrounding_photos/__init__.py index 4c9db9b6889a4dd9d295ec84ba177353e1c96935..45766aa0498376cec7cf9d9627a214bf09e23155 100644 --- a/meme_generator/memes_emoji/doro_surrounding_photos/__init__.py +++ b/meme_generator/memes_emoji/doro_surrounding_photos/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def doro_surrounding_photos(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -39,7 +39,7 @@ def doro_surrounding_photos(images: list[BuildImage], texts: list[str], args: Me img3 = img.resize((100, 100)).rotate(-15, expand=True) result_frame.paste(img3, (815, 1296), alpha=True, below=True) return result_frame - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "doro_surrounding_photos", doro_surrounding_photos, @@ -49,5 +49,5 @@ add_meme( max_texts=1, keywords=["周边写真"], date_created=datetime(2025, 9, 13), - date_modified=datetime(2025, 9, 13), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/doro_work_for_you/__init__.py b/meme_generator/memes_emoji/doro_work_for_you/__init__.py index 58df77c046f6df9bdd5ac570ed1b24300a6adb49..0d4621b7b563fd74bb9f2e1094fe9268ff6bd48a 100644 --- a/meme_generator/memes_emoji/doro_work_for_you/__init__.py +++ b/meme_generator/memes_emoji/doro_work_for_you/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def doro_work_for_you(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -39,7 +39,7 @@ def doro_work_for_you(images: list[BuildImage], texts: list[str], args: MemeArgs img3 = img.resize((35, 35)).rotate(35, expand=True) result_frame.paste(img3, (60, 450), alpha=True, below=True) return result_frame - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "doro_work_for_you", doro_work_for_you, @@ -49,5 +49,5 @@ add_meme( max_texts=1, keywords=["为你打工"], date_created=datetime(2025, 9, 2), - date_modified=datetime(2025, 9, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/drumstick/__init__.py b/meme_generator/memes_emoji/drumstick/__init__.py index 4bc56a9ad6500c71ba7de18ca91d437ec5fa34ed..ce8cf6db72243c56254a1781e2f98652f40ac83f 100644 --- a/meme_generator/memes_emoji/drumstick/__init__.py +++ b/meme_generator/memes_emoji/drumstick/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -23,5 +22,5 @@ add_meme( keywords=["🍗","鸡腿"], tags=MemeTags.genshin, date_created=datetime(2025, 7, 1), - date_modified=datetime(2025, 7, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/durian/__init__.py b/meme_generator/memes_emoji/durian/__init__.py index e2115d8a165f916cede73514506b9c566160ef5c..27ffe94a705042305b1dec0b36326ba4afd70523 100644 --- a/meme_generator/memes_emoji/durian/__init__.py +++ b/meme_generator/memes_emoji/durian/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def durian(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -18,8 +17,8 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["榴莲"], date_created=datetime(2025, 5, 29), - date_modified=datetime(2025, 5, 29), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/error3b/__init__.py b/meme_generator/memes_emoji/error3b/__init__.py index 9886e8ba3e8c3e4a14be3ba68d78aacb72786f17..116236a27fe3d91c812b416585788be13f77e078 100644 --- a/meme_generator/memes_emoji/error3b/__init__.py +++ b/meme_generator/memes_emoji/error3b/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def error3b(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -22,5 +21,5 @@ add_meme( max_texts=0, keywords=["30亿error", "三十亿报错"], date_created=datetime(2026, 4, 17), - date_modified=datetime(2026, 4, 17), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/family_know/__init__.py b/meme_generator/memes_emoji/family_know/__init__.py index a966202f0ce828d143b167a78dc5a6d8a0f89b81..98c898741217e45871248980ddea7f76f5059eee 100644 --- a/meme_generator/memes_emoji/family_know/__init__.py +++ b/meme_generator/memes_emoji/family_know/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def family_know(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def family_know(images: list[BuildImage], texts: list[str], args: MemeArgsModel) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((205, 205)) return frame.copy().paste(img, (199, 937), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "family_know", family_know, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["家人们谁懂啊"], date_created=datetime(2025, 9, 9), - date_modified=datetime(2025, 9, 9), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/fireworks_head/__init__.py b/meme_generator/memes_emoji/fireworks_head/__init__.py index 7fd32b4e64df51f32b78bec86a878cce46a25d89..d450c181726cd9bce97b855515c4b4ba2b551293 100644 --- a/meme_generator/memes_emoji/fireworks_head/__init__.py +++ b/meme_generator/memes_emoji/fireworks_head/__init__.py @@ -2,42 +2,27 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif + img_dir = Path(__file__).parent / "images" + def fireworks_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) + def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((320, 320)) - return frame.copy().paste(img, (340, 165), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return frame.copy().paste(img, (340, 165), alpha=True, below=True) + + return make_png_or_gif(images, make) + add_meme( "fireworks_head", fireworks_head, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["烟花头像"], date_created=datetime(2025, 1, 28), - date_modified=datetime(2025, 1, 28), -) + date_modified=datetime(2026, 10, 12), +) \ No newline at end of file diff --git a/meme_generator/memes_emoji/gong_xi_fa_cai/__init__.py b/meme_generator/memes_emoji/gong_xi_fa_cai/__init__.py deleted file mode 100644 index 9ab1156ecc9cddee7933d214cc71e53b589d655f..0000000000000000000000000000000000000000 --- a/meme_generator/memes_emoji/gong_xi_fa_cai/__init__.py +++ /dev/null @@ -1,43 +0,0 @@ -from datetime import datetime -from pathlib import Path -from pil_utils import BuildImage -from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif -img_dir = Path(__file__).parent / "images" -def gong_xi_fa_cai(images: list[BuildImage], texts: list[str], args: MemeArgsModel): - frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (50, 20, 700, 130), - text, - max_fontsize=70, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) - def make(imgs: list[BuildImage]) -> BuildImage: - img = imgs[0].convert("RGBA").circle().resize((800, 800)) - return frame.copy().paste(img, (1035, 700), alpha=True) - return make_jpg_or_gif(images, make) -add_meme( - "gong_xi_fa_cai", - gong_xi_fa_cai, - min_images=1, - max_images=1, - min_texts=0, - max_texts=1, - keywords=["恭喜发财"], - date_created=datetime(2024, 7, 26), - date_modified=datetime(2024, 7, 26), -) diff --git a/meme_generator/memes_emoji/heart_shape/__init__.py b/meme_generator/memes_emoji/heart_shape/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..832f0256bba0471c6f3481ad227afabd516b75b4 --- /dev/null +++ b/meme_generator/memes_emoji/heart_shape/__init__.py @@ -0,0 +1,64 @@ +from datetime import datetime +from pathlib import Path + +from pil_utils import BuildImage + +from meme_generator import MemeArgsModel, add_meme +from meme_generator.utils import make_png_or_gif + +img_dir = Path(__file__).parent / "images" + +AVATAR_SLOTS: list[tuple[int, int, int, int]] = [ + (77, 710, 220, 220), # 1 + (77, 968, 220, 220), # 2 + (322, 429, 246, 246), # 3 + (599, 429, 246, 246), # 4 + (350, 710, 485, 485), # 5 + (350, 1255, 215, 215), # 6 + (620, 1255, 495, 495), # 7 + (891, 710, 220, 220), # 8 + (891, 968, 220, 220), # 9 + (891, 1793, 220, 220), # 10 + (1163, 429, 500, 500), # 11 + (1163, 968, 500, 500), # 12 + (1163, 1508, 247, 247), # 13 + (1709, 688, 244, 244), # 14 + (1709, 974, 244, 244), # 15 +] + + +def heart_shape(images: list[BuildImage], texts: list[str], args: MemeArgsModel): + frame = BuildImage.open(img_dir / "0.png") + + def make(imgs: list[BuildImage]) -> BuildImage: + result = frame.copy() + for i, (x, y, w, h) in enumerate(AVATAR_SLOTS): + img = imgs[i % len(imgs)].convert("RGBA").square().resize((w, h)) + result.paste(img, (x, y), alpha=True) + if texts: + result.draw_text( + (180, 93, 1868, 295), + texts[0], + fill=(255, 255, 255), + allow_wrap=True, + max_fontsize=300, + min_fontsize=15, + lines_align="center", + font_families=["FZKaTong-M19S"], + ) + return result + + return make_png_or_gif(images, make) + + +add_meme( + "heart_shape", + heart_shape, + min_images=1, + max_images=15, + min_texts=0, + max_texts=1, + keywords=["爱心形状"], + date_created=datetime(2026, 10, 12), + date_modified=datetime(2026, 10, 12), +) \ No newline at end of file diff --git a/meme_generator/memes_emoji/heart_shape/images/0.png b/meme_generator/memes_emoji/heart_shape/images/0.png new file mode 100644 index 0000000000000000000000000000000000000000..146805a98378df1afb8492c55706dcaea4cab97f --- /dev/null +++ b/meme_generator/memes_emoji/heart_shape/images/0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:01068af253c0adf6b5e9c5d7136aac9aaf93d72edc300cccb1b0116ed995e86c +size 1033208 diff --git a/meme_generator/memes_emoji/ice_tea_head/__init__.py b/meme_generator/memes_emoji/ice_tea_head/__init__.py index e978e6949e607d2d3890146499f58db65c702610..ef4c4ec207b40c3237a8d2e1b1a1824bcd735786 100644 --- a/meme_generator/memes_emoji/ice_tea_head/__init__.py +++ b/meme_generator/memes_emoji/ice_tea_head/__init__.py @@ -2,42 +2,27 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif + img_dir = Path(__file__).parent / "images" + def ice_tea_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) + def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((500, 500)) - return frame.copy().paste(img, (320,35), alpha=True) - return make_jpg_or_gif(images, make) + return frame.copy().paste(img, (320, 35), alpha=True) + + return make_png_or_gif(images, make) + add_meme( "ice_tea_head", ice_tea_head, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["冰红茶"], date_created=datetime(2025, 3, 25), - date_modified=datetime(2025, 3, 25), -) + date_modified=datetime(2026, 10, 12), +) \ No newline at end of file diff --git a/meme_generator/memes_emoji/ikun_basketball/__init__.py b/meme_generator/memes_emoji/ikun_basketball/__init__.py index 7af7dc92d0c6c55e705bec06f1f82b6195e96c66..1f9a8212b854c9ee061c28593a84173c88fc3ff9 100644 --- a/meme_generator/memes_emoji/ikun_basketball/__init__.py +++ b/meme_generator/memes_emoji/ikun_basketball/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def ikun_basketball(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -11,7 +10,7 @@ def ikun_basketball(images: list[BuildImage], texts: list[str], args: MemeArgsMo img = imgs[0].convert("RGBA").circle().resize((250, 250)) img = img.rotate(10, expand=True) return frame.copy().paste(img, (322, 129), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "ikun_basketball", ikun_basketball, @@ -19,5 +18,5 @@ add_meme( max_images=1, keywords=["篮球","🏀"], date_created=datetime(2025, 5, 29), - date_modified=datetime(2025, 5, 29), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/ikun_durian_head/__init__.py b/meme_generator/memes_emoji/ikun_durian_head/__init__.py index 37fb370cbc70dfab01eeb3c9d0333b06a299139d..04cb7ab8d5d318cd8c89fcbdc45732ddbd9ff5b0 100644 --- a/meme_generator/memes_emoji/ikun_durian_head/__init__.py +++ b/meme_generator/memes_emoji/ikun_durian_head/__init__.py @@ -2,42 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def ikun_durian_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((180, 180)) return frame.copy().paste(img, (62, 93), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "ikun_durian_head", ikun_durian_head, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["榴莲坤头"], date_created=datetime(2025, 3, 29), - date_modified=datetime(2025, 3, 29), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/ikun_head/__init__.py b/meme_generator/memes_emoji/ikun_head/__init__.py index 8efead842d55062374bfb8b121ace18a31b2f0fb..44dbbf7c3b886b1193e26d295299d0a6481f9a4b 100644 --- a/meme_generator/memes_emoji/ikun_head/__init__.py +++ b/meme_generator/memes_emoji/ikun_head/__init__.py @@ -2,42 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def ikun_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((220, 220)) return frame.copy().paste(img, (73, 75), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "ikun_head", ikun_head, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["小黑子"], date_created=datetime(2025, 3, 25), - date_modified=datetime(2025, 3, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/ikun_like/__init__.py b/meme_generator/memes_emoji/ikun_like/__init__.py index 98ef62ede66f5a4f1be09fd74129c279126e1cc0..e782c411e60cf281a77985a6aef902f5ee9192df 100644 --- a/meme_generator/memes_emoji/ikun_like/__init__.py +++ b/meme_generator/memes_emoji/ikun_like/__init__.py @@ -4,7 +4,7 @@ from pil_utils import BuildImage from meme_generator import add_meme from meme_generator.exception import TextOverLength from meme_generator.tags import MemeTags -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" default_text = "坤坤喜欢这个" def ikun_like(images: list[BuildImage], texts: list[str], args): @@ -24,7 +24,7 @@ def ikun_like(images: list[BuildImage], texts: list[str], args): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((305, 235), keep_ratio=True) return frame.copy().paste(img, (106, 72), below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "ikun_like", ikun_like, @@ -36,5 +36,5 @@ add_meme( keywords=["坤坤喜欢"], tags=["ikun","坤坤","真爱粉","喜欢"], date_created=datetime(2025, 5, 25), - date_modified=datetime(2025, 5, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/ikun_need_tv/__init__.py b/meme_generator/memes_emoji/ikun_need_tv/__init__.py index f139ba333c9c3fd07e34f8f3c980ea89bf8c79ca..97f6a82b2e09172968548a0706208c80611ed934 100644 --- a/meme_generator/memes_emoji/ikun_need_tv/__init__.py +++ b/meme_generator/memes_emoji/ikun_need_tv/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def ikun_need_tv(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def ikun_need_tv(images: list[BuildImage], texts: list[str], args: MemeArgsModel def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((518, 488)) return frame.copy().paste(img, (614, 118), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "ikun_need_tv", ikun_need_tv, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["坤坤想要"], date_created=datetime(2025, 9, 4), - date_modified=datetime(2025, 9, 4), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/ikun_why_are_you/__init__.py b/meme_generator/memes_emoji/ikun_why_are_you/__init__.py index 51e7422df8e54a113a950e012a87ece2c3593efc..d0c949455ea3c8d9dadc59f13db606aa54c493de 100644 --- a/meme_generator/memes_emoji/ikun_why_are_you/__init__.py +++ b/meme_generator/memes_emoji/ikun_why_are_you/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_jpg_or_gif img_dir = Path(__file__).parent / "images" def ikun_why_are_you(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -18,8 +17,8 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["你干嘛","你干吗"], date_created=datetime(2024, 7, 26), - date_modified=datetime(2024, 7, 26), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/izumi_sagiri_painting/__init__.py b/meme_generator/memes_emoji/izumi_sagiri_painting/__init__.py index 89195d32f73dd8201ed44c80069b21e9fc09d51d..8a9937b2eba18c3bb7ba1aa33d0dea977c3cc5ad 100644 --- a/meme_generator/memes_emoji/izumi_sagiri_painting/__init__.py +++ b/meme_generator/memes_emoji/izumi_sagiri_painting/__init__.py @@ -2,15 +2,14 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def izumi_sagiri_painting (images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((1270, 730)).rotate(-10, expand=True) return frame.copy().paste(img, (350, 1423), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "izumi_sagiri_painting", izumi_sagiri_painting , @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["和泉纱雾画画"], date_created=datetime(2025, 9, 21), - date_modified=datetime(2025, 9, 21), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/jd_delivery_person/__init__.py b/meme_generator/memes_emoji/jd_delivery_person/__init__.py index ac451677ea83bc59f07b17676e873016837478b0..fc1e869726242a35d120ad34c5710ba15db5577b 100644 --- a/meme_generator/memes_emoji/jd_delivery_person/__init__.py +++ b/meme_generator/memes_emoji/jd_delivery_person/__init__.py @@ -4,7 +4,7 @@ from pil_utils import BuildImage from PIL import ImageEnhance from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def jd_delivery_person(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -39,7 +39,7 @@ def jd_delivery_person(images: list[BuildImage], texts: list[str], args: MemeArg img = BuildImage(img_darkened) img = img.rotate(-20, expand=True) return frame.copy().paste(img, (420, 1000), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "jd_delivery_person", jd_delivery_person, @@ -49,5 +49,5 @@ add_meme( max_texts=1, keywords=["京东外卖骑手","京东外卖工牌"], date_created=datetime(2025, 3, 24), - date_modified=datetime(2025, 9, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/jd_takeout/__init__.py b/meme_generator/memes_emoji/jd_takeout/__init__.py index 117a50324bb302581070f12837100d7604ad370c..f29240a74e722ab27294ea5689cfcd574d94c745 100644 --- a/meme_generator/memes_emoji/jd_takeout/__init__.py +++ b/meme_generator/memes_emoji/jd_takeout/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def jd_takeout(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -11,7 +10,7 @@ def jd_takeout(images: list[BuildImage], texts: list[str], args: MemeArgsModel): img = imgs[0].convert("RGBA").circle().resize((230, 230)) img = img.rotate(10, expand=True) return frame.copy().paste(img, (625, 5), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "jd_takeout", jd_takeout, @@ -19,5 +18,5 @@ add_meme( max_images=1, keywords=["京东外卖"], date_created=datetime(2025, 5, 29), - date_modified=datetime(2025, 5, 29), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kfc/__init__.py b/meme_generator/memes_emoji/kfc/__init__.py index a7d626d428eba663cf74ff33cd487ca507a32a8e..c1d627f1351426d127d8d6dd4e658ade6b34990f 100644 --- a/meme_generator/memes_emoji/kfc/__init__.py +++ b/meme_generator/memes_emoji/kfc/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def kfc(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -21,5 +20,5 @@ add_meme( max_texts=0, keywords=["kfc","KFC","肯德基"], date_created=datetime(2025, 5, 29), - date_modified=datetime(2025, 5, 29), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kfc_thursday/__init__.py b/meme_generator/memes_emoji/kfc_thursday/__init__.py index b1b282926bf9a5c94134908d47200fbc0e5ab145..0bcf58d9bb2fab036b024e2c90f5e786e5c9996a 100644 --- a/meme_generator/memes_emoji/kfc_thursday/__init__.py +++ b/meme_generator/memes_emoji/kfc_thursday/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_jpg_or_gif img_dir = Path(__file__).parent / "images" def kfc_thursday(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -18,5 +17,5 @@ add_meme( max_images=1, keywords=["星期四","疯狂星期四"], date_created=datetime(2025, 5, 29), - date_modified=datetime(2025, 5, 29), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_aemeath/__init__.py b/meme_generator/memes_emoji/kurogames_aemeath/__init__.py index 90b281c3d87d27bf12aaa9a2c634e92c4e360ef6..ee5b6268e0c0ecf9acb4357e61b51976aa93f661 100644 --- a/meme_generator/memes_emoji/kurogames_aemeath/__init__.py +++ b/meme_generator/memes_emoji/kurogames_aemeath/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,9 +17,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["爱弥斯"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 7), - date_modified=datetime(2026, 2, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_aemeath_holding/__init__.py b/meme_generator/memes_emoji/kurogames_aemeath_holding/__init__.py index 470b707a385fa196f535ae49b5e266d6162a9578..00126621e72bb1b514986cbb15f50fe40e619083 100644 --- a/meme_generator/memes_emoji/kurogames_aemeath_holding/__init__.py +++ b/meme_generator/memes_emoji/kurogames_aemeath_holding/__init__.py @@ -4,6 +4,7 @@ from PIL.Image import Image as IMG from pil_utils import BuildImage from meme_generator import add_meme from meme_generator.utils import save_gif +from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_aemeath_holding(images: list[BuildImage], texts, args): img = images[0].convert("RGBA") @@ -22,6 +23,7 @@ add_meme( min_images=1, max_images=1, keywords=["爱弥斯捧"], + tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 24), - date_modified=datetime(2026, 2, 24), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_brqd/__init__.py b/meme_generator/memes_emoji/kurogames_brqd/__init__.py index 50260e2f142594b76baea4c565263f752b89f1f0..eedef5e904f321f0f235c17f18c43cbc34abaf51 100644 --- a/meme_generator/memes_emoji/kurogames_brqd/__init__.py +++ b/meme_generator/memes_emoji/kurogames_brqd/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["百日签到"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_camellya_photo/__init__.py b/meme_generator/memes_emoji/kurogames_camellya_photo/__init__.py index abe37e69f121effb5d1795ace47e6f2fc58e220c..b3d445593414d3397dffc8bae33cdb94bb2487f7 100644 --- a/meme_generator/memes_emoji/kurogames_camellya_photo/__init__.py +++ b/meme_generator/memes_emoji/kurogames_camellya_photo/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_camellya_photo(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -12,7 +11,7 @@ def kurogames_camellya_photo(images: list[BuildImage], texts: list[str], args: M img = imgs[0].convert("RGBA").resize((345, 310)) img = img.rotate(-5, expand=True) return frame.copy().paste(img, (170, 500), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_camellya_photo", kurogames_camellya_photo, @@ -23,5 +22,5 @@ add_meme( keywords=["大傻椿照片","傻椿照片"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 7, 4), - date_modified=datetime(2025, 7, 4), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_camellya_red_hug/__init__.py b/meme_generator/memes_emoji/kurogames_camellya_red_hug/__init__.py index 4bba8a30d567255a6d8edd928c2e14c1d525338a..171801566a8eb6667cc7f9688d6b59c49ab1b72b 100644 --- a/meme_generator/memes_emoji/kurogames_camellya_red_hug/__init__.py +++ b/meme_generator/memes_emoji/kurogames_camellya_red_hug/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_camellya_red_hug(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -11,16 +10,16 @@ def kurogames_camellya_red_hug(images: list[BuildImage], texts: list[str], args: def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((428, 428)) return frame.copy().paste(img, (399, 0), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_camellya_red_hug", kurogames_camellya_red_hug, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["红椿抱"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 12, 19), - date_modified=datetime(2025, 12, 19), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_carlotta_play/__init__.py b/meme_generator/memes_emoji/kurogames_carlotta_play/__init__.py index b0f47f66625b114070ab0f4e44c14a99202262a3..f68c4efdeeaf4ed25dbe9e907e9799d601abb66e 100644 --- a/meme_generator/memes_emoji/kurogames_carlotta_play/__init__.py +++ b/meme_generator/memes_emoji/kurogames_carlotta_play/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_carlotta_play(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def kurogames_carlotta_play(images: list[BuildImage], texts: list[str], args: Me def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((290, 340)).rotate(-60, expand=True) return frame.copy().paste(img, (1090, 920), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_carlotta_play", kurogames_carlotta_play, @@ -43,5 +43,5 @@ add_meme( keywords=["一边玩去吧","一边玩去"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 10, 11), - date_modified=datetime(2025, 10, 11), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_cartethyia/__init__.py b/meme_generator/memes_emoji/kurogames_cartethyia/__init__.py index 5009e9a0851e0f53e64bc4f4e3e7173680bff5cd..81c58558093af8cfcc02197ff21e75d3db24c309 100644 --- a/meme_generator/memes_emoji/kurogames_cartethyia/__init__.py +++ b/meme_generator/memes_emoji/kurogames_cartethyia/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["卡提希娅","卡提"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_cartethyia_feetup/__init__.py b/meme_generator/memes_emoji/kurogames_cartethyia_feetup/__init__.py index a0abd9cf9a3a2fceef4822bf26e10870f6188534..d5b283806e4b5b2dd334e5d8548e80dfa920a1fa 100644 --- a/meme_generator/memes_emoji/kurogames_cartethyia_feetup/__init__.py +++ b/meme_generator/memes_emoji/kurogames_cartethyia_feetup/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_cartethyia_feetup(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -12,16 +11,16 @@ def kurogames_cartethyia_feetup(images: list[BuildImage], texts: list[str], args img = imgs[0].convert("RGBA").resize((120, 120)) img = img.rotate(15, expand=True) return frame.copy().paste(img, (395, 130), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_cartethyia_feetup", kurogames_cartethyia_feetup, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["卡提希娅抬脚","卡提抬脚"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 8, 12), - date_modified=datetime(2025, 8, 12), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_changli_finger/__init__.py b/meme_generator/memes_emoji/kurogames_changli_finger/__init__.py index b29bb3d865abb3c34d739813c32d8ebac7ddf5f4..912ed58a030a77448d503dc3ab45fcd9ffca915b 100644 --- a/meme_generator/memes_emoji/kurogames_changli_finger/__init__.py +++ b/meme_generator/memes_emoji/kurogames_changli_finger/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_changli_finger(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -11,16 +10,16 @@ def kurogames_changli_finger(images: list[BuildImage], texts: list[str], args: M def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((100, 100)) return frame.copy().paste(img, (243, 103), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_changli_finger", kurogames_changli_finger, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["长离指"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 5, 10), - date_modified=datetime(2025, 5, 10), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_changli_love/__init__.py b/meme_generator/memes_emoji/kurogames_changli_love/__init__.py index ffca4af93926a7e9dbe5c4dc49c7653e88a7bfe7..45476a7215c0fdeae85a9b1d4cb1228e236aa367 100644 --- a/meme_generator/memes_emoji/kurogames_changli_love/__init__.py +++ b/meme_generator/memes_emoji/kurogames_changli_love/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["长离爱心"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 8, 24), - date_modified=datetime(2026, 8, 24), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_chisa_creative_pioneer/__init__.py b/meme_generator/memes_emoji/kurogames_chisa_creative_pioneer/__init__.py index 61b83357eb68c3e6c51df5d7e03a564cb7fd6ff5..e353f50931cffa2036c2913ef8d0f5602a0bf117 100644 --- a/meme_generator/memes_emoji/kurogames_chisa_creative_pioneer/__init__.py +++ b/meme_generator/memes_emoji/kurogames_chisa_creative_pioneer/__init__.py @@ -4,6 +4,7 @@ from PIL.Image import Image as IMG from pil_utils import BuildImage from meme_generator import add_meme from meme_generator.utils import save_gif +from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_chisa_creative_pioneer(images: list[BuildImage], texts, args): user_head = images[0].resize((164, 164)).convert("RGBA").circle() @@ -23,6 +24,7 @@ add_meme( min_images=1, max_images=1, keywords=["创作先锋"], + tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_chisa_raise/__init__.py b/meme_generator/memes_emoji/kurogames_chisa_raise/__init__.py index 72449a5af733acebcd58d98e29b0718bd6f934e9..56a3f5e37105a9583c79408a3fc61a11d22ed1ee 100644 --- a/meme_generator/memes_emoji/kurogames_chisa_raise/__init__.py +++ b/meme_generator/memes_emoji/kurogames_chisa_raise/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["千咲举"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_chouyuan/__init__.py b/meme_generator/memes_emoji/kurogames_chouyuan/__init__.py index 5f44169825e74f6951f1f547f83a6f118978d930..6b47b08f75aaf26fcaabf4642d8b0166645d2806 100644 --- a/meme_generator/memes_emoji/kurogames_chouyuan/__init__.py +++ b/meme_generator/memes_emoji/kurogames_chouyuan/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["仇远"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_ddd/__init__.py b/meme_generator/memes_emoji/kurogames_ddd/__init__.py index 229c79ccc4e842f6131c20d49b22863af288e021..7eefa173e8e1ea4971d28fef2b994faa05b00fef 100644 --- a/meme_generator/memes_emoji/kurogames_ddd/__init__.py +++ b/meme_generator/memes_emoji/kurogames_ddd/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["叮咚咚"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_galbrena/__init__.py b/meme_generator/memes_emoji/kurogames_galbrena/__init__.py index b4fc7caee4dbf2467d3edfba2c12cddd037352fc..751385517d87a34b020fd73c5ec0e05c3bc1d223 100644 --- a/meme_generator/memes_emoji/kurogames_galbrena/__init__.py +++ b/meme_generator/memes_emoji/kurogames_galbrena/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,9 +17,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["嘉贝莉娜"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 4, 8), - date_modified=datetime(2026, 4, 8), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_good_night/__init__.py b/meme_generator/memes_emoji/kurogames_good_night/__init__.py index fd49586835a13dd4476f33d8ef0013ca0520937c..3b144e37cfbd2205054f9aac4c30bb57f5ed56eb 100644 --- a/meme_generator/memes_emoji/kurogames_good_night/__init__.py +++ b/meme_generator/memes_emoji/kurogames_good_night/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -23,5 +22,5 @@ add_meme( keywords=["晚安"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 7, 1), - date_modified=datetime(2025, 7, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_iuno_raise/__init__.py b/meme_generator/memes_emoji/kurogames_iuno_raise/__init__.py index eb1bbb4e0e7b28331ec038f4ff78dc5fc4f9196c..86e4cbd38e2658d8107e38ed9f10f8db0f4b89b4 100644 --- a/meme_generator/memes_emoji/kurogames_iuno_raise/__init__.py +++ b/meme_generator/memes_emoji/kurogames_iuno_raise/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["尤诺举"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_kkc/__init__.py b/meme_generator/memes_emoji/kurogames_kkc/__init__.py index 800f379690d93dcdbd99df4bfaf3844735ea7b4a..189fdfe5b152417fd2e8dfed69f19731d8cd7cd0 100644 --- a/meme_generator/memes_emoji/kurogames_kkc/__init__.py +++ b/meme_generator/memes_emoji/kurogames_kkc/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["库库创"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_lantern_festival/__init__.py b/meme_generator/memes_emoji/kurogames_lantern_festival/__init__.py index 383229e0ccd2d592e179e71f5489c3488b19c277..5edc2207b044d3af51c945a1f4322896d90a4b33 100644 --- a/meme_generator/memes_emoji/kurogames_lantern_festival/__init__.py +++ b/meme_generator/memes_emoji/kurogames_lantern_festival/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,9 +17,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["元宵"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 4, 8), - date_modified=datetime(2026, 4, 8), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_lupa_photo/__init__.py b/meme_generator/memes_emoji/kurogames_lupa_photo/__init__.py index 10ce83f4e178905606e91277be40cd76d3370664..917c5f70577d2ff005933a2226e76630d41087f0 100644 --- a/meme_generator/memes_emoji/kurogames_lupa_photo/__init__.py +++ b/meme_generator/memes_emoji/kurogames_lupa_photo/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_lupa_photo(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -12,7 +11,7 @@ def kurogames_lupa_photo(images: list[BuildImage], texts: list[str], args: MemeA img = imgs[0].convert("RGBA").resize((630, 410)) img = img.rotate(-5, expand=True) return frame.copy().paste(img, (435, 680), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_lupa_photo", kurogames_lupa_photo, @@ -23,5 +22,5 @@ add_meme( keywords=["露帕照片"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 7, 4), - date_modified=datetime(2025, 7, 4), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_mornye/__init__.py b/meme_generator/memes_emoji/kurogames_mornye/__init__.py index 7bd6a289cd69f9a7685e29085e9fc17d1f7c3f91..bb6653cdae7081a8cbb22a1aacc6f45c4116ad06 100644 --- a/meme_generator/memes_emoji/kurogames_mornye/__init__.py +++ b/meme_generator/memes_emoji/kurogames_mornye/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,9 +17,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["莫宁"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 7), - date_modified=datetime(2026, 2, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_mornye_raise/__init__.py b/meme_generator/memes_emoji/kurogames_mornye_raise/__init__.py index 194fd50d1ac046d6a1d7dd2241ad68817c5fae14..b2f86d7c57e0b56be40cc9ca160d5783120e6aac 100644 --- a/meme_generator/memes_emoji/kurogames_mornye_raise/__init__.py +++ b/meme_generator/memes_emoji/kurogames_mornye_raise/__init__.py @@ -33,6 +33,7 @@ add_meme( min_images=1, max_images=1, keywords=["莫宁举"], + tags=MemeTags.wuthering_waves, date_created=datetime(2026, 1, 20), - date_modified=datetime(2026, 1, 20), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_mp/__init__.py b/meme_generator/memes_emoji/kurogames_mp/__init__.py index 156e00bebee27617e2e48735c15163bae44e9378..d5b80cd77dbd76bc157083aa2c6f4b141c2699d0 100644 --- a/meme_generator/memes_emoji/kurogames_mp/__init__.py +++ b/meme_generator/memes_emoji/kurogames_mp/__init__.py @@ -2,45 +2,25 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_mp(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (50, 20, 700, 130), - text, - max_fontsize=70, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((130, 130)) img_rotated = img.rotate(25, expand=True) return frame.copy().paste(img_rotated, (300, 2), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_mp", kurogames_mp, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["鸣批","鸣P","鸣p","鸣潮玩家","鸣潮男"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 3, 7), - date_modified=datetime(2025, 3, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_orang/__init__.py b/meme_generator/memes_emoji/kurogames_orang/__init__.py index 2ea2647c188dd21bcdf14233fa133a43fccc97ec..0b1529ecd7d5a0aac0d692eabb39f5846291e9e1 100644 --- a/meme_generator/memes_emoji/kurogames_orang/__init__.py +++ b/meme_generator/memes_emoji/kurogames_orang/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_orang(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -12,16 +11,16 @@ def kurogames_orang(images: list[BuildImage], texts: list[str], args: MemeArgsMo img = imgs[0].convert("RGBA").resize((65, 65)) img = img.rotate(-15, expand=True) return frame.copy().paste(img, (260, 67), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_orang", kurogames_orang, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["飞廉之猩"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 8, 13), - date_modified=datetime(2025, 8, 13), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_phoebe_haha/__init__.py b/meme_generator/memes_emoji/kurogames_phoebe_haha/__init__.py index 1a4104e597da7d2ce0b6d175778f58193e3aa2ab..edd44893f7351cec0e0c33d454ca05ba280d4af5 100644 --- a/meme_generator/memes_emoji/kurogames_phoebe_haha/__init__.py +++ b/meme_generator/memes_emoji/kurogames_phoebe_haha/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_phoebe_haha(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def kurogames_phoebe_haha(images: list[BuildImage], texts: list[str], args: Meme def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((97, 82)) return frame.copy().paste(img, (87, 218), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_phoebe_haha", kurogames_phoebe_haha, @@ -43,5 +43,5 @@ add_meme( keywords=["哈哈","菲比哈哈"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 12, 1), - date_modified=datetime(2025, 12, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_phoebe_hug/__init__.py b/meme_generator/memes_emoji/kurogames_phoebe_hug/__init__.py index 59a2c7d6c2289a9bc720b56093b563e24f68d44a..57c741da530a6471bd88aa9e98f72691e8be8963 100644 --- a/meme_generator/memes_emoji/kurogames_phoebe_hug/__init__.py +++ b/meme_generator/memes_emoji/kurogames_phoebe_hug/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_phoebe_hug(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -11,7 +10,7 @@ def kurogames_phoebe_hug(images: list[BuildImage], texts: list[str], args: MemeA def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((96, 78)) return frame.copy().paste(img, (87, 218), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_phoebe_hug", kurogames_phoebe_hug, @@ -22,5 +21,5 @@ add_meme( keywords=["菲比抱"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 12, 1), - date_modified=datetime(2025, 12, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_phoebe_score_sheet/__init__.py b/meme_generator/memes_emoji/kurogames_phoebe_score_sheet/__init__.py index 4b5c4da2a9bb45e5b3fed53ec3bb8b1d17eb8c7e..b21cda6a7b9a885ff994003af147cac9adf50e4f 100644 --- a/meme_generator/memes_emoji/kurogames_phoebe_score_sheet/__init__.py +++ b/meme_generator/memes_emoji/kurogames_phoebe_score_sheet/__init__.py @@ -4,6 +4,7 @@ from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength from meme_generator.utils import make_jpg_or_gif +from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_phoebe_score_sheet(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -18,10 +19,10 @@ def kurogames_phoebe_score_sheet(images: list[BuildImage], texts: list[str], arg text = f"{name},你这个月评分为0,纯纯的饭桶!" try: frame.draw_text( - (50, 50, 740, 280), + (0, 0, 1620, 622), text, fill="black", - max_fontsize=100, + max_fontsize=200, min_fontsize=35, allow_wrap=True, lines_align="center", @@ -30,8 +31,8 @@ def kurogames_phoebe_score_sheet(images: list[BuildImage], texts: list[str], arg except ValueError: raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: - img = imgs[0].convert("RGBA").circle().resize((140, 140)) - return frame.copy().paste(img, (155, 855), alpha=True) + img = imgs[0].convert("RGBA").circle().resize((235, 235)) + return frame.copy().paste(img, (332, 1730), alpha=True) return make_jpg_or_gif(images, make) add_meme( "kurogames_phoebe_score_sheet", @@ -41,6 +42,7 @@ add_meme( min_texts=0, max_texts=1, keywords=["菲比评分表","评分表"], + tags=MemeTags.wuthering_waves, date_created=datetime(2025, 5, 24), - date_modified=datetime(2025, 5, 24), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_phoebe_score_sheet/images/0.png b/meme_generator/memes_emoji/kurogames_phoebe_score_sheet/images/0.png index 7193436978923962fb85880be60dadecd9c465d7..022f190960a85a9b8ac97b9f5635953336b69eda 100644 --- a/meme_generator/memes_emoji/kurogames_phoebe_score_sheet/images/0.png +++ b/meme_generator/memes_emoji/kurogames_phoebe_score_sheet/images/0.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:20b9a91c987599c008b67d91fc3af85f928c6ccee714dd27065499e9badb8b2b -size 476261 +oid sha256:3e2286095dd1971b2d88b1c630b23a63c6647102fcdec0b1c3b2e04175e02f18 +size 2507564 diff --git a/meme_generator/memes_emoji/kurogames_rosetta/__init__.py b/meme_generator/memes_emoji/kurogames_rosetta/__init__.py index b26261aa278680343b62fcf45268bc8f856b412e..599eb842d24f56917653f81198eee57b5cb98ac3 100644 --- a/meme_generator/memes_emoji/kurogames_rosetta/__init__.py +++ b/meme_generator/memes_emoji/kurogames_rosetta/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["罗塞塔"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_rover_cards/__init__.py b/meme_generator/memes_emoji/kurogames_rover_cards/__init__.py index b77dc813d4505525d544f20fab8201bc623820c2..93bf3d933c46a84dcff4c58b604c5fa2d026d375 100644 --- a/meme_generator/memes_emoji/kurogames_rover_cards/__init__.py +++ b/meme_generator/memes_emoji/kurogames_rover_cards/__init__.py @@ -3,7 +3,8 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif +from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_rover_cards(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -32,7 +33,7 @@ def kurogames_rover_cards(images: list[BuildImage], texts: list[str], args: Meme img = imgs[0].convert("RGBA").resize((80, 80)) img = img.rotate(30, expand=True) return frame.copy().paste(img, (417, 247), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_rover_cards", kurogames_rover_cards, @@ -41,6 +42,7 @@ add_meme( min_texts=0, max_texts=1, keywords=["荣耀之丘"], + tags=MemeTags.wuthering_waves, date_created=datetime(2025, 7, 7), - date_modified=datetime(2025, 7, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_rover_head/__init__.py b/meme_generator/memes_emoji/kurogames_rover_head/__init__.py index 9e3a599d43e4baf3beca5a169912ee2a391c3d52..d4a4a3f67a905684438e98efac44d2d419070274 100644 --- a/meme_generator/memes_emoji/kurogames_rover_head/__init__.py +++ b/meme_generator/memes_emoji/kurogames_rover_head/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -19,9 +18,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["漂泊者头像框"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 5, 25), - date_modified=datetime(2025, 5, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_rover_misslonely/__init__.py b/meme_generator/memes_emoji/kurogames_rover_misslonely/__init__.py index e51ae97c24b7bcf39b5209af98cfa23e418c38ef..8e325191e64de76c2c188405309204d1bb9f8221 100644 --- a/meme_generator/memes_emoji/kurogames_rover_misslonely/__init__.py +++ b/meme_generator/memes_emoji/kurogames_rover_misslonely/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,9 +17,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["寂寞小姐"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 4, 8), - date_modified=datetime(2026, 4, 8), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_singhalese/__init__.py b/meme_generator/memes_emoji/kurogames_singhalese/__init__.py index d62529b5286f8e43d5f06ee43b03a8b2e8248c76..e8dc123f5def94891b149a1b54520331889e35ce 100644 --- a/meme_generator/memes_emoji/kurogames_singhalese/__init__.py +++ b/meme_generator/memes_emoji/kurogames_singhalese/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["辛吉勒姆"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_songlun_dinner/__init__.py b/meme_generator/memes_emoji/kurogames_songlun_dinner/__init__.py index 5312c0ea79f8c3465e96cc1413c64ef24ba5891b..f4d320035e900f9a577b044638e76a81312b3506 100644 --- a/meme_generator/memes_emoji/kurogames_songlun_dinner/__init__.py +++ b/meme_generator/memes_emoji/kurogames_songlun_dinner/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_songlun_dinner(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def kurogames_songlun_dinner(images: list[BuildImage], texts: list[str], args: M def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((245, 245)).circle().rotate(-40, expand=True) return frame.copy().paste(img, (175, 108), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_songlun_dinner", kurogames_songlun_dinner, @@ -43,5 +43,5 @@ add_meme( keywords=["松伦晚餐","松伦哥晚餐"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 9, 2), - date_modified=datetime(2026, 7, 21), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_songlun_ridiculed/__init__.py b/meme_generator/memes_emoji/kurogames_songlun_ridiculed/__init__.py index 88010539f02e095265e8e5b734bfd11d364de518..29aefab99b96a71d9dc0041ef66b35071207755d 100644 --- a/meme_generator/memes_emoji/kurogames_songlun_ridiculed/__init__.py +++ b/meme_generator/memes_emoji/kurogames_songlun_ridiculed/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_songlun_ridiculed(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def kurogames_songlun_ridiculed(images: list[BuildImage], texts: list[str], args def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((80, 80)) return frame.copy().paste(img, (249, 106), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_songlun_ridiculed", kurogames_songlun_ridiculed, @@ -43,5 +43,5 @@ add_meme( keywords=["松伦笑"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 12, 6), - date_modified=datetime(2026, 7, 21), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_suisui/__init__.py b/meme_generator/memes_emoji/kurogames_suisui/__init__.py index da96343225d469458cdcfba12f8be8c79ab28c15..1f0b977fc4aeeca73ba3d08e102cdbcf88076458 100644 --- a/meme_generator/memes_emoji/kurogames_suisui/__init__.py +++ b/meme_generator/memes_emoji/kurogames_suisui/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,9 +17,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["穗穗"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 8, 2), - date_modified=datetime(2026, 8, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_verina_finger/__init__.py b/meme_generator/memes_emoji/kurogames_verina_finger/__init__.py index 5ca2671c089d47bfcfff9ef9b9e6092b5501e0c0..192f3beb3927eb7a24857940d0a07fd3be1935ca 100644 --- a/meme_generator/memes_emoji/kurogames_verina_finger/__init__.py +++ b/meme_generator/memes_emoji/kurogames_verina_finger/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_verina_finger(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def kurogames_verina_finger(images: list[BuildImage], texts: list[str], args: Me def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((420, 420)) return frame.copy().paste(img, (248, 555), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_verina_finger", kurogames_verina_finger, @@ -43,5 +43,5 @@ add_meme( keywords=["维里奈指","小维指"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 7, 7), - date_modified=datetime(2025, 7, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_verina_group_photo/__init__.py b/meme_generator/memes_emoji/kurogames_verina_group_photo/__init__.py index 414ae2c3922add6eb76208b4009008c20468e929..f1e0f329caa9dcadb25a3aeb7fef35d927148ec6 100644 --- a/meme_generator/memes_emoji/kurogames_verina_group_photo/__init__.py +++ b/meme_generator/memes_emoji/kurogames_verina_group_photo/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_verina_group_photo(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -11,16 +10,16 @@ def kurogames_verina_group_photo(images: list[BuildImage], texts: list[str], arg def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((225, 200)) return frame.copy().paste(img, (567, 297), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_verina_group_photo", kurogames_verina_group_photo, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["和维里奈合影","和小维合影"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 9, 2), - date_modified=datetime(2026, 7, 21), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_winter/__init__.py b/meme_generator/memes_emoji/kurogames_winter/__init__.py index 82488ec61ece2b9d5a8585c1f7f20b452946f0d1..9f72b75b1ed73c61d99b4d7715b17e852f751b83 100644 --- a/meme_generator/memes_emoji/kurogames_winter/__init__.py +++ b/meme_generator/memes_emoji/kurogames_winter/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["元谒立冬","立冬"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_xuanling/__init__.py b/meme_generator/memes_emoji/kurogames_xuanling/__init__.py index 104dabdebbcabf1d22547ef71790e6220aed3b01..411aa29b52ceaaa1f7bf31cd137ef72d5a86a23d 100644 --- a/meme_generator/memes_emoji/kurogames_xuanling/__init__.py +++ b/meme_generator/memes_emoji/kurogames_xuanling/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,9 +17,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["玄翎"], tags=MemeTags.wuthering_waves, date_created=datetime(2026, 7, 16), - date_modified=datetime(2026, 7, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_yangyang_lover/__init__.py b/meme_generator/memes_emoji/kurogames_yangyang_lover/__init__.py index 9fd9ff847a55cda125e62321a57b54cebc5e871c..b5aa70d3802f4c5449acc5686e7871925acdcd06 100644 --- a/meme_generator/memes_emoji/kurogames_yangyang_lover/__init__.py +++ b/meme_generator/memes_emoji/kurogames_yangyang_lover/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_yangyang_lover(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -31,7 +31,7 @@ def kurogames_yangyang_lover(images: list[BuildImage], texts: list[str], args: M def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((600, 600)) return frame.copy().paste(img, (426, 845), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_yangyang_lover", kurogames_yangyang_lover, @@ -42,5 +42,5 @@ add_meme( keywords=["秧秧老公"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 6, 10), - date_modified=datetime(2025, 6, 10), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/kurogames_zhezhi_draw/__init__.py b/meme_generator/memes_emoji/kurogames_zhezhi_draw/__init__.py index 8cfb7cd17cfaf264e90f0eae2edb1807775e3b6c..b5184de990313754c7a5daa67a28392fc4b7e3f6 100644 --- a/meme_generator/memes_emoji/kurogames_zhezhi_draw/__init__.py +++ b/meme_generator/memes_emoji/kurogames_zhezhi_draw/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def kurogames_zhezhi_draw(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -12,16 +11,16 @@ def kurogames_zhezhi_draw(images: list[BuildImage], texts: list[str], args: Meme img = imgs[0].convert("RGBA").resize((370, 370)) img = img.rotate(-30, expand=True) return frame.copy().paste(img, (435, 390), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "kurogames_zhezhi_draw", kurogames_zhezhi_draw, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["折枝画画","折枝绘画"], tags=MemeTags.wuthering_waves, date_created=datetime(2025, 6, 19), - date_modified=datetime(2025, 6, 19), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/louvre/__init__.py b/meme_generator/memes_emoji/louvre/__init__.py index 131f330365814dfc1d1cc106d6b152422e0cb594..601015f57766750db5fb9287dbda9222b72bc2cf 100644 --- a/meme_generator/memes_emoji/louvre/__init__.py +++ b/meme_generator/memes_emoji/louvre/__init__.py @@ -1,77 +1,42 @@ from datetime import datetime -from typing import Any, Dict -import os -import colorsys -import io -import random -import numpy as np from pathlib import Path -import sys +import re +import random -from pil_utils import BuildImage +import numpy as np +from PIL import Image, ImageFilter, ImageChops, ImageDraw +import cv2 +from pil_utils import BuildImage, Text2Image from pydantic import Field -from meme_generator import MemeArgsModel, add_meme from meme_generator import ( + MemeArgsModel, + add_meme, MemeArgsType, ParserArg, ParserOption, ) -import cv2 -from PIL import Image, ImageFilter, ImageChops, ImageOps +from meme_generator.exception import MemeFeedback from meme_generator.utils import make_png_or_gif -""" -# 🧸 致谢 itorr/one-last-image 项目 -# 🧸 致谢 su226/IdhagnBot 项目 -# 本项目参考并使用了 itorr/one-last-image 开源项目的算法和设计思路。 -# One Last Image 卢浮宫生成器是一个将赛璐珞风格动画截图或插画转换为 One Last Kiss -# 封面风格的在线生成器,支持自定义线条处理方案、Kiss风格色彩映射、铅笔调子、水印等效果。 -# -# 项目地址: https://github.com/itorr/one-last-image -# 在线演示: https://lab.magiconch.com/one-last-image/ -# -# 致谢 one-last-image 项目作者 itorr 卜卜口! -# 感谢 su226/IdhagnBot 项目 提供了代码参考 -# 感谢 Q. 提供pycairo思路 -# 依赖说明:本插件需要安装 'pycairo' 库以生成 One Last Kiss 风格的彩色渐变。 -# 安装命令:pip install pycairo -""" - -# 尝试导入cairo,如果失败则输出错误信息 -try: - import cairo - CAIRO_AVAILABLE = True -except ImportError as e: - CAIRO_AVAILABLE = False - print("\n" + "="*60) - print("错误: 缺少必要的依赖库 'pycairo'") - print("="*60) - print("原因: 无法导入cairo库,这会导致无法生成彩色渐变") - print("") - print("解决方案:") - print("1. 安装pycairo:") - print(" - 在Windows上运行: pip install pycairo") - print(" - 在macOS上运行: pip install pycairo") - print(" - 在Linux上运行: pip install pycairo") - print("") - print("2. 如果安装遇到问题,可以尝试:") - print(" pip install pycairo-win (Windows专用)") - print("") - print("3. 或者手动下载并安装:") - print(" https://pypi.org/project/pycairo/") - print("="*60) - print("") - # 重新抛出异常,使程序终止 - raise - - -# 修正后的帮助文本:7种线迹模式 + 随机选择 -help_text = "线迹模式: 0=随机选择, 1=精细, 2=一般, 3=稍粗, 4=超粗, 5=极粗, 6=浮雕, 7=线稿(彩色)" - - -# 定义参数模型 +# 致谢 itorr/one-last-image 项目 (https://github.com/itorr/one-last-image) +# 致谢 su226/IdhagnBot 项目 提供了部分代码参考 + +help_text = ( + "线迹模式: 0=随机选择, 1=精细, 2=一般, 3=稍粗, 4=超粗, 5=极粗, 6=浮雕, 7=彩色线稿" +) + + class Model(MemeArgsModel): number: int = Field(0, description=help_text) + color: int = Field(1, description="Kiss 彩色渐变: 0=关(铅笔灰度), 1=开") + shade: int = Field(1, description="调子阴影: 0=关, 1=开") + denoise: int = Field(1, description="降噪: 0=关, 1=开") + cover: int = Field(0, description="方形裁剪(专辑封面比例): 0=关, 1=开") + dark_cut: int = Field(118, description="线迹轻重 80~126") + shade_limit: int = Field(120, description="调子阈值 20~200") + light: int = Field(0, description="亮度 -100~100") + texture: float = Field(0.4, description="铅笔纹理强度 0~1") + lyric: int = Field(0, description="叠印歌词+专辑封面: 0=关, 1=开") args_type = MemeArgsType( @@ -82,6 +47,51 @@ args_type = MemeArgsType( args=[ParserArg(name="number", value="int")], help_text=help_text, ), + ParserOption( + names=["--color"], + args=[ParserArg(name="color", value="int")], + help_text="Kiss 彩色渐变 0/1", + ), + ParserOption( + names=["--shade"], + args=[ParserArg(name="shade", value="int")], + help_text="调子阴影 0/1", + ), + ParserOption( + names=["--denoise"], + args=[ParserArg(name="denoise", value="int")], + help_text="降噪 0/1", + ), + ParserOption( + names=["--cover"], + args=[ParserArg(name="cover", value="int")], + help_text="方形裁剪 0/1", + ), + ParserOption( + names=["--dark-cut"], + args=[ParserArg(name="dark_cut", value="int")], + help_text="线迹轻重 80~126", + ), + ParserOption( + names=["--shade-limit"], + args=[ParserArg(name="shade_limit", value="int")], + help_text="调子阈值 20~200", + ), + ParserOption( + names=["--light"], + args=[ParserArg(name="light", value="int")], + help_text="亮度 -100~100", + ), + ParserOption( + names=["--texture"], + args=[ParserArg(name="texture", value="float")], + help_text="铅笔纹理强度 0~1", + ), + ParserOption( + names=["--lyric"], + args=[ParserArg(name="lyric", value="int")], + help_text="叠印歌词+封面 0/1", + ), ], ) @@ -91,23 +101,22 @@ def kernel_average(size: int) -> np.ndarray: return np.full((size, size), 1 / size**2) -# 卷积核映射 -KERNELS: Dict[str, np.ndarray] = { - "精细": kernel_average(5), # 精细模式 - "一般": kernel_average(7), # 一般模式 - "稍粗": kernel_average(9), # 稍粗模式 - "超粗": kernel_average(11), # 超粗模式 - "极粗": kernel_average(13), # 极粗模式 - "浮雕": np.array([ # 浮雕模式 - [1, 1, 1], - [1, 1, -1], - [-1, -1, -1], - ]), - "线稿(彩色)": kernel_average(5), # 线稿模式(使用精细卷积核) +KERNELS: dict[str, np.ndarray] = { + "精细": kernel_average(5), + "一般": kernel_average(7), + "稍粗": kernel_average(9), + "超粗": kernel_average(11), + "极粗": kernel_average(13), + "浮雕": np.array( + [ + [1, 1, 1], + [1, 1, -1], + [-1, -1, -1], + ] + ), + "线稿(彩色)": kernel_average(5), } - -# 模式映射(1-7对应7种线迹模式) MODE_MAPPING = { 1: "精细", 2: "一般", @@ -115,54 +124,44 @@ MODE_MAPPING = { 4: "超粗", 5: "极粗", 6: "浮雕", - 7: "线稿(彩色)" + 7: "线稿(彩色)", } - -# 阴影和光参数 SHADE_LIGHT = 108 LIGHT_CUT = 128 +_IMAGE_DIR = Path(__file__).parent / "images" +_PENCIL_PATH = _IMAGE_DIR / "pencil-texture.jpg" +_COVER_PATH = _IMAGE_DIR / "One_Last_Kiss.JPG" +_LRC_PATH = _IMAGE_DIR / "one-last-kiss.lrc" -def make_gradient(width: int, height: int) -> BuildImage: - """创建Kiss色彩渐变""" - if not CAIRO_AVAILABLE: - raise ImportError("cairo库不可用,无法生成彩色渐变。请先安装pycairo库。") - - with cairo.ImageSurface(cairo.FORMAT_RGB24, width, height) as surface: - cr = cairo.Context(surface) - gradient = cairo.LinearGradient(0, 0, width, height) - - # 添加颜色停止点,创建Kiss风格渐变 - gradient.add_color_stop_rgb(0.0, 0.984, 0.729, 0.188) # 金色 - gradient.add_color_stop_rgb(0.4, 0.988, 0.447, 0.208) # 橙色 - gradient.add_color_stop_rgb(0.6, 0.988, 0.208, 0.306) # 红色 - gradient.add_color_stop_rgb(0.7, 0.812, 0.212, 0.875) # 紫色 - gradient.add_color_stop_rgb(0.8, 0.216, 0.710, 0.851) # 蓝色 - gradient.add_color_stop_rgb(1.0, 0.243, 0.714, 0.855) # 蓝绿色 - - cr.set_source(gradient) - cr.rectangle(0, 0, width, height) - cr.fill() - - file = io.BytesIO() - surface.write_to_png(file) - file.seek(0) - return BuildImage.open(file) - - -def make_grayscale_gradient(width: int, height: int) -> BuildImage: - """创建黑白渐变(用于线稿模式)""" - gradient = Image.new("RGB", (width, height)) - - for y in range(height): - for x in range(width): - # 计算渐变因子 - gradient_factor = (x + y) / (width + height) - gray_value = int(255 * (1 - gradient_factor * 0.3)) # 轻微渐变 - gradient.putpixel((x, y), (gray_value, gray_value, gray_value)) - - return BuildImage(gradient) + +def make_gradient(width: int, height: int, color: bool = True) -> Image.Image: + """创建 Kiss 风格色彩渐变(纯 numpy 实现,无需 cairo)""" + if color: + stops = [ + (0.0, (251, 186, 48)), + (0.4, (252, 114, 53)), + (0.6, (252, 53, 78)), + (0.7, (207, 54, 223)), + (0.8, (55, 181, 217)), + (1.0, (62, 182, 218)), + ] + else: + stops = [(0.0, (245, 245, 245)), (1.0, (208, 208, 208))] + + xs = np.arange(width, dtype=np.float64) + ys = np.arange(height, dtype=np.float64) + xg, yg = np.meshgrid(xs, ys) + t = (xg * width + yg * height) / (width * width + height * height) + + pos = np.array([s[0] for s in stops], dtype=np.float64) + pts = np.array([s[1] for s in stops], dtype=np.float64) + + out = np.empty((height, width, 3), dtype=np.float64) + for c in range(3): + out[:, :, c] = np.interp(t.ravel(), pos, pts[:, c]).reshape(height, width) + return Image.fromarray(out.astype(np.uint8), "RGB") def make_mask( @@ -175,119 +174,178 @@ def make_mask( enable_shade: bool = True, ) -> Image.Image: """创建图像掩膜""" - # 创建阴影 if enable_shade: shade = im.point(lambda v: 0 if v > shade_limit else 255, "L") shade = shade.filter(ImageFilter.BoxBlur(3)) shade = ImageChops.multiply(shade, ImageChops.invert(pencil)) - shade = ImageChops.multiply(shade, Image.new("L", shade.size, SHADE_LIGHT)) + shade = ImageChops.multiply( + shade, Image.new("L", shade.size, SHADE_LIGHT) + ) else: - # 禁用阴影时创建空白图层 shade = Image.new("L", im.size, 0) - - # 降噪 + if denoise: im = im.filter(ImageFilter.Kernel((3, 3), [1] * 9, 9)) - - # 卷积处理 + im_array = np.array(im) im1 = Image.fromarray(cv2.filter2D(im_array, -1, kernel)) - - # 计算差值 + im = ImageChops.subtract(im, im1, 1, 128) - - # 调整对比度 + scale = (255 - LIGHT_CUT - dark_cut) / 255 im = ImageChops.subtract(im, Image.new("L", im.size, dark_cut), scale) - - # 合并阴影 + return ImageChops.lighter(ImageChops.invert(im), shade) +_LYRIC_RE = re.compile(r"^\[(\d+):(\d+(?:\.\d+))\](.+?)(?:「(.+)」)?$") + + +def _load_lyrics(path: Path) -> list[tuple[float, str, str]]: + try: + text = path.read_text(encoding="utf-8") + except Exception: + return [] + lyrics: list[tuple[float, str, str]] = [] + for line in text.strip().splitlines(): + m = _LYRIC_RE.match(line.strip()) + if not m: + continue + mm, ss, t, cn = m.group(1), m.group(2), m.group(3), m.group(4) + lyrics.append((int(mm) * 60 + float(ss), t.strip(), cn.strip() if cn else "")) + return lyrics + + +LYRICS = _load_lyrics(_LRC_PATH) + + +def _overlay_lyric(result: BuildImage, w: int, h: int) -> BuildImage: + lines = [l for l in LYRICS if l[1]] + if not lines: + return result + _, jp, cn = random.choice(lines) + + margin = max(10, int(h * 0.02)) + jp_size = max(16, int(h * 0.045)) + cn_size = max(12, int(h * 0.03)) + jp_img = Text2Image.from_text( + jp, + jp_size, + fill=(255, 255, 255), + stroke_fill=(15, 15, 15), + stroke_width=max(1, int(jp_size * 0.06)), + ).to_image() + cn_img = ( + Text2Image.from_text( + cn, + cn_size, + fill=(235, 235, 235), + stroke_fill=(15, 15, 15), + stroke_width=max(1, int(cn_size * 0.06)), + ).to_image() + if cn + else None + ) + + canvas = result.image.convert("RGBA") + y = h - margin - jp_img.height - (cn_img.height if cn_img else 0) + x = margin + canvas.alpha_composite(jp_img, (x, y)) + if cn_img: + canvas.alpha_composite(cn_img, (x, y + jp_img.height)) + + if _COVER_PATH.exists(): + sz = max(40, int(h * 0.14)) + cover = Image.open(_COVER_PATH).convert("RGBA").resize((sz, sz)) + cx = w - sz - margin + cy = h - sz - margin + border = max(2, int(sz * 0.04)) + draw = ImageDraw.Draw(canvas) + draw.rectangle( + [cx - border, cy - border, cx + sz + border, cy + sz + border], + fill=(255, 255, 255, 255), + ) + canvas.alpha_composite(cover, (cx, cy)) + + return BuildImage(canvas.convert("RGB")) + + def louvre(images: list[BuildImage], texts: list[str], args: Model): - # 根据参数选择模式 if args.number == 0: mode_number = random.randint(1, 7) elif 1 <= args.number <= 7: mode_number = args.number else: - raise ValueError("模式编号错误,请选择 1~7 或 0(随机)") - - # 获取模式名称 + raise MemeFeedback("模式编号错误,请选择 1~7 或 0(随机)") + mode_name = MODE_MAPPING[mode_number] - - # 获取对应卷积核 kernel = KERNELS[mode_name] - - # 加载铅笔纹理 - current_dir = Path(__file__).parent - pencil_path = current_dir / 'images' / 'pencil-texture.jpg' - - if not pencil_path.exists(): - # 如果没有纹理图片,创建一个简单的纹理 - pencil = BuildImage.new("L", (100, 100), 255) + + if _PENCIL_PATH.exists(): + pencil = BuildImage.open(_PENCIL_PATH).convert("L") else: - pencil = BuildImage.open(pencil_path).convert("L") - + pencil = BuildImage.new("L", (100, 100), 255) + + dark_cut = min(126, max(80, args.dark_cut)) + shade_limit = min(200, max(20, args.shade_limit)) + light = min(100, max(-100, args.light)) + texture = min(1.0, max(0.0, args.texture)) + color_on = args.color > 0 + shade_on = args.shade > 0 + denoise_on = args.denoise > 0 + cover_on = args.cover > 0 + lyric_on = args.lyric > 0 + def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0] - - # 所有模式都使用彩色渐变,并开启阴影和纹理 - gradient = make_gradient(img.width, img.height) - enable_shade = True - texture_intensity = 0.4 - - # 分离亮度和透明度通道 + if cover_on: + w0, h0 = img.width, img.height + side = min(w0, h0) + left, top = (w0 - side) // 2, (h0 - side) // 2 + img = BuildImage(img.image.crop((left, top, left + side, top + side))) + + w, h = img.width, img.height l, a = img.convert("LA").image.split() - - # 创建白色背景 - frame = BuildImage.new("L", l.size, 255) + + if light: + la = np.asarray(l, np.float64) * (1.0 + light / 100.0) + l = Image.fromarray(np.clip(la, 0, 255).astype(np.uint8), "L") + + frame = BuildImage.new("L", (w, h), 255) frame.image.paste(l, mask=a) - - # 调整铅笔纹理大小 - resized_pencil = pencil.resize(img.size) - - # 创建掩膜 + + resized_pencil = pencil.resize((w, h)) mask = make_mask( frame.image, resized_pencil.image, - kernel=kernel, - dark_cut=118, # 线迹轻重 - shade_limit=120, # 调子阈值 - denoise=True, # 降噪 - enable_shade=enable_shade, + kernel, + dark_cut=dark_cut, + shade_limit=shade_limit, + denoise=denoise_on, + enable_shade=shade_on, ) - - # 创建最终图像 - result = BuildImage.new("RGB", l.size, (255, 255, 255)) - result.image.paste(gradient.image, (0, 0), mask=mask) - - # 添加铅笔纹理 - if texture_intensity > 0: - texture = Image.open(pencil_path).convert('L').resize((img.width, img.height)) - texture = ImageOps.invert(texture) - - alpha = int(100 * texture_intensity) - texture_layer = Image.new('RGBA', (img.width, img.height), (0, 0, 0, 0)) - - for y in range(img.height): - for x in range(img.width): - tex_val = texture.getpixel((x, y)) - if tex_val > 100: - current_color = result.image.getpixel((x, y)) - r = max(0, current_color[0] - 20) - g = max(0, current_color[1] - 20) - b = max(0, current_color[2] - 20) - texture_layer.putpixel((x, y), (r, g, b, alpha)) - - result = BuildImage(Image.alpha_composite(result.image.convert("RGBA"), texture_layer).convert("RGB")) - + + result = BuildImage.new("RGB", (w, h), (255,255,255)) + gradient = make_gradient(w, h, color_on) + result.image.paste(gradient, (0, 0), mask=mask) + + if texture > 0: + tex = np.asarray(resized_pencil.image, np.float64) + tmask = tex > 100 + base = np.asarray(result.image.convert("RGB"), np.float64) + dark = np.clip(base - 20, 0, 255) + blended = base * (1 - texture) + dark * texture + blended = np.where(tmask[..., None], blended, base) + result = BuildImage(Image.fromarray(blended.astype(np.uint8), "RGB")) + + if lyric_on: + result = _overlay_lyric(result, w, h) + return result - + return make_png_or_gif(images, make) -# 注册表情 add_meme( "louvre", louvre, @@ -298,5 +356,5 @@ add_meme( keywords=["卢浮宫"], args_type=args_type, date_created=datetime(2025, 5, 29), - date_modified=datetime(2026, 5, 26), -) \ No newline at end of file + date_modified=datetime(2026, 10, 12), +) diff --git a/meme_generator/memes_emoji/mahiro_fuck/__init__.py b/meme_generator/memes_emoji/mahiro_fuck/__init__.py index f5f263647a06d5f0ae571f1dcbcb605ace310f37..ba3534959ea10a513eba954c5ebea217832266fd 100644 --- a/meme_generator/memes_emoji/mahiro_fuck/__init__.py +++ b/meme_generator/memes_emoji/mahiro_fuck/__init__.py @@ -2,42 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def mahiro_fuck(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (50, 20, 700, 130), - text, - max_fontsize=70, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((180, 180)) return frame.copy().paste(img, (430, 40), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mahiro_fuck", mahiro_fuck, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["真寻中指","中指","🖕🏻"], date_created=datetime(2024, 7, 26), - date_modified=datetime(2024, 7, 26), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mi_monkey/__init__.py b/meme_generator/memes_emoji/mi_monkey/__init__.py index e941651d0bcff576670a5780a4faceab519add73..5bb279eabf06c604c31371e07be3078958f50578 100644 --- a/meme_generator/memes_emoji/mi_monkey/__init__.py +++ b/meme_generator/memes_emoji/mi_monkey/__init__.py @@ -2,42 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def mi_monkey(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (50, 20, 700, 130), - text, - max_fontsize=70, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((180, 180)) return frame.copy().paste(img, (500, 100), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mi_monkey", mi_monkey, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["米猴", "🐒", "🐵"], date_created=datetime(2024, 7, 26), - date_modified=datetime(2024, 7, 26), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_aino_ride/__init__.py b/meme_generator/memes_emoji/mihoyo_aino_ride/__init__.py index dcf3622c84fba0af57c3e19ec83ba7ab49b4a94a..90171006190f26ca3426cfff59906003aff86353 100644 --- a/meme_generator/memes_emoji/mihoyo_aino_ride/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_aino_ride/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_aino_ride(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -19,7 +18,7 @@ def mihoyo_aino_ride(images: list[BuildImage], texts: list[str], args: MemeArgsM img4 = imgs[0].convert("RGBA").resize((111, 125)) result.paste(img4, (133, 692), alpha=True, below=True) return result - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_aino_ride", mihoyo_aino_ride, @@ -30,5 +29,5 @@ add_meme( keywords=["爱诺骑"], tags=MemeTags.genshin, date_created=datetime(2025, 12, 2), - date_modified=datetime(2025, 12, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_amber_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_amber_frame/__init__.py index 94552c05a8cb245ac21170a88d6916180e75e326..8777584b1b0b08923f84d57a1ac43a3c9d9cbe0d 100644 --- a/meme_generator/memes_emoji/mihoyo_amber_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_amber_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["安柏相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_barbara_pegg_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_barbara_pegg_frame/__init__.py index af4308972ad27cda05ea19b5647aff8e55660b41..dfe7b1b02033101259c1ad8f37c4863fead70cbf 100644 --- a/meme_generator/memes_emoji/mihoyo_barbara_pegg_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_barbara_pegg_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["芭芭拉相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_barbatos_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_barbatos_frame/__init__.py index d749b5f181ac21af793ac76e2090a66b19cb065e..a899d557dc71ef32367b90ca72e12c55e8c0163b 100644 --- a/meme_generator/memes_emoji/mihoyo_barbatos_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_barbatos_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["巴巴托斯","风神相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_caribert_alberich_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_caribert_alberich_frame/__init__.py index 4119a6af27b46fd5a5675b841d9909473081ad26..9e13de356435d97b1bcb008a83778040a7c5826f 100644 --- a/meme_generator/memes_emoji/mihoyo_caribert_alberich_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_caribert_alberich_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["卡利贝尔相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_chasca_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_chasca_frame/__init__.py index 3f3b43e025f5d66875ae22f8c81b64eeda8dadb8..8886124ea3afac9541d0705ec923dd6f1edc06a9 100644 --- a/meme_generator/memes_emoji/mihoyo_chasca_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_chasca_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["恰斯卡相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_citlali_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_citlali_frame/__init__.py index da72e4991558b048ddf9d0c89503bbbf832b0a08..9587769af5934a35cc7f62c1bbdfe009a40e2115 100644 --- a/meme_generator/memes_emoji/mihoyo_citlali_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_citlali_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["茜特菈莉相框","奶奶相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_columbina_hug/__init__.py b/meme_generator/memes_emoji/mihoyo_columbina_hug/__init__.py index e651578d80ab898ac4c37a368621162ea5b15407..fb58cfb394df81dfbb4f7f8c4e0184d705a4364d 100644 --- a/meme_generator/memes_emoji/mihoyo_columbina_hug/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_columbina_hug/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["少女抱","哥伦比娅抱","月神抱"], tags=MemeTags.genshin, date_created=datetime(2025, 12, 2), - date_modified=datetime(2025, 12, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_columbina_jade_feet/__init__.py b/meme_generator/memes_emoji/mihoyo_columbina_jade_feet/__init__.py index a95f5d4f352c899c8e7a3aafd3dce13fc4ff736d..348872b70c1917d29ef2e36577bc2bae4967bbb1 100644 --- a/meme_generator/memes_emoji/mihoyo_columbina_jade_feet/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_columbina_jade_feet/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -23,5 +22,5 @@ add_meme( keywords=["玉足"], tags=MemeTags.genshin, date_created=datetime(2025, 9, 13), - date_modified=datetime(2025, 9, 13), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_editorial_society_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_editorial_society_frame/__init__.py index ee3301eb6aa4e93427397b20188e4cb7369a29a2..c3ec5531af0d22ee51da6be537a6dc30bca28c20 100644 --- a/meme_generator/memes_emoji/mihoyo_editorial_society_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_editorial_society_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["编辑协会相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_funina_death_penalty/__init__.py b/meme_generator/memes_emoji/mihoyo_funina_death_penalty/__init__.py index df2ac8ca93574ee87de4b115f989a496467e29ac..1ff55693ecca65686338051f4fc307d7a46fbea1 100644 --- a/meme_generator/memes_emoji/mihoyo_funina_death_penalty/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_funina_death_penalty/__init__.py @@ -2,44 +2,24 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_funina_death_penalty(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "他" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (745, 45, 1274, 171), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((280, 280)) return frame.copy().paste(img, (950, 380), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_funina_death_penalty", mihoyo_funina_death_penalty, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["死刑"], tags=MemeTags.genshin, date_created=datetime(2025, 3, 14), - date_modified=datetime(2025, 3, 14), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_funina_finger/__init__.py b/meme_generator/memes_emoji/mihoyo_funina_finger/__init__.py index 4088e0c9162f9ff756cec08a085b01477292ead2..a6f1cf8e1ab3b014374ea109fc413555fda2cdc1 100644 --- a/meme_generator/memes_emoji/mihoyo_funina_finger/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_funina_finger/__init__.py @@ -2,44 +2,24 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_funina_finger(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (50, 20, 700, 130), - text, - max_fontsize=70, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((500, 500)) return frame.copy().paste(img, (1400, 650), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_funina_finger", mihoyo_funina_finger, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["芙芙指","芙宁娜指","芙芙酱指"], tags=MemeTags.genshin, date_created=datetime(2025, 5, 25), - date_modified=datetime(2025, 5, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_funina_round_head/__init__.py b/meme_generator/memes_emoji/mihoyo_funina_round_head/__init__.py index f5c6c1271862a3446e7da9fd2c2a960282c168d7..fbe032dc3647833ae78aa9becd5436dde0c00766 100644 --- a/meme_generator/memes_emoji/mihoyo_funina_round_head/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_funina_round_head/__init__.py @@ -2,44 +2,24 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_funina_round_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((500, 500)) return frame.copy().paste(img, (68, 68), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_funina_round_head", mihoyo_funina_round_head, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["芙芙圆形头像","芙宁娜圆形头像"], tags=MemeTags.genshin, date_created=datetime(2025, 3, 29), - date_modified=datetime(2025, 3, 29), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_funina_square_head/__init__.py b/meme_generator/memes_emoji/mihoyo_funina_square_head/__init__.py index b79f60ce2d58170865047659fab7ab35b48ad4ea..783833278c1309761e2a1c2eb98343eba7ac721f 100644 --- a/meme_generator/memes_emoji/mihoyo_funina_square_head/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_funina_square_head/__init__.py @@ -2,44 +2,24 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_funina_square_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((1010, 1010)) return frame.copy().paste(img, (60, 48), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_funina_square_head", mihoyo_funina_square_head, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["芙芙方形头像","芙宁娜方形头像"], tags=MemeTags.genshin, date_created=datetime(2025, 3, 29), - date_modified=datetime(2025, 3, 29), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_gemini_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_gemini_frame/__init__.py index 2c5ff6555f5528834abeeaed21ad051e3f39a06b..81ac24ae48f166a6abec0d24743187e19d3add8d 100644 --- a/meme_generator/memes_emoji/mihoyo_gemini_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_gemini_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["双子相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_genshin_impact_op/__init__.py b/meme_generator/memes_emoji/mihoyo_genshin_impact_op/__init__.py index 5deb64ed5509f6e53489f79e7733975691879c5e..d9202b635ab71b4b670e8be257472b058556ecee 100644 --- a/meme_generator/memes_emoji/mihoyo_genshin_impact_op/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_genshin_impact_op/__init__.py @@ -2,44 +2,24 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_genshin_impact_op(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (50, 20, 700, 130), - text, - max_fontsize=70, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((180, 180)) return frame.copy().paste(img, (500, 100), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_genshin_impact_op", mihoyo_genshin_impact_op, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["OP","op", "Op","oP"], tags=MemeTags.genshin, date_created=datetime(2024, 7, 26), - date_modified=datetime(2024, 7, 26), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_genshin_impact_players/__init__.py b/meme_generator/memes_emoji/mihoyo_genshin_impact_players/__init__.py index 3ead68673da1cfe1d57b12b0e117d22a4e9d56a7..9cffdc853d767a234f1427950d35617e66c9ba0c 100644 --- a/meme_generator/memes_emoji/mihoyo_genshin_impact_players/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_genshin_impact_players/__init__.py @@ -2,35 +2,15 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_genshin_impact_players(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "他" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (745, 45, 1274, 171), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((220, 220)) return frame.copy().paste(img, (385, 120), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_genshin_impact_players", mihoyo_genshin_impact_players, @@ -41,5 +21,5 @@ add_meme( keywords=["原批","原神玩家"], date_created=datetime(2025, 3, 14), tags=MemeTags.genshin, - date_modified=datetime(2025, 3, 14), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_guoba_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_guoba_frame/__init__.py index 1a86d1f8f0f251fe13aae53588680c0b56e2ccd5..bed687d8f0178d611264ebc17ef1825d453e9b7d 100644 --- a/meme_generator/memes_emoji/mihoyo_guoba_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_guoba_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["锅巴相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_hilichurl_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_hilichurl_frame/__init__.py index 4b71f4d0129564c2e5150809d4793785ff49e1b6..46faa81425e978a6ca5bebabec7d3c29819af77c 100644 --- a/meme_generator/memes_emoji/mihoyo_hilichurl_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_hilichurl_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["丘丘人相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_hutao_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_hutao_frame/__init__.py index d4d134a3a51995342a60e4ff8604cb46ff204f43..5483d6ec8f7f49f3a45a37d78887b5c13d4569b2 100644 --- a/meme_generator/memes_emoji/mihoyo_hutao_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_hutao_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["胡桃相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_ineffa_droid/__init__.py b/meme_generator/memes_emoji/mihoyo_ineffa_droid/__init__.py index 332c72aca8dcfe10e82156acf213a61ba08f5153..29e93b7dbf63f9c7d7bcb912a04772c46ff39bd6 100644 --- a/meme_generator/memes_emoji/mihoyo_ineffa_droid/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_ineffa_droid/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_ineffa_droid (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -11,7 +10,7 @@ def mihoyo_ineffa_droid (images: list[BuildImage], texts: list[str], args: MemeA def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((165, 135)) return frame.copy().paste(img, (96, 79), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_ineffa_droid", mihoyo_ineffa_droid , @@ -22,5 +21,5 @@ add_meme( keywords=["人机"], tags=MemeTags.genshin, date_created=datetime(2025, 8, 13), - date_modified=datetime(2025, 8, 13), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_kaveh_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_kaveh_frame/__init__.py index 06c64dca4db2e8370aa7a1bad6eeeaabb9d08a96..ad297cb729cbaac908149a2c9cfcaab19572213e 100644 --- a/meme_generator/memes_emoji/mihoyo_kaveh_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_kaveh_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["卡维相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_keqing_pointo/__init__.py b/meme_generator/memes_emoji/mihoyo_keqing_pointo/__init__.py index 3262de1e2941af7910b0d78dc4cfc0e98847bdd6..4867f492b33709dcd625262d004daa7a5db0e22f 100644 --- a/meme_generator/memes_emoji/mihoyo_keqing_pointo/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_keqing_pointo/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_keqing_pointo(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def mihoyo_keqing_pointo(images: list[BuildImage], texts: list[str], args: MemeA def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((230, 290)) return frame.copy().paste(img, (26, 171), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_keqing_pointo", mihoyo_keqing_pointo, @@ -43,5 +43,5 @@ add_meme( keywords=["刻晴指"], tags=MemeTags.genshin, date_created=datetime(2025, 9, 27), - date_modified=datetime(2025, 9, 27), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_klee_duduke_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_klee_duduke_frame/__init__.py index 9aa3f6881b0ea3ce420c293fc62cd707336b40d8..381a7ceadf8b84c6e5aef162fcfe7bcfb17a2079 100644 --- a/meme_generator/memes_emoji/mihoyo_klee_duduke_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_klee_duduke_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["可莉嘟嘟可相框","嘟嘟可"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_klee_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_klee_frame/__init__.py index 802b8b97f597b5cc6d5225a0aee9d0e0e44d9cbf..f3fe7c4c3b008ffb172c5eb3a18856bbe0648b29 100644 --- a/meme_generator/memes_emoji/mihoyo_klee_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_klee_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["可莉相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_klee_hat_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_klee_hat_frame/__init__.py index 995518d1226f2c8b8428a30c30c04f3696120f93..57a5dc552c6697e14a8d07c3052cfe08f1f9d4d0 100644 --- a/meme_generator/memes_emoji/mihoyo_klee_hat_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_klee_hat_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["可莉帽子相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_kujou_sara_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_kujou_sara_frame/__init__.py index dbe769d4d5d26475a17f0cfa5d4b05f2186a43c8..f5cb6488a27cac98de64c915236ab625db77f471 100644 --- a/meme_generator/memes_emoji/mihoyo_kujou_sara_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_kujou_sara_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["九条裟罗相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_kuki_shinobu_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_kuki_shinobu_frame/__init__.py index 18eb920ea0ff1beab8e41c137f1597fffb2010d6..1b3c4ea102aca86fd40731f16c1493695f3a2e54 100644 --- a/meme_generator/memes_emoji/mihoyo_kuki_shinobu_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_kuki_shinobu_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["久岐忍相框","阿忍相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_kuki_shinobu_who/__init__.py b/meme_generator/memes_emoji/mihoyo_kuki_shinobu_who/__init__.py index 45cca132e749bb94162f940ea45a4a14b394bae3..22ba09b99219a3794de3d1176491e775dddbd72a 100644 --- a/meme_generator/memes_emoji/mihoyo_kuki_shinobu_who/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_kuki_shinobu_who/__init__.py @@ -3,7 +3,8 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif +from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_kuki_shinobu_who(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +32,7 @@ def mihoyo_kuki_shinobu_who(images: list[BuildImage], texts: list[str], args: Me def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((210, 300)).rotate(-11, expand=True) return frame.copy().paste(img, (932, 310), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_kuki_shinobu_who", mihoyo_kuki_shinobu_who, @@ -40,6 +41,7 @@ add_meme( min_texts=0, max_texts=1, keywords=["此人是谁","是谁","是谁?","是谁?"], + tags=MemeTags.genshin, date_created=datetime(2025, 9, 30), - date_modified=datetime(2025, 9, 30), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_lce_slime_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_lce_slime_frame/__init__.py index b799fec604a1c15b9c346ee7a4423784710ffb9a..bf91449617a5833fa7d6d1414d531c8f2d478a3a 100644 --- a/meme_generator/memes_emoji/mihoyo_lce_slime_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_lce_slime_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["冰史莱姆相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_liuwei_dinner/__init__.py b/meme_generator/memes_emoji/mihoyo_liuwei_dinner/__init__.py index 93d8533850f3f7dc3293801385cafa115674677f..8602625e9f37baa4812cb61fcd359870772514ed 100644 --- a/meme_generator/memes_emoji/mihoyo_liuwei_dinner/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_liuwei_dinner/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_liuwei_dinner(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def mihoyo_liuwei_dinner(images: list[BuildImage], texts: list[str], args: MemeA def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((275, 275)).circle().rotate(-15, expand=True) return frame.copy().paste(img, (240, 11), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_liuwei_dinner", mihoyo_liuwei_dinner, @@ -43,5 +43,5 @@ add_meme( keywords=["刘伟晚餐","共进晚餐","大伟哥晚餐"], tags=MemeTags.genshin, date_created=datetime(2025, 9, 2), - date_modified=datetime(2025, 9, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_mem_hat/__init__.py b/meme_generator/memes_emoji/mihoyo_mem_hat/__init__.py index baa26a617093fc235cd25c2b03ff9579d7ab89b0..fe350001508f9b62ee7f2404ceb322d811733cb4 100644 --- a/meme_generator/memes_emoji/mihoyo_mem_hat/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_mem_hat/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["迷迷帽","迷迷帽子"], tags=MemeTags.star_rail, date_created=datetime(2026, 4, 17), - date_modified=datetime(2026, 4, 17), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_navia_caspar_persuade/__init__.py b/meme_generator/memes_emoji/mihoyo_navia_caspar_persuade/__init__.py index 68f9dfabd2a47134bec0077aa76af9aa95a9e677..034b4ff69e4bdc309202a995e6135434304c1e2e 100644 --- a/meme_generator/memes_emoji/mihoyo_navia_caspar_persuade/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_navia_caspar_persuade/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_navia_caspar_persuade(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def mihoyo_navia_caspar_persuade(images: list[BuildImage], texts: list[str], arg def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((350, 350)) return frame.copy().paste(img, (141, 85), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_navia_caspar_persuade", mihoyo_navia_caspar_persuade, @@ -43,5 +43,5 @@ add_meme( keywords=["说服"], tags=MemeTags.genshin, date_created=datetime(2025, 7, 1), - date_modified=datetime(2025, 7, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_outlander_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_outlander_frame/__init__.py index 5226a26bb992ae754961afad207ba9d62ec249ba..e28ecb06a1dac6d6994300eb79da9c79d46effd9 100644 --- a/meme_generator/memes_emoji/mihoyo_outlander_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_outlander_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["异乡人相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_paimon_crown/__init__.py b/meme_generator/memes_emoji/mihoyo_paimon_crown/__init__.py index 07ccea3a30a26dbf256e53d96ef28541e4c5ec16..01d90a951776ece9eef6b0dd2aada5608e802508 100644 --- a/meme_generator/memes_emoji/mihoyo_paimon_crown/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_paimon_crown/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["派蒙王冠","派蒙皇冠","👑"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_paimon_emergency_food_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_paimon_emergency_food_frame/__init__.py index 08a9683f9f8392103ad28123cf5c8559cf92ab46..edb898f37b9f3e231ab6423e10b87b5d54c0666d 100644 --- a/meme_generator/memes_emoji/mihoyo_paimon_emergency_food_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_paimon_emergency_food_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["应急食品相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_paimon_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_paimon_frame/__init__.py index cc3092acb5f979d8d695b67e8089fdf6135552e9..7ef0ee238a77e34750f847cd98050f6c6db551a3 100644 --- a/meme_generator/memes_emoji/mihoyo_paimon_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_paimon_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["派蒙相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_player/__init__.py b/meme_generator/memes_emoji/mihoyo_player/__init__.py index fc364302f06830e451091ddf178fbc9f560d488f..31f759ca804ace972403f1e413a29b4b318b9519 100644 --- a/meme_generator/memes_emoji/mihoyo_player/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_player/__init__.py @@ -22,9 +22,9 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["二游玩家"], tags=MemeTags.mihoyo, date_created=datetime(2026, 9, 9), - date_modified=datetime(2026, 9, 9), + date_modified=datetime(2026, 10, 12), ) \ No newline at end of file diff --git a/meme_generator/memes_emoji/mihoyo_senior_phone/__init__.py b/meme_generator/memes_emoji/mihoyo_senior_phone/__init__.py index 4958234ab2b19d2588b9933ac8705345ea7973b5..33cda4c974aa6956661c8015ca92f0e60745b024 100644 --- a/meme_generator/memes_emoji/mihoyo_senior_phone/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_senior_phone/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_senior_phone (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -11,7 +10,7 @@ def mihoyo_senior_phone (images: list[BuildImage], texts: list[str], args: MemeA def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((140, 210)) return frame.copy().paste(img, (533, 495), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_senior_phone", mihoyo_senior_phone , @@ -22,5 +21,5 @@ add_meme( keywords=["米学长手机"], tags=MemeTags.genshin, date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_shikanoin_heizou_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_shikanoin_heizou_frame/__init__.py index fec6b75051c679718e8c58975120c24a9a0c0526..bbf0be62ac3a4b5078e6c0355697dc863047cc88 100644 --- a/meme_generator/memes_emoji/mihoyo_shikanoin_heizou_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_shikanoin_heizou_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["鹿野院平藏相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_sigewinne_fingered/__init__.py b/meme_generator/memes_emoji/mihoyo_sigewinne_fingered/__init__.py index f413aa5cec76e3c53081d2dbe8d0571d85f3fdc1..93f0f1524bfa6fa4f84d88eee48ad166441e7064 100644 --- a/meme_generator/memes_emoji/mihoyo_sigewinne_fingered/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_sigewinne_fingered/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def mihoyo_sigewinne_fingered(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def mihoyo_sigewinne_fingered(images: list[BuildImage], texts: list[str], args: def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((144, 144)).circle() return frame.copy().paste(img, (12, 47), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "mihoyo_sigewinne_fingered", mihoyo_sigewinne_fingered, @@ -43,5 +43,5 @@ add_meme( keywords=["没救了","希格雯指"], tags=MemeTags.genshin, date_created=datetime(2025, 9, 13), - date_modified=datetime(2025, 9, 13), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_tartaglia_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_tartaglia_frame/__init__.py index a2b7fb754884d0ea09fbbabb61d52efb7da079e8..cd4175cd21dfa99ae2ff68ed9d442f78ba0e48de 100644 --- a/meme_generator/memes_emoji/mihoyo_tartaglia_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_tartaglia_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["达达利亚相框","阿贾克斯相框","公子相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_tepetlisauri_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_tepetlisauri_frame/__init__.py index 901f51b7a28da493455090eb8efba2a3a4366005..38f9b29b53dd3110c411621f9f23c64772fc952d 100644 --- a/meme_generator/memes_emoji/mihoyo_tepetlisauri_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_tepetlisauri_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["嵴锋龙相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_thunderbolt_slime_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_thunderbolt_slime_frame/__init__.py index 167a10b7e1664623508fc0fea98e62b4e2568ba9..45955814bfa586c6b7ff5e2f495886e7630afd4e 100644 --- a/meme_generator/memes_emoji/mihoyo_thunderbolt_slime_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_thunderbolt_slime_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["雷史莱姆相框","雷电史莱姆相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_traveler_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_traveler_frame/__init__.py index df7b25600b1ee816efa9e1e7253e63fd6789e8e2..0db0a3c18339620705ac7a479ae156197c6b80bf 100644 --- a/meme_generator/memes_emoji/mihoyo_traveler_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_traveler_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["旅行者相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mihoyo_wind_slime_frame/__init__.py b/meme_generator/memes_emoji/mihoyo_wind_slime_frame/__init__.py index 86c7b53834da2b9d032dbe6a252aff11c56d500f..82bd438629fa2f7749d88e86059bad045e22df45 100644 --- a/meme_generator/memes_emoji/mihoyo_wind_slime_frame/__init__.py +++ b/meme_generator/memes_emoji/mihoyo_wind_slime_frame/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["风史莱姆相框"], tags=MemeTags.genshin, date_created=datetime(2025, 6, 1), - date_modified=datetime(2025, 6, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/miss_in_my_sleep/__init__.py b/meme_generator/memes_emoji/miss_in_my_sleep/__init__.py index 3f0f9c510d724e16da7060e66dcc3c4e341266d6..4b3d9764880eac63fa36b5fed0c02967a1c3f31b 100644 --- a/meme_generator/memes_emoji/miss_in_my_sleep/__init__.py +++ b/meme_generator/memes_emoji/miss_in_my_sleep/__init__.py @@ -2,42 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def miss_in_my_sleep(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((250, 250)) return frame.copy().paste(img, (125, 45), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "miss_in_my_sleep", miss_in_my_sleep, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["睡梦中想念"], date_created=datetime(2024, 7, 26), - date_modified=datetime(2024, 7, 26), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mixue/__init__.py b/meme_generator/memes_emoji/mixue/__init__.py index 545bf2a5cf278dd8fbbbbfdbfcb08407c9dee2e7..1109bab5878e7fb22236dc19cea795b94a0ec524 100644 --- a/meme_generator/memes_emoji/mixue/__init__.py +++ b/meme_generator/memes_emoji/mixue/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -21,5 +20,5 @@ add_meme( max_texts=0, keywords=["蜜雪冰城"], date_created=datetime(2025, 6, 20), - date_modified=datetime(2025, 6, 20), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/mygo_sakiko_togawa/__init__.py b/meme_generator/memes_emoji/mygo_sakiko_togawa/__init__.py index f8a16c30f9cb9d638fadce085c817eb67826079a..597f7be9dae37f1f92c39f8db7af7705f51d2acd 100644 --- a/meme_generator/memes_emoji/mygo_sakiko_togawa/__init__.py +++ b/meme_generator/memes_emoji/mygo_sakiko_togawa/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def mygo_sakiko_togawa(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -21,5 +20,5 @@ add_meme( max_texts=0, keywords=["丰川祥子","祥子","豊川祥子"], date_created=datetime(2025, 5, 30), - date_modified=datetime(2025, 5, 30), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/nailoong_perch/__init__.py b/meme_generator/memes_emoji/nailoong_perch/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..c6d0d8dc07a4ccd087f09e8904916b345a264d93 --- /dev/null +++ b/meme_generator/memes_emoji/nailoong_perch/__init__.py @@ -0,0 +1,47 @@ +from datetime import datetime +from pathlib import Path +from PIL.Image import Image as IMG +from pil_utils import BuildImage +from meme_generator import add_meme +from meme_generator.utils import save_gif + +img_dir = Path(__file__).parent / "images" + +positions = [ + (98, 52), (93, 58), (64, 57), (61, 55), (53, 46), + (45, 38), (46, 39), (50, 40), (62, 40), (74, 36), + (95, 31), (99, 22), (107, 21), (113, 23), (109, 24), + (98, 29), (86, 31), (61, 32), (56, 32), (52, 34), + (50, 33), (52, 32), (57, 32), (76, 33), (88, 27), + (108, 20), (127, 24), (136, 26), (155, 38), (148, 40), + (132, 46), (114, 54), (101, 55), (75, 58), (68, 60), + (62, 59), (62, 55), (62, 55) +] + +sizes = [(63, 63)] * 24 + [(65, 65)] + [(63, 63)] * 13 + +def nailoong_perch(images: list[BuildImage], texts, args): + user_img = images[0].convert("RGBA") + frames = [] + total_frames = 38 + for i in range(1, total_frames + 1): + frame = BuildImage.open(img_dir / f"{i}.png").convert("RGBA") + new_frame = BuildImage.new("RGBA", frame.size) + idx = i - 1 + pos = positions[idx] + size = sizes[idx] + user_head = user_img.resize(size) + new_frame.paste(user_head, pos, alpha=True) + new_frame.paste(frame, (0, 0), alpha=True) + frames.append(new_frame.image) + return save_gif(frames, 0.07) + +add_meme( + "nailoong_perch", + nailoong_perch, + min_images=1, + max_images=1, + keywords=["趴墩"], + date_created=datetime(2026, 10, 12), + date_modified=datetime(2026, 10, 12), +) \ No newline at end of file diff --git a/meme_generator/memes_emoji/nailoong_perch/images/1.png b/meme_generator/memes_emoji/nailoong_perch/images/1.png new file mode 100644 index 0000000000000000000000000000000000000000..364f06746be278164f32e63312ea1c4353218f1f Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/1.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/10.png b/meme_generator/memes_emoji/nailoong_perch/images/10.png new file mode 100644 index 0000000000000000000000000000000000000000..09702f62c053500a806fa1b6529ded272ee8b7a5 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/10.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/11.png b/meme_generator/memes_emoji/nailoong_perch/images/11.png new file mode 100644 index 0000000000000000000000000000000000000000..2c054fd5375b917fd5b6b2715b59af32a6a6116e Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/11.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/12.png b/meme_generator/memes_emoji/nailoong_perch/images/12.png new file mode 100644 index 0000000000000000000000000000000000000000..6524a66dd05ce5dbfb563f7408f9d9641c1eaa70 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/12.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/13.png b/meme_generator/memes_emoji/nailoong_perch/images/13.png new file mode 100644 index 0000000000000000000000000000000000000000..76bffd8ee662a94dcc6655eb57c9ad98edd44ff6 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/13.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/14.png b/meme_generator/memes_emoji/nailoong_perch/images/14.png new file mode 100644 index 0000000000000000000000000000000000000000..35302df5a356ac9daab99334b9c8ab70af917155 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/14.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/15.png b/meme_generator/memes_emoji/nailoong_perch/images/15.png new file mode 100644 index 0000000000000000000000000000000000000000..c7beab49b9cb301615bfa89b39c98a16f3fd2408 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/15.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/16.png b/meme_generator/memes_emoji/nailoong_perch/images/16.png new file mode 100644 index 0000000000000000000000000000000000000000..db8fb3bca204fd37e1868670105928d0793e8b21 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/16.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/17.png b/meme_generator/memes_emoji/nailoong_perch/images/17.png new file mode 100644 index 0000000000000000000000000000000000000000..00c668f6819040ba609a195dbd7514f1cec55bd4 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/17.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/18.png b/meme_generator/memes_emoji/nailoong_perch/images/18.png new file mode 100644 index 0000000000000000000000000000000000000000..0315bfa380533284920fc7a8e8f176df428a45ce Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/18.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/19.png b/meme_generator/memes_emoji/nailoong_perch/images/19.png new file mode 100644 index 0000000000000000000000000000000000000000..bbf1fbbcc89b7e5c1a1d63f959b356090e271fd0 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/19.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/2.png b/meme_generator/memes_emoji/nailoong_perch/images/2.png new file mode 100644 index 0000000000000000000000000000000000000000..58ead18ad16d51adf720c4dd716cc0e1b9d258a7 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/2.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/20.png b/meme_generator/memes_emoji/nailoong_perch/images/20.png new file mode 100644 index 0000000000000000000000000000000000000000..62bf8ce34334b219961b0ca30f798baa4f5ce0f1 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/20.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/21.png b/meme_generator/memes_emoji/nailoong_perch/images/21.png new file mode 100644 index 0000000000000000000000000000000000000000..9716692b622ef937d212f8c851b29714c7a5f320 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/21.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/22.png b/meme_generator/memes_emoji/nailoong_perch/images/22.png new file mode 100644 index 0000000000000000000000000000000000000000..fd9b3cd1d1a9f440562e031b3ccb6e21216ab684 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/22.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/23.png b/meme_generator/memes_emoji/nailoong_perch/images/23.png new file mode 100644 index 0000000000000000000000000000000000000000..c8c90a9e16890f0c4c2d1bbf8788e2949f257b39 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/23.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/24.png b/meme_generator/memes_emoji/nailoong_perch/images/24.png new file mode 100644 index 0000000000000000000000000000000000000000..123097bae60c416e7d8e616abaf8853e2482be6e Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/24.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/25.png b/meme_generator/memes_emoji/nailoong_perch/images/25.png new file mode 100644 index 0000000000000000000000000000000000000000..9f83d0f5523133c6b14fc7723d68c5ad0073ca04 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/25.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/26.png b/meme_generator/memes_emoji/nailoong_perch/images/26.png new file mode 100644 index 0000000000000000000000000000000000000000..a713f49f09c83fd9111dd0d1ec39ae3373672b0b Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/26.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/27.png b/meme_generator/memes_emoji/nailoong_perch/images/27.png new file mode 100644 index 0000000000000000000000000000000000000000..120ef008d77453b428fc74a851a011c88fa2a9cd Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/27.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/28.png b/meme_generator/memes_emoji/nailoong_perch/images/28.png new file mode 100644 index 0000000000000000000000000000000000000000..7f82b335f5d7d160b1c4cad67a749fd03efd1e00 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/28.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/29.png b/meme_generator/memes_emoji/nailoong_perch/images/29.png new file mode 100644 index 0000000000000000000000000000000000000000..81a5ee45e1d0bef90354c50446ba0f2ae8e14f8e Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/29.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/3.png b/meme_generator/memes_emoji/nailoong_perch/images/3.png new file mode 100644 index 0000000000000000000000000000000000000000..dd9112bb966b27542f40678a210a7ebbadd2df8e Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/3.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/30.png b/meme_generator/memes_emoji/nailoong_perch/images/30.png new file mode 100644 index 0000000000000000000000000000000000000000..98a53ac426e8d2096670a410bf78d1e40bc5686f Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/30.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/31.png b/meme_generator/memes_emoji/nailoong_perch/images/31.png new file mode 100644 index 0000000000000000000000000000000000000000..289446ba6a93172e0e599b3f20adfe9dbc8ba314 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/31.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/32.png b/meme_generator/memes_emoji/nailoong_perch/images/32.png new file mode 100644 index 0000000000000000000000000000000000000000..d1a410bae964ce21f5db31f72c2e2c0590c5efad Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/32.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/33.png b/meme_generator/memes_emoji/nailoong_perch/images/33.png new file mode 100644 index 0000000000000000000000000000000000000000..03ccd8e8433860fd40328ca232226e449b58fe01 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/33.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/34.png b/meme_generator/memes_emoji/nailoong_perch/images/34.png new file mode 100644 index 0000000000000000000000000000000000000000..4f6418fff5640d5d731a46d0597a0371f9c3c5b3 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/34.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/35.png b/meme_generator/memes_emoji/nailoong_perch/images/35.png new file mode 100644 index 0000000000000000000000000000000000000000..a989ca704d1abc10dc0a8a81212420d94d40008a Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/35.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/36.png b/meme_generator/memes_emoji/nailoong_perch/images/36.png new file mode 100644 index 0000000000000000000000000000000000000000..038b070c2a647527123094293722250fd31f3666 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/36.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/37.png b/meme_generator/memes_emoji/nailoong_perch/images/37.png new file mode 100644 index 0000000000000000000000000000000000000000..7a95b27ae2a855015e484b41014f740588510785 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/37.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/38.png b/meme_generator/memes_emoji/nailoong_perch/images/38.png new file mode 100644 index 0000000000000000000000000000000000000000..4417eb028689ced40eaf4c5ea72ea647d3669e62 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/38.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/4.png b/meme_generator/memes_emoji/nailoong_perch/images/4.png new file mode 100644 index 0000000000000000000000000000000000000000..cb55d581e513b52c672290c419f237b79762943c Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/4.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/5.png b/meme_generator/memes_emoji/nailoong_perch/images/5.png new file mode 100644 index 0000000000000000000000000000000000000000..81450b9955ea2fcf0935676202ced506aeb3e352 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/5.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/6.png b/meme_generator/memes_emoji/nailoong_perch/images/6.png new file mode 100644 index 0000000000000000000000000000000000000000..7aa96515c4cb60272bc5100dc7dcb6f2078b9bc2 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/6.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/7.png b/meme_generator/memes_emoji/nailoong_perch/images/7.png new file mode 100644 index 0000000000000000000000000000000000000000..05f5377275196b3d8b63a66a86b1481027cedc2d Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/7.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/8.png b/meme_generator/memes_emoji/nailoong_perch/images/8.png new file mode 100644 index 0000000000000000000000000000000000000000..b7306f5f9aededed8df3fa6681b8047e39e75d9d Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/8.png differ diff --git a/meme_generator/memes_emoji/nailoong_perch/images/9.png b/meme_generator/memes_emoji/nailoong_perch/images/9.png new file mode 100644 index 0000000000000000000000000000000000000000..b5a72e2a03a60fb6ce6829b730ad2af7e304bbd7 Binary files /dev/null and b/meme_generator/memes_emoji/nailoong_perch/images/9.png differ diff --git a/meme_generator/memes_emoji/nakano_lchika/__init__.py b/meme_generator/memes_emoji/nakano_lchika/__init__.py index 9931784b5fda6b24c21a47973de8bfe37f1b6e13..5133c24b1505f551e745fbf60a58f1779ec5413d 100644 --- a/meme_generator/memes_emoji/nakano_lchika/__init__.py +++ b/meme_generator/memes_emoji/nakano_lchika/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def nakano_lchika (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["中野一花"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/nakano_ltsuki/__init__.py b/meme_generator/memes_emoji/nakano_ltsuki/__init__.py index 743ef3b4b40be06fa52e733905a5f4592f4c8b4c..557b062117166b0c9bcf11b49511c65f03ebfd85 100644 --- a/meme_generator/memes_emoji/nakano_ltsuki/__init__.py +++ b/meme_generator/memes_emoji/nakano_ltsuki/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def nakano_ltsuki (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["中野五月"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/nakano_miku/__init__.py b/meme_generator/memes_emoji/nakano_miku/__init__.py index c28eeb579dedd0557015522af1cd97dbc68e4f89..391d48aa73c5fe00c3e9586520524da59e820d89 100644 --- a/meme_generator/memes_emoji/nakano_miku/__init__.py +++ b/meme_generator/memes_emoji/nakano_miku/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def nakano_miku (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["中野三玖"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/nakano_nino/__init__.py b/meme_generator/memes_emoji/nakano_nino/__init__.py index f41bb51cd7f4e3d7861b76ce530e97cf137056d0..2c92644b756d538724fa7dfb154e123c00d8e4f5 100644 --- a/meme_generator/memes_emoji/nakano_nino/__init__.py +++ b/meme_generator/memes_emoji/nakano_nino/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def nakano_nino (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["中野二乃"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/nakano_yotsuba/__init__.py b/meme_generator/memes_emoji/nakano_yotsuba/__init__.py index 529bbce690c84fed01f94c8416874a056e136b05..53cb20711eb0aca3b253481d171ce1b34104bbe8 100644 --- a/meme_generator/memes_emoji/nakano_yotsuba/__init__.py +++ b/meme_generator/memes_emoji/nakano_yotsuba/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def nakano_yotsuba (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["中野四叶"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/naruro_headpat/__init__.py b/meme_generator/memes_emoji/naruro_headpat/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..320e5a2c951040b770839841b080ee0c190bb58d --- /dev/null +++ b/meme_generator/memes_emoji/naruro_headpat/__init__.py @@ -0,0 +1,23 @@ +from datetime import datetime +from pathlib import Path +from pil_utils import BuildImage +from meme_generator import MemeArgsModel, add_meme +from meme_generator.utils import make_png_or_gif +img_dir = Path(__file__).parent / "images" +def naruro_headpat(images: list[BuildImage], texts: list[str], args: MemeArgsModel): + frame = BuildImage.open(img_dir / "0.png") + def make(imgs: list[BuildImage]) -> BuildImage: + img = imgs[0].convert("RGBA").resize((150, 105), keep_ratio=True) + return frame.copy().paste(img, (17, 162), alpha=True,below=True) + return make_png_or_gif(images, make) +add_meme( + "naruro_headpat", + naruro_headpat, + min_images=1, + max_images=1, + min_texts=0, + max_texts=0, + keywords=["摸头杀"], + date_created=datetime(2026, 10, 12), + date_modified=datetime(2026, 10, 12), +) diff --git a/meme_generator/memes_emoji/naruro_headpat/images/0.png b/meme_generator/memes_emoji/naruro_headpat/images/0.png new file mode 100644 index 0000000000000000000000000000000000000000..022b6eb51d1b537a3594c4039b1d79767e7fdf18 Binary files /dev/null and b/meme_generator/memes_emoji/naruro_headpat/images/0.png differ diff --git a/meme_generator/memes_emoji/naruro_resurrection/__init__.py b/meme_generator/memes_emoji/naruro_resurrection/__init__.py index 1d8a09be5bd8488a7d6dae23321f491430bb0de1..414480188143e686c134e7930547cc2e4d013d84 100644 --- a/meme_generator/memes_emoji/naruro_resurrection/__init__.py +++ b/meme_generator/memes_emoji/naruro_resurrection/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -22,5 +21,5 @@ add_meme( keywords=["复活","立即复活"], tags=MemeTags.genshin, date_created=datetime(2025, 7, 1), - date_modified=datetime(2025, 7, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/naruro_s_ninja/__init__.py b/meme_generator/memes_emoji/naruro_s_ninja/__init__.py index d7ea4a654bbd0598cb4534b147886a59cbfa8131..80df3b3ef02682b3028ec367ea7972980a847860 100644 --- a/meme_generator/memes_emoji/naruro_s_ninja/__init__.py +++ b/meme_generator/memes_emoji/naruro_s_ninja/__init__.py @@ -2,42 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def naruro_s_ninja(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((1000, 1000)) return frame.copy().paste(img, (1, 1), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "naruro_s_ninja", naruro_s_ninja, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["S忍","s忍"], date_created=datetime(2024, 7, 26), - date_modified=datetime(2025, 5, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/naruto_bagua_seal/__init__.py b/meme_generator/memes_emoji/naruto_bagua_seal/__init__.py index 6b2f2ba0a867cf7f1986d68e114ffd8ac4349076..c21978d367089b1dcfb23ee16d762a27b4ea0df7 100644 --- a/meme_generator/memes_emoji/naruto_bagua_seal/__init__.py +++ b/meme_generator/memes_emoji/naruto_bagua_seal/__init__.py @@ -2,42 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def naruto_bagua_seal(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (235, 615, 478, 659), - text, - max_fontsize=100, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((391, 368)) return frame.copy().paste(img, (308, 330), alpha=True, below=True ) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "naruto_bagua_seal", naruto_bagua_seal, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["八卦封印"], date_created=datetime(2026, 1, 9), - date_modified=datetime(2026, 1, 9), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/new_goodnews/__init__.py b/meme_generator/memes_emoji/new_goodnews/__init__.py index 5befbcbc122c14798dadfb148093d98f7e1928bd..fc07436cfccadd335343fe50da742f84efcd0aa2 100644 --- a/meme_generator/memes_emoji/new_goodnews/__init__.py +++ b/meme_generator/memes_emoji/new_goodnews/__init__.py @@ -10,7 +10,7 @@ from meme_generator import ( add_meme, ) from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" help_text = "昵称(第一段文字)" class Model(MemeArgsModel): @@ -27,7 +27,7 @@ args_type = MemeArgsType( ) def new_goodnews(images: list[BuildImage], texts: list[str], args: Model): frame = BuildImage.open(img_dir / "0.png") - name = args.name if args.name else "天命之人" + name = args.name or (args.user_infos[0].name if args.user_infos else "天命之人") try: frame.draw_text( (363, 910, 719, 985), @@ -57,7 +57,7 @@ def new_goodnews(images: list[BuildImage], texts: list[str], args: Model): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((445, 445)) return frame.copy().paste(img, (319, 408), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "new_goodnews", new_goodnews, @@ -69,5 +69,5 @@ add_meme( default_texts=["喜报传佳讯\n福星高照\n满门庭"], args_type=args_type, date_created=datetime(2024, 7, 26), - date_modified=datetime(2026, 4, 11), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/ok/__init__.py b/meme_generator/memes_emoji/ok/__init__.py index f2d660ccba88119a23850f739b047f4cbf7eace7..7ee8e69298bb7da8d28a304c3597e36177a664dd 100644 --- a/meme_generator/memes_emoji/ok/__init__.py +++ b/meme_generator/memes_emoji/ok/__init__.py @@ -2,15 +2,14 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def ok(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((230, 205)) return frame.copy().paste(img, (13, 49), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "ok", ok, @@ -18,5 +17,5 @@ add_meme( max_images=1, keywords=["ok","OK","Ok"], date_created=datetime(2025, 9, 17), - date_modified=datetime(2025, 9, 17), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/orange_head/__init__.py b/meme_generator/memes_emoji/orange_head/__init__.py index 1d53a78ba6f5f6bbe75e175e168b31dc5912d366..3367d1af7434f200aa8b2deb3ce6be382c8588dd 100644 --- a/meme_generator/memes_emoji/orange_head/__init__.py +++ b/meme_generator/memes_emoji/orange_head/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def orange_head(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -17,8 +16,8 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["橘子头"], date_created=datetime(2025, 5, 29), - date_modified=datetime(2025, 7, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/pay_to_watch/__init__.py b/meme_generator/memes_emoji/pay_to_watch/__init__.py index 73cdec9cfcd5490eccdedf487d91ac6f3c51048f..5c191f3eaa29c9c5d16ddffb72071420787dada8 100644 --- a/meme_generator/memes_emoji/pay_to_watch/__init__.py +++ b/meme_generator/memes_emoji/pay_to_watch/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def pay_to_watch(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def pay_to_watch(images: list[BuildImage], texts: list[str], args: MemeArgsModel def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((185, 185)) return frame.copy().paste(img, (150, 240), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "pay_to_watch", pay_to_watch, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["付费观看"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/pierrot_plus_head/__init__.py b/meme_generator/memes_emoji/pierrot_plus_head/__init__.py index 22ba424d40f1dbc4988fc365eaddf28f76cd2aa1..9a3817f1cfe01f751bae335f629457cd0d903a9d 100644 --- a/meme_generator/memes_emoji/pierrot_plus_head/__init__.py +++ b/meme_generator/memes_emoji/pierrot_plus_head/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def pierrot_plus_head (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["拾又之国"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/pig_surrounded/__init__.py b/meme_generator/memes_emoji/pig_surrounded/__init__.py index 5bc69cd6976238cfdf27cbea75fc558e3e279334..520e8f3dcd7a524633a9a40a472766cd8d1bbd7d 100644 --- a/meme_generator/memes_emoji/pig_surrounded/__init__.py +++ b/meme_generator/memes_emoji/pig_surrounded/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,8 +17,8 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["被猪包围"], date_created=datetime(2026, 2, 7), - date_modified=datetime(2026, 2, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/pineapples/__init__.py b/meme_generator/memes_emoji/pineapples/__init__.py index f4545e3955f6dd6a3857af281da23f750c1d97e7..31b82efe184f56955b2624fad24005fc6a873172 100644 --- a/meme_generator/memes_emoji/pineapples/__init__.py +++ b/meme_generator/memes_emoji/pineapples/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -23,5 +22,5 @@ add_meme( keywords=["🍍","菠萝头"], tags=MemeTags.genshin, date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/pregnancy_test/__init__.py b/meme_generator/memes_emoji/pregnancy_test/__init__.py index 86c9dcf7e055f89e08b493d2511e2e5d1e938e06..def24f7cabf2607f8b005e8a311c0f79100d30bf 100644 --- a/meme_generator/memes_emoji/pregnancy_test/__init__.py +++ b/meme_generator/memes_emoji/pregnancy_test/__init__.py @@ -2,15 +2,14 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def pregnancy_test (images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((640, 640)) return frame.copy().paste(img, (1, 1), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "pregnancy_test", pregnancy_test , @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["验孕棒"], date_created=datetime(2025, 7, 16), - date_modified=datetime(2025, 7, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/prosperitywish/__init__.py b/meme_generator/memes_emoji/prosperitywish/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..d9b65783c8cd685e78e18d2e6013d7fc4e589e66 --- /dev/null +++ b/meme_generator/memes_emoji/prosperitywish/__init__.py @@ -0,0 +1,26 @@ +from datetime import datetime +from pathlib import Path +from pil_utils import BuildImage +from meme_generator import MemeArgsModel, add_meme +from meme_generator.utils import make_png_or_gif + +img_dir = Path(__file__).parent / "images" + +def prosperitywish(images, texts, args): + frame = BuildImage.open(img_dir / "0.png") + def make(imgs): + img = imgs[0].convert("RGBA").circle().resize((800, 800)) + return frame.copy().paste(img, (1035, 700), alpha=True) + return make_png_or_gif(images, make) + +add_meme( + "prosperitywish", + prosperitywish, + min_images=1, + max_images=1, + min_texts=0, + max_texts=0, + keywords=["恭喜发财"], + date_created=datetime(2024, 7, 26), + date_modified=datetime(2026, 10, 12), +) diff --git a/meme_generator/memes_emoji/gong_xi_fa_cai/images/0.png b/meme_generator/memes_emoji/prosperitywish/images/0.png similarity index 100% rename from meme_generator/memes_emoji/gong_xi_fa_cai/images/0.png rename to meme_generator/memes_emoji/prosperitywish/images/0.png diff --git a/meme_generator/memes_emoji/qixi_festival/__init__.py b/meme_generator/memes_emoji/qixi_festival/__init__.py index ba21b09e4f6e24875a0c1e4d3800c81536aff985..b596c9f7e240e20fa846d8a82aedc19b3c7830cf 100644 --- a/meme_generator/memes_emoji/qixi_festival/__init__.py +++ b/meme_generator/memes_emoji/qixi_festival/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def qixi_festival(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def qixi_festival(images: list[BuildImage], texts: list[str], args: MemeArgsMode def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((370, 370)) return frame.copy().paste(img, (618, 284), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "qixi_festival", qixi_festival, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["七夕和谁过","七夕和谁过?","七夕和谁过?"], date_created=datetime(2025, 8, 28), - date_modified=datetime(2025, 8, 28), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/rune/__init__.py b/meme_generator/memes_emoji/rune/__init__.py index b0947c7296653d3fd761f00cc09a2e54033bf29c..f9c10aab633d2c27936da2144b7661fa13139967 100644 --- a/meme_generator/memes_emoji/rune/__init__.py +++ b/meme_generator/memes_emoji/rune/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def rune(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def rune(images: list[BuildImage], texts: list[str], args: MemeArgsModel): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((185, 185)) return frame.copy().paste(img, (456, 816), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "rune", rune, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["符咒"], date_created=datetime(2025, 9, 9), - date_modified=datetime(2025, 9, 9), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/scissor_seven_head/__init__.py b/meme_generator/memes_emoji/scissor_seven_head/__init__.py index a91a2fb1f193e08cbf5bc8b68df2fcb9d2ba9f35..5fe146371beb2a887dc99a126f929805d1e55880 100644 --- a/meme_generator/memes_emoji/scissor_seven_head/__init__.py +++ b/meme_generator/memes_emoji/scissor_seven_head/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def scissor_seven_head (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -21,5 +20,5 @@ add_meme( max_texts=0, keywords=["伍六七","阿七"], date_created=datetime(2025, 7, 2), - date_modified=datetime(2025, 7, 2), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/shikanoko_noko/__init__.py b/meme_generator/memes_emoji/shikanoko_noko/__init__.py index 49cbf4ecc4b60fc8aa9c93cb57cc239c0988c48a..1b15ec4004abb6082cd531b0bb8a31588045d4a0 100644 --- a/meme_generator/memes_emoji/shikanoko_noko/__init__.py +++ b/meme_generator/memes_emoji/shikanoko_noko/__init__.py @@ -2,23 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def shikanoko_noko(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((290, 290)) return frame.copy().paste(img, (360, 3), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "shikanoko_noko", shikanoko_noko, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["鹿乃子乃子","鹿乃子"], date_created=datetime(2025, 5, 25), - date_modified=datetime(2025, 5, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/shipborne_laser_weapons/__init__.py b/meme_generator/memes_emoji/shipborne_laser_weapons/__init__.py index ae79728ccc37b7c4eda99233f3b37c61afa96cb5..0c38c5ee2c7dfa35ea3db118ea67a44a86a282a8 100644 --- a/meme_generator/memes_emoji/shipborne_laser_weapons/__init__.py +++ b/meme_generator/memes_emoji/shipborne_laser_weapons/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def shipborne_laser_weapons(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -13,7 +12,7 @@ def shipborne_laser_weapons(images: list[BuildImage], texts: list[str], args: Me img2 = imgs[0].convert("RGBA").resize((73, 73)) result = result.paste(img2, (572, 918), alpha=True, below=True) return result - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "shipborne_laser_weapons", shipborne_laser_weapons, @@ -23,5 +22,5 @@ add_meme( max_texts=0, keywords=["舰载激光武器"], date_created=datetime(2025, 9, 21), - date_modified=datetime(2025, 9, 21), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/slam_table/__init__.py b/meme_generator/memes_emoji/slam_table/__init__.py index d010647d955374f7c1ccf9c34ee1971c052757f1..e937ba5058fc6e19e18489af759e49bfcde1b9ea 100644 --- a/meme_generator/memes_emoji/slam_table/__init__.py +++ b/meme_generator/memes_emoji/slam_table/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def slam_table(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["砸桌"], date_created=datetime(2026, 2, 16), - date_modified=datetime(2026, 2, 16), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/something/__init__.py b/meme_generator/memes_emoji/something/__init__.py index 83032d3df64b18a39d9eb7b890341105466410b8..6b644d337a6498ad7e35434abcac437192934837 100644 --- a/meme_generator/memes_emoji/something/__init__.py +++ b/meme_generator/memes_emoji/something/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def something(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -32,7 +32,7 @@ def something(images: list[BuildImage], texts: list[str], args: MemeArgsModel): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((308, 308)) return frame.copy().paste(img, (118, 471), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "something", something, @@ -42,5 +42,5 @@ add_meme( max_texts=1, keywords=["什么东西"], date_created=datetime(2026, 1, 12), - date_modified=datetime(2026, 1, 12), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/spend_christmas/__init__.py b/meme_generator/memes_emoji/spend_christmas/__init__.py index 84596ed43ca2a20b7240e8227917efdf2b38ea8f..8f201fc8dbfbd949aa4dbd36fc48a76916c36468 100644 --- a/meme_generator/memes_emoji/spend_christmas/__init__.py +++ b/meme_generator/memes_emoji/spend_christmas/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def spend_christmas(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -29,7 +29,7 @@ def spend_christmas(images: list[BuildImage], texts: list[str], args: MemeArgsMo def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((255, 255)) return frame.copy().paste(img, (120, 535), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "spend_christmas", spend_christmas, @@ -39,5 +39,5 @@ add_meme( max_texts=1, keywords=["一起圣诞"], date_created=datetime(2024, 12, 21), - date_modified=datetime(2024, 12, 21), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/springframe/__init__.py b/meme_generator/memes_emoji/springframe/__init__.py index 74bc25b97579c7662cd0ce0b0153ce993449d346..57e888696b794a35b30cce2c735ac30ac118cd4d 100644 --- a/meme_generator/memes_emoji/springframe/__init__.py +++ b/meme_generator/memes_emoji/springframe/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def springframe (images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -20,5 +19,5 @@ add_meme( max_texts=0, keywords=["春日燕归来"], date_created=datetime(2026, 4, 17), - date_modified=datetime(2026, 4, 17), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/steal/__init__.py b/meme_generator/memes_emoji/steal/__init__.py index 5adc2748b95171c7b7181b261f879625584bba9d..1ed6b09e06e53f7f245ec9a6d73960bda792888f 100644 --- a/meme_generator/memes_emoji/steal/__init__.py +++ b/meme_generator/memes_emoji/steal/__init__.py @@ -1,16 +1,29 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage -from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_png_or_gif +from meme_generator import add_meme +from meme_generator.utils import save_gif + img_dir = Path(__file__).parent / "images" -def steal(images: list[BuildImage], texts: list[str], args: MemeArgsModel): - frame = BuildImage.open(img_dir / "0.png") - def make(imgs: list[BuildImage]) -> BuildImage: - img = imgs[0].convert("RGBA").circle().resize((376, 376)) - return frame.copy().paste(img, (61, 34), alpha=True, below=True) - return make_png_or_gif(images, make) + +positions = [(61, 34)] +sizes = [(376, 376)] + +def steal(images: list[BuildImage], texts, args): + user_img = images[0].convert("RGBA") + frames = [] + total_frames = 1 + for i in range(total_frames): + frame = BuildImage.open(img_dir / f"{i}.png").convert("RGBA") + new_frame = BuildImage.new("RGBA", frame.size) + pos = positions[i] + size = sizes[i] + user_head = user_img.resize(size).circle() + new_frame.paste(user_head, pos, alpha=True) + new_frame.paste(frame, (0, 0), alpha=True) + frames.append(new_frame.image) + return save_gif(frames, 0.13) + add_meme( "steal", steal, @@ -18,5 +31,5 @@ add_meme( max_images=1, keywords=["偷"], date_created=datetime(2026, 3, 31), - date_modified=datetime(2026, 9, 4), -) + date_modified=datetime(2026, 10, 12), +) \ No newline at end of file diff --git a/meme_generator/memes_emoji/tencent_np/__init__.py b/meme_generator/memes_emoji/tencent_np/__init__.py index 9de30c9c8103a5353ce0c31a4a8c085b87e255ea..3077cabbda1d23facbf311c5554bc4515a8f9762 100644 --- a/meme_generator/memes_emoji/tencent_np/__init__.py +++ b/meme_generator/memes_emoji/tencent_np/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_jpg_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -18,8 +17,8 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["农P","农批"], date_created=datetime(2026, 1, 9), - date_modified=datetime(2026, 1, 9), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/throwing_poop/__init__.py b/meme_generator/memes_emoji/throwing_poop/__init__.py index cb0b33921ffcb0198df964856565e34fd14f6102..c03d4b1fb42e88a413ca61bcf1aa7d3c1c6d1514 100644 --- a/meme_generator/memes_emoji/throwing_poop/__init__.py +++ b/meme_generator/memes_emoji/throwing_poop/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def throwing_poop(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -15,7 +14,7 @@ def throwing_poop(images: list[BuildImage], texts: list[str], args: MemeArgsMode img3 = imgs[0].convert("RGBA").resize((108, 108)).rotate(20, expand=True) result = result.paste(img3, (297, 1003), alpha=True, below=True) return result - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "throwing_poop", throwing_poop, @@ -25,5 +24,5 @@ add_meme( max_texts=0, keywords=["扔史"], date_created=datetime(2025, 9, 21), - date_modified=datetime(2025, 9, 23), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/up_to/__init__.py b/meme_generator/memes_emoji/up_to/__init__.py index 95dcbc7ade843ceeeabb6e704530538be5e58936..c9efafe07247528fb30881f89264f9e561c7641d 100644 --- a/meme_generator/memes_emoji/up_to/__init__.py +++ b/meme_generator/memes_emoji/up_to/__init__.py @@ -2,23 +2,22 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def up_to(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((960, 960)) return frame.copy().paste(img, (0, 0), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "up_to", up_to, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["干嘛"], date_created=datetime(2026, 1, 20), - date_modified=datetime(2026, 1, 20), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/vme50/__init__.py b/meme_generator/memes_emoji/vme50/__init__.py index f03c1f4712333c734bc5855ea78018c54e939d5a..7f94254122f73f31572727c6569dd04c875dbc42 100644 --- a/meme_generator/memes_emoji/vme50/__init__.py +++ b/meme_generator/memes_emoji/vme50/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def vme50(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def vme50(images: list[BuildImage], texts: list[str], args: MemeArgsModel): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((440, 440)) return frame.copy().paste(img, (229, 191), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "vme50", vme50, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["V我50","v我50"], date_created=datetime(2025, 7, 11), - date_modified=datetime(2025, 7, 11), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/widow/__init__.py b/meme_generator/memes_emoji/widow/__init__.py index f40da909b2f07326418dc652895a2c93b40b8593..0bec5c893ce1e038bb217628f5aa967c63443e78 100644 --- a/meme_generator/memes_emoji/widow/__init__.py +++ b/meme_generator/memes_emoji/widow/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def widow(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -33,7 +33,7 @@ def widow(images: list[BuildImage], texts: list[str], args: MemeArgsModel): img = img.convert("L").convert("RGBA") img = img.rotate(21, expand=True) return frame.copy().paste(img, (162, 200), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "widow", widow, @@ -43,5 +43,5 @@ add_meme( max_texts=1, keywords=["未亡人"], date_created=datetime(2025, 8, 13), - date_modified=datetime(2025, 8, 13), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/xiluo_disgust/__init__.py b/meme_generator/memes_emoji/xiluo_disgust/__init__.py index 27ae7e2e746682d3c748eb5edaa3059d3ce291a4..115de0a80b2efea766106798ae0075cb1acecbd2 100644 --- a/meme_generator/memes_emoji/xiluo_disgust/__init__.py +++ b/meme_generator/memes_emoji/xiluo_disgust/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def xiluo_disgust(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -38,8 +37,8 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["希罗嫌弃", "二阶堂希罗嫌弃"], date_created=datetime(2025, 10, 5), - date_modified=datetime(2025, 10, 5), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/xueli_think/__init__.py b/meme_generator/memes_emoji/xueli_think/__init__.py index 98dbf7350ddeaa13b9e8cd63beb5c0406192433a..66d3b6af3f08d839931a4c9de528558a2c97fd1d 100644 --- a/meme_generator/memes_emoji/xueli_think/__init__.py +++ b/meme_generator/memes_emoji/xueli_think/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def xueli_think(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -37,8 +36,8 @@ add_meme( min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["雪莉想", "雪梨想", "橘雪莉想"], date_created=datetime(2025, 10, 5), - date_modified=datetime(2025, 10, 5), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yes/__init__.py b/meme_generator/memes_emoji/yes/__init__.py index b03faab307b2fb6d24bef59bf90c0c97b85309cf..c68b5e2b5f68caf70bc7be303760d0d48415ea90 100644 --- a/meme_generator/memes_emoji/yes/__init__.py +++ b/meme_generator/memes_emoji/yes/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" def yes(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") @@ -31,7 +31,7 @@ def yes(images: list[BuildImage], texts: list[str], args: MemeArgsModel): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((165, 165)) return frame.copy().paste(img, (396, 452), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yes", yes, @@ -41,5 +41,5 @@ add_meme( max_texts=1, keywords=["yes","Yes","YES"], date_created=datetime(2025, 8, 19), - date_modified=datetime(2025, 8, 19), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_ayachi_nene/__init__.py b/meme_generator/memes_emoji/yuzu_soft_ayachi_nene/__init__.py index 26544db0bacdddb7d12369dacc988506287765f2..beb27a5b5a695e4e8bc746ea0af86e26199dbebf 100644 --- a/meme_generator/memes_emoji/yuzu_soft_ayachi_nene/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_ayachi_nene/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def yuzu_soft_ayachi_nene(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -33,7 +33,7 @@ def yuzu_soft_ayachi_nene(images: list[BuildImage], texts: list[str], args: Meme img = imgs[0].convert("RGBA").resize((165, 165)) img = img.rotate(-45, expand=True) return frame.copy().paste(img, (500, 410), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yuzu_soft_ayachi_nene", yuzu_soft_ayachi_nene, @@ -44,5 +44,5 @@ add_meme( keywords=["宁宁困惑","绫地宁宁困惑"], tags=MemeTags.ayachi, date_created=datetime(2025, 3, 24), - date_modified=datetime(2025, 3, 24), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_ciallo/__init__.py b/meme_generator/memes_emoji/yuzu_soft_ciallo/__init__.py index 61f54b5ccc1ff6cd0c6a4fbe8c709a93ef5428ce..b16b83b2c1f5825c16d4c65cde409df8c26e1611 100644 --- a/meme_generator/memes_emoji/yuzu_soft_ciallo/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_ciallo/__init__.py @@ -3,8 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import CommandShortcut, MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags IMG_DIR = Path(__file__).parent / "images" @@ -17,7 +16,7 @@ def yuzu_soft_ciallo(images: list[BuildImage], texts: list[str], args: MemeArgsM def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize(RESIZE_SIZE) return background.copy().paste(img, PASTE_BOX[:2], alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yuzu_soft_ciallo", @@ -41,5 +40,5 @@ add_meme( ], tags=MemeTags.yuzu_soft, date_created=datetime(2025, 9, 5), - date_modified=datetime(2026, 8, 2), + date_modified=datetime(2026, 10, 12), ) \ No newline at end of file diff --git a/meme_generator/memes_emoji/yuzu_soft_ignore/__init__.py b/meme_generator/memes_emoji/yuzu_soft_ignore/__init__.py index 334d15bfd18b73e75af78d956dc5c058c5c8ce23..e8ca4ac9ae136bba986d9ef7bd98ffd505568b54 100644 --- a/meme_generator/memes_emoji/yuzu_soft_ignore/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_ignore/__init__.py @@ -2,8 +2,7 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags from meme_generator import ( CommandShortcut, @@ -19,7 +18,7 @@ def yuzu_soft_ignore(images: list[BuildImage], texts: list[str], args: MemeArgsM def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((340, 204)) return frame.copy().paste(img, (95, 42), alpha=True, below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yuzu_soft_ignore", yuzu_soft_ignore, @@ -30,5 +29,5 @@ add_meme( keywords=["视若无睹"], tags=MemeTags.yuzu_soft, date_created=datetime(2025, 12, 1), - date_modified=datetime(2025, 12, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_murasame_dislike/__init__.py b/meme_generator/memes_emoji/yuzu_soft_murasame_dislike/__init__.py index 7797bb9933f6b575976640d608fd4a8725554a52..0c76db7d8d95e79ab0d995f18759ea7dbb4a2af8 100644 --- a/meme_generator/memes_emoji/yuzu_soft_murasame_dislike/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_murasame_dislike/__init__.py @@ -4,7 +4,7 @@ from pil_utils import BuildImage from meme_generator import add_meme from meme_generator.exception import TextOverLength from meme_generator.tags import MemeTags -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" default_text = "丛雨讨厌这个" def yuzu_soft_murasame_dislike(images: list[BuildImage], texts: list[str], args): @@ -24,7 +24,7 @@ def yuzu_soft_murasame_dislike(images: list[BuildImage], texts: list[str], args) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((346, 264), keep_ratio=True) return frame.copy().paste(img, (99, 60), below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yuzu_soft_murasame_dislike", yuzu_soft_murasame_dislike, @@ -36,5 +36,5 @@ add_meme( keywords=["丛雨讨厌"], tags=MemeTags.yuzu_soft, date_created=datetime(2025, 5, 25), - date_modified=datetime(2025, 4, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_murasame_hug/__init__.py b/meme_generator/memes_emoji/yuzu_soft_murasame_hug/__init__.py index cdb61282870bf87023a0c2aae5f329fb3969da56..daa6fb27bae9365fa128b8636da2122ce3b6d999 100644 --- a/meme_generator/memes_emoji/yuzu_soft_murasame_hug/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_murasame_hug/__init__.py @@ -10,8 +10,8 @@ from meme_generator import ( ParserOption, add_meme, ) -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif +from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" help_text = "图片模板编号,1~3 可选:1: 财神丛雨,2: 原版丛雨,3: 虎头丛雨,0 为随机" class Model(MemeArgsModel): @@ -51,6 +51,7 @@ add_meme( max_images=1, args_type=args_type, keywords=["丛雨抱"], + tags=MemeTags.yuzu_soft, date_created=datetime(2026, 2, 19), - date_modified=datetime(2026, 4, 1), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_murasame_husband/__init__.py b/meme_generator/memes_emoji/yuzu_soft_murasame_husband/__init__.py index 7e8d2754ce1a9505c0281794ddd1081191c978a7..6507a55bfffef7b2c5953f1df9ed8e79cbaf3dde 100644 --- a/meme_generator/memes_emoji/yuzu_soft_murasame_husband/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_murasame_husband/__init__.py @@ -2,44 +2,24 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def yuzu_soft_murasame_husband(images: list[BuildImage], texts: list[str], args: MemeArgsModel): frame = BuildImage.open(img_dir / "0.png") - ta = "她" - name = ta - if texts: - name = texts[0] - elif args.user_infos: - info = args.user_infos[0] - ta = "他" if info.gender == "male" else "她" - name = info.name or ta - text = f"" - try: - frame.draw_text( - (50, 20, 700, 130), - text, - max_fontsize=70, - min_fontsize=20, - valign="bottom", - ) - except ValueError: - raise TextOverLength(name) def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((200, 200)) return frame.copy().paste(img, (160, 40), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yuzu_soft_murasame_husband", yuzu_soft_murasame_husband, min_images=1, max_images=1, min_texts=0, - max_texts=1, + max_texts=0, keywords=["丛雨老公"], tags=MemeTags.yuzu_soft, date_created=datetime(2024, 7, 26), - date_modified=datetime(2025, 5, 25), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_murasame_ipad/__init__.py b/meme_generator/memes_emoji/yuzu_soft_murasame_ipad/__init__.py index 86117160669566e4e75f5115d60fb11ca4338829..a0a45cd97d5c10710f6877cae755089df715abbd 100644 --- a/meme_generator/memes_emoji/yuzu_soft_murasame_ipad/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_murasame_ipad/__init__.py @@ -2,7 +2,6 @@ from datetime import datetime from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme -from meme_generator.exception import TextOverLength from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" @@ -23,5 +22,5 @@ add_meme( keywords=["丛雨平板"], tags=MemeTags.yuzu_soft, date_created=datetime(2025, 6, 20), - date_modified=datetime(2025, 6, 20), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_murasame_like/__init__.py b/meme_generator/memes_emoji/yuzu_soft_murasame_like/__init__.py index 7852056f4e9beecee9b258baad6c1e53db2801fd..894556ef89964e9dc744cfd5b395a1571f18aaaa 100644 --- a/meme_generator/memes_emoji/yuzu_soft_murasame_like/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_murasame_like/__init__.py @@ -4,7 +4,7 @@ from pil_utils import BuildImage from meme_generator import add_meme from meme_generator.exception import TextOverLength from meme_generator.tags import MemeTags -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif img_dir = Path(__file__).parent / "images" default_text = "丛雨喜欢这个" def yuzu_soft_murasame_like(images: list[BuildImage], texts: list[str], args): @@ -24,7 +24,7 @@ def yuzu_soft_murasame_like(images: list[BuildImage], texts: list[str], args): def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((275, 275), keep_ratio=True) return frame.copy().paste(img, (47, 51), below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yuzu_soft_murasame_like", yuzu_soft_murasame_like, @@ -36,5 +36,5 @@ add_meme( keywords=["丛雨喜欢"], tags=MemeTags.yuzu_soft, date_created=datetime(2025, 5, 25), - date_modified=datetime(2026, 3, 31), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_shocked/__init__.py b/meme_generator/memes_emoji/yuzu_soft_shocked/__init__.py index 33ab2fb006b06f9c7a59633de5b3e13d9014ab08..b539de0a74ae0655695acc476129387cbd3e0d33 100644 --- a/meme_generator/memes_emoji/yuzu_soft_shocked/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_shocked/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def yuzu_soft_shocked(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -30,7 +30,7 @@ def yuzu_soft_shocked(images: list[BuildImage], texts: list[str], args: MemeArgs def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").circle().resize((144, 144)) return frame.copy().paste(img, (0, 423), alpha=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yuzu_soft_shocked", yuzu_soft_shocked, @@ -41,5 +41,5 @@ add_meme( keywords=["震惊柚子厨"], tags=MemeTags.yuzu_soft, date_created=datetime(2024, 7, 26), - date_modified=datetime(2026, 4, 12), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_emoji/yuzu_soft_ticket/__init__.py b/meme_generator/memes_emoji/yuzu_soft_ticket/__init__.py index 973da06a40c1b9e63852890fa3f49a7b93685d86..c3d0a6e74dd19c60e44b7ef72d3eec172b6de332 100644 --- a/meme_generator/memes_emoji/yuzu_soft_ticket/__init__.py +++ b/meme_generator/memes_emoji/yuzu_soft_ticket/__init__.py @@ -3,7 +3,7 @@ from pathlib import Path from pil_utils import BuildImage from meme_generator import MemeArgsModel, add_meme from meme_generator.exception import TextOverLength -from meme_generator.utils import make_jpg_or_gif +from meme_generator.utils import make_png_or_gif from meme_generator.tags import MemeTags img_dir = Path(__file__).parent / "images" def yuzu_soft_ticket(images: list[BuildImage], texts: list[str], args: MemeArgsModel): @@ -31,7 +31,7 @@ def yuzu_soft_ticket(images: list[BuildImage], texts: list[str], args: MemeArgsM def make(imgs: list[BuildImage]) -> BuildImage: img = imgs[0].convert("RGBA").resize((300,300)) return frame.copy().paste(img, (72,330), alpha=True,below=True) - return make_jpg_or_gif(images, make) + return make_png_or_gif(images, make) add_meme( "yuzu_soft_ticket", yuzu_soft_ticket, @@ -42,5 +42,5 @@ add_meme( keywords=["准考证"], tags=MemeTags.yuzu_soft, date_created=datetime(2025, 6, 7), - date_modified=datetime(2025, 6, 7), + date_modified=datetime(2026, 10, 12), ) diff --git a/meme_generator/memes_tudou/nawabao/README.txt b/meme_generator/memes_tudou/nawabao/README.txt new file mode 100644 index 0000000000000000000000000000000000000000..51ba60ff5c452efa534ba66120a040833aa56c67 --- /dev/null +++ b/meme_generator/memes_tudou/nawabao/README.txt @@ -0,0 +1,3 @@ +安装目录:/data/memes/nawabao +帧数:1 +关键词:奶蛙抱 diff --git a/meme_generator/memes_tudou/nawabao/__init__.py b/meme_generator/memes_tudou/nawabao/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..9e5cae3a6041965cc44d1611757cab5b34d21af5 --- /dev/null +++ b/meme_generator/memes_tudou/nawabao/__init__.py @@ -0,0 +1,47 @@ +from datetime import datetime +from pathlib import Path +from meme_generator import add_meme +from meme_generator.utils import save_gif +from PIL import Image, ImageDraw +from PIL.Image import Image as IMG +from pil_utils import BuildImage + +img_dir = Path(__file__).parent / "images" + +def nawabao(images: list[BuildImage], texts, args): + avatar_states = [[(106, 320, 537, 553, 0, False, True)]] + frames: list[IMG] = [] + for i in range(1): + frame = BuildImage.open(img_dir / f"{i}.png") + for n, avatar in enumerate(images): + x, y, w, h, angle, circle, bottom = avatar_states[n][i] + head = avatar.convert("RGBA").resize((w, h), keep_ratio=True) + if circle: + mask = Image.new("L", (w, h), 0) + ImageDraw.Draw(mask).ellipse((0, 0, w - 1, h - 1), fill=255) + head.image.putalpha(mask) + head = head.rotate(angle, expand=True) + if bottom: + frame.paste(head, (x, y), below=True) + for n, avatar in enumerate(images): + x, y, w, h, angle, circle, bottom = avatar_states[n][i] + if not bottom: + head = avatar.convert("RGBA").resize((w, h), keep_ratio=True) + if circle: + mask = Image.new("L", (w, h), 0) + ImageDraw.Draw(mask).ellipse((0, 0, w - 1, h - 1), fill=255) + head.image.putalpha(mask) + head = head.rotate(angle, expand=True) + frame.paste(head, (x, y), alpha=True) + frames.append(frame.image) + return save_gif(frames, 0.067) + +add_meme( + "nawabao", + nawabao, + min_images=1, + max_images=1, + keywords=["奶蛙抱"], + date_created=datetime(2026, 9, 11), + date_modified=datetime(2026, 9, 11), +) diff --git a/meme_generator/memes_tudou/nawabao/images/0.png b/meme_generator/memes_tudou/nawabao/images/0.png new file mode 100644 index 0000000000000000000000000000000000000000..6b18c832ecbec90a4847e581d3c84e9fb7e4b32a --- /dev/null +++ b/meme_generator/memes_tudou/nawabao/images/0.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9a6f8100aa6300aa517dcf3f5679469b4c8426544576a02838b61cf5a4be630f +size 1673356