From dc777feea8f9860195b7929f95f4e89d0c712ab3 Mon Sep 17 00:00:00 2001 From: HeyMoon <101842728+UnironicHeyMoon@users.noreply.github.com> Date: Thu, 11 Aug 2022 19:34:44 -0500 Subject: [PATCH] Webcomics, Captions --- Little Story.ttf | Bin 0 -> 62844 bytes pillow_fight.py | 180 ++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 155 insertions(+), 25 deletions(-) create mode 100644 Little Story.ttf diff --git a/Little Story.ttf b/Little Story.ttf new file mode 100644 index 0000000000000000000000000000000000000000..0d9b502b47be8cea8d98872bc746df286077f8a0 GIT binary patch literal 62844 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 Image: + return Image.new(mode="RGB", size=(self.PANEL_SIZE,self.PANEL_SIZE), color=(255,255,255)) + +class OneCharacterWebcomicPanel(WebcomicPanel): + def __init__(self, emoji, caption): + self.emoji = emoji + self.caption = caption + + def create_image(self) -> Image: + base = super().create_image() + panel_size_x, panel_size_y = base.size + + # We put marsey in the bottom left quadrant + emoji_region_x_size = int(panel_size_x/2) + emoji_region_y_size = int(panel_size_y/2) + emoji_placement_position_x = 0 + emoji_placement_position_y = int(panel_size_y/2) + emoji = get_emoji_from_rdrama(self.emoji) + center_and_paste(base, emoji, (emoji_placement_position_x, emoji_placement_position_y), (emoji_region_x_size, emoji_region_y_size)) + + # We put the text in the top half of the panel. + text_region_x_size = int(panel_size_x) + text_region_y_size = int(panel_size_y/2) + add_text(base, self.caption, (text_region_x_size, text_region_y_size), (0,0), font=super().FONT) + + return add_border_to_image(base) + +class TwoCharacterWebcomicPanel(WebcomicPanel): + def __init__(self, left_emoji, left_caption, right_emoji, right_caption): + self.left_emoji = left_emoji + self.left_caption = left_caption + self.right_emoji = right_emoji + self.right_caption = right_caption + + def create_image(self) -> Image: + base = super().create_image() + panel_size_x, panel_size_y = base.size + + # We put the left marsey in the bottom left quadrant + left_emoji_region_x_size = int(panel_size_x/2) + left_emoji_region_y_size = int(panel_size_y/2) + left_emoji_placement_position_x = 0 + left_emoji_placement_position_y = int(panel_size_y/2) + left_emoji = get_emoji_from_rdrama(self.left_emoji) + center_and_paste(base, left_emoji, (left_emoji_placement_position_x, left_emoji_placement_position_y), (left_emoji_region_x_size, left_emoji_region_y_size)) + + # We put the right marsey in the bottom right quadrant + right_emoji_region_x_size = int(panel_size_x/2) + right_emoji_region_y_size = int(panel_size_y/2) + right_emoji_placement_position_x = int(panel_size_x/2) + right_emoji_placement_position_y = int(panel_size_y/2) + right_emoji = get_emoji_from_rdrama(self.right_emoji) + center_and_paste(base, right_emoji, (right_emoji_placement_position_x, right_emoji_placement_position_y), (right_emoji_region_x_size, right_emoji_region_y_size)) + + #Each text caption will get 5/8 of the width, and 1/4 of the height of the panel. + #The left caption will be all the way to the left. The right caption will be 3/8 to the right. + + CAPTION_UNITS = 5 + CAPTION_DIVISOR = 8 + + # We put the text in the top half of the panel. + left_text_region_x_size = int(CAPTION_UNITS*(panel_size_x/CAPTION_DIVISOR)) + left_text_region_y_size = int(panel_size_y/4) + left_text_region_x_position = 0 + left_text_region_y_position = 0 + add_text(base, self.left_caption, (left_text_region_x_size, left_text_region_y_size), (left_text_region_x_position,left_text_region_y_position), font=super().FONT) + + # We put the text in the top half of the panel. + right_text_region_x_size = int(CAPTION_UNITS*(panel_size_x/CAPTION_DIVISOR)) + right_text_region_y_size = int(panel_size_y/4) + right_text_region_x_position = int((CAPTION_DIVISOR-CAPTION_UNITS)*(panel_size_x/8)) + right_text_region_y_position = int(panel_size_y/4) + add_text(base, self.right_caption, (right_text_region_x_size, right_text_region_y_size), (right_text_region_x_position,right_text_region_y_position), font=super().FONT) + + return add_border_to_image(base) + +class TitleCardWebcomicPanel(WebcomicPanel): + def __init__(self, caption): + self.caption = caption + + def create_image(self) -> Image: + base = super().create_image() + + add_text(base, self.caption, base.size, (0,0), font=super().FONT) + + return add_border_to_image(base) + +def create_webcomic(layout : 'list[WebcomicPanel]'): + assumed_panel_x_size, assumed_panel_y_size = layout[0].create_image().size + total_image_x_size = assumed_panel_x_size * 2 + total_image_y_size = assumed_panel_x_size * math.ceil(len(layout)/2) + + image = Image.new(mode="RGB", size=(total_image_x_size, total_image_y_size), color=(255,255,255)) + for i in range(len(layout)): + panel = layout[i] + x = i%2 + y = math.floor(i/2) + image.paste(panel.create_image(), (x*assumed_panel_x_size, y*assumed_panel_y_size)) + return add_watermark(image) + def add_text(base : Image, caption : str, region_size : tuple[int, int], coordinates : tuple[int, int], font : str= "arial.ttf"): + if caption == "": + return region_x_size, region_y_size = region_size line_image = ImageText((region_x_size, region_y_size)) line_image.fill_text_box((0,0), caption, region_x_size, region_y_size, font_filename=font) @@ -53,7 +164,7 @@ def add_watermark(image : Image): base = Image.new(mode="RGB", size=(image_size_x, image_size_y + WATERMARK_HEIGHT), color=(255,255,255)) base.paste(image) - marsey = get_emoji_from_rdrama("marseybangfast") + marsey = get_emoji_from_rdrama("marseyjamming") marsey = ImageOps.contain(marsey, (WATERMARK_HEIGHT, WATERMARK_HEIGHT)) base.paste(marsey, (0, image_size_y), marsey) @@ -65,6 +176,8 @@ def add_watermark(image : Image): return base def center_and_paste(base : Image, to_paste : Image, coordinates: tuple[int, int], box_size : tuple[int, int]): + to_paste = ImageOps.contain(to_paste, box_size) + image_size_x, image_size_y = to_paste.size box_size_x, box_size_y = box_size @@ -80,6 +193,19 @@ def center_and_paste(base : Image, to_paste : Image, coordinates: tuple[int, int base.paste(to_paste, (x, y), to_paste) +def add_border_to_image(image : Image, thickness : int = 5): + # image_draw = ImageDraw.Draw(image) + # image_x_size, image_y_size = image.size + # inner_rectangle_x_size, inner_rectangle_y_size = image_x_size - 2*thickness, image_y_size - 2*thickness + # image_draw.rectangle([(0,0),(image_x_size, image_y_size)], fill="black") + # image_draw.rectangle([(thickness, thickness),(image_x_size-thickness, image_y_size-thickness)], fill="white") + inner_image_x_size, inner_image_y_size = image.size + outer_image_x_size, outer_image_y_size = inner_image_x_size + 2*thickness, inner_image_y_size + 2*thickness + outside_image = Image.new(mode="RGB", size=(outer_image_x_size,outer_image_y_size), color=(0,0,0)) + + outside_image.paste(image, (thickness, thickness)) + return outside_image + def wrap_text_for_font(text, region_size, font_size) -> Image: image = Image.new(mode="RGB", size=region_size, color=(255,255,255)) imageDraw = ImageDraw.ImageDraw() @@ -91,7 +217,12 @@ def get_emoji_from_rdrama(emoji_name): if '!' in emoji_name: cleaned_emoji_name = cleaned_emoji_name.replace("!", "") should_flip = True - image = get_image_file_from_url(f"https://www.rdrama.net/e/{cleaned_emoji_name}.webp") + + if (exists(f"emoji_cache/{cleaned_emoji_name}.webp")): + image = Image.open(f"emoji_cache/{cleaned_emoji_name}.webp") + else: + image = get_image_file_from_url(f"https://www.rdrama.net/e/{cleaned_emoji_name}.webp") + image.save(f"emoji_cache/{cleaned_emoji_name}.webp") if should_flip: image = ImageOps.mirror(image) return image @@ -102,14 +233,13 @@ def get_image_file_from_url(url): im = Image.open(image_file) return im -#get_emoji_from_rdrama("zoomersoy").show() +#create_soy_vs_chad_meme("bigsmilesoyjak", "!marseyshooting", "I have fun new toys and games for your children", "Die").show() -create_soy_vs_chad_meme("bigsmilesoyjak", "!marseyshooting", "I have fun new toys and games for your children", "Die").show() - -# base_image = Image.new(mode="RGB", size=(1000,1000), color=(255,255,255)) -# marppy_image = Image.open("marppy.webp") -# base_image.paste(marppy_image, (0,0), marppy_image) -# I1 = ImageDraw.Draw(base_image) -# font = ImageFont.truetype("impact.ttf", 65) -# I1.text((300, 0), "GO HOME GAMER GIRL", font=font, fill=(255, 0, 0)) -# base_image.show() \ No newline at end of file +create_webcomic([ + TwoCharacterWebcomicPanel("soyjak", "Black people deserve the rope", "marseyconfused", "Why?"), + TwoCharacterWebcomicPanel("seethejak", "Because they are degenerate!!!", "marseysmug", "Kinda like you?"), + OneCharacterWebcomicPanel("soycry", "No!! I am a pure aryan white boy and I am special Hitler told me so, so fuck off you nigger cunt. God I hate you so much, if I commit suicide its gonna be your fault, fuck you"), + TitleCardWebcomicPanel("One Hour Later..."), + TwoCharacterWebcomicPanel("marseytombstone", "", "!marseycry", "He had so much to live for"), + OneCharacterWebcomicPanel("marseylaugh", "Just Kidding!") +]).show() \ No newline at end of file