centering and such
parent
f77c9c09c6
commit
5afd9656cc
|
@ -1 +1,3 @@
|
||||||
__pycache__/image_utils.cpython-39.pyc
|
__pycache__/image_utils.cpython-39.pyc
|
||||||
|
emoji_cache/
|
||||||
|
*.ttf
|
|
@ -72,7 +72,7 @@ class ImageText(object):
|
||||||
justify_last_line=False):
|
justify_last_line=False):
|
||||||
font_size = start_font_size
|
font_size = start_font_size
|
||||||
while True:
|
while True:
|
||||||
width, height, box_width = self.write_text_box(xy, text, box_width,
|
width, height, box_width, _ = self.write_text_box(xy, text, box_width,
|
||||||
font_filename, font_size, color, place)
|
font_filename, font_size, color, place)
|
||||||
|
|
||||||
if (width >= box_width) or (height >= box_height):
|
if (width >= box_width) or (height >= box_height):
|
||||||
|
@ -108,6 +108,7 @@ class ImageText(object):
|
||||||
lines = [' '.join(line) for line in lines if line]
|
lines = [' '.join(line) for line in lines if line]
|
||||||
|
|
||||||
height = y
|
height = y
|
||||||
|
max_x_size = -1
|
||||||
for index, line in enumerate(lines):
|
for index, line in enumerate(lines):
|
||||||
if place == 'left':
|
if place == 'left':
|
||||||
total_size = self.get_text_size(font_filename, font_size, line)
|
total_size = self.get_text_size(font_filename, font_size, line)
|
||||||
|
@ -147,4 +148,6 @@ class ImageText(object):
|
||||||
self.write_text((last_word_x, height), words[-1], font_filename,
|
self.write_text((last_word_x, height), words[-1], font_filename,
|
||||||
font_size, color)
|
font_size, color)
|
||||||
height += text_height
|
height += text_height
|
||||||
return (total_size[0], height - y, box_width)
|
if total_size[0] > max_x_size:
|
||||||
|
max_x_size = total_size[0]
|
||||||
|
return (total_size[0], height - y, box_width, max_x_size)
|
|
@ -55,27 +55,28 @@ class WebcomicPanel():
|
||||||
return Image.new(mode="RGB", size=(self.PANEL_SIZE,self.PANEL_SIZE), color=(255,255,255))
|
return Image.new(mode="RGB", size=(self.PANEL_SIZE,self.PANEL_SIZE), color=(255,255,255))
|
||||||
|
|
||||||
class OneCharacterWebcomicPanel(WebcomicPanel):
|
class OneCharacterWebcomicPanel(WebcomicPanel):
|
||||||
def __init__(self, emoji, caption):
|
def __init__(self, emoji, caption, words_in_background):
|
||||||
self.emoji = emoji
|
self.emoji = emoji
|
||||||
self.caption = caption
|
self.caption = caption
|
||||||
|
self.words_in_background = words_in_background
|
||||||
|
|
||||||
def create_image(self) -> Image:
|
def create_image(self) -> Image:
|
||||||
base = super().create_image()
|
base = super().create_image()
|
||||||
panel_size_x, panel_size_y = base.size
|
panel_size_x, panel_size_y = base.size
|
||||||
|
|
||||||
|
# We put the text in the background of the panel.
|
||||||
|
text_region_x_size = int(panel_size_x)
|
||||||
|
text_region_y_size = int(panel_size_y if self.words_in_background else panel_size_y/2)
|
||||||
|
add_text(base, self.caption, (text_region_x_size, text_region_y_size), (0,0), font=super().FONT)
|
||||||
|
|
||||||
# We put marsey in the bottom left quadrant
|
# We put marsey in the bottom left quadrant
|
||||||
emoji_region_x_size = int(panel_size_x/2)
|
emoji_region_x_size = int(panel_size_x)
|
||||||
emoji_region_y_size = int(panel_size_y/2)
|
emoji_region_y_size = int(panel_size_y/2)
|
||||||
emoji_placement_position_x = 0
|
emoji_placement_position_x = 0
|
||||||
emoji_placement_position_y = int(panel_size_y/2)
|
emoji_placement_position_y = int(panel_size_y/2)
|
||||||
emoji = get_emoji_from_rdrama(self.emoji)
|
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))
|
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)
|
return add_border_to_image(base)
|
||||||
|
|
||||||
class TwoCharacterWebcomicPanel(WebcomicPanel):
|
class TwoCharacterWebcomicPanel(WebcomicPanel):
|
||||||
|
@ -134,7 +135,7 @@ class TitleCardWebcomicPanel(WebcomicPanel):
|
||||||
def create_image(self) -> Image:
|
def create_image(self) -> Image:
|
||||||
base = super().create_image()
|
base = super().create_image()
|
||||||
|
|
||||||
add_text(base, self.caption, base.size, (0,0), font=super().FONT)
|
add_text_box(base, self.caption, base.size, (0,0), font=super().FONT, init_font_size=90, align="cvch")
|
||||||
|
|
||||||
return add_border_to_image(base)
|
return add_border_to_image(base)
|
||||||
|
|
||||||
|
@ -160,25 +161,35 @@ def add_text_box(base : Image, caption : str, region_size : tuple[int, int], coo
|
||||||
region_x_size, region_y_size = region_size
|
region_x_size, region_y_size = region_size
|
||||||
line_image = ImageText((region_x_size, region_y_size))
|
line_image = ImageText((region_x_size, region_y_size))
|
||||||
actual_text_box_size = line_image.write_text_box((0,0), caption, region_x_size, font_size=init_font_size, font_filename=font)
|
actual_text_box_size = line_image.write_text_box((0,0), caption, region_x_size, font_size=init_font_size, font_filename=font)
|
||||||
actual_text_box_x_size, actual_text_box_y_size, input_text_block_x_size = actual_text_box_size
|
_, actual_text_box_y_size, input_text_block_x_size, actual_text_box_x_size = actual_text_box_size
|
||||||
if actual_text_box_y_size <= region_y_size:
|
if actual_text_box_y_size <= region_y_size:
|
||||||
actual_paste_x_coordinates, actual_paste_y_coordinates = coordinates
|
actual_paste_x_coordinates, actual_paste_y_coordinates = coordinates
|
||||||
if align != "":
|
if align != "":
|
||||||
|
y_difference = region_y_size - actual_text_box_y_size
|
||||||
|
x_difference = region_x_size - actual_text_box_x_size
|
||||||
# Horizontal Align
|
# Horizontal Align
|
||||||
if "t" in align:
|
if "t" in align:
|
||||||
#This is the default
|
#This is the default
|
||||||
pass
|
pass
|
||||||
elif "b" in align:
|
elif "b" in align:
|
||||||
y_difference = region_y_size - actual_text_box_y_size
|
|
||||||
actual_paste_y_coordinates+=y_difference
|
actual_paste_y_coordinates+=y_difference
|
||||||
|
elif "cv" in align:
|
||||||
|
text_box_center_y_position = int(actual_text_box_y_size/2)
|
||||||
|
region_center_y_position = int(region_y_size/2)
|
||||||
|
actual_paste_y_coordinates = region_center_y_position - text_box_center_y_position
|
||||||
|
|
||||||
if "l" in align:
|
if "l" in align:
|
||||||
#This is the default
|
#This is the default
|
||||||
pass
|
pass
|
||||||
elif "r" in align:
|
elif "r" in align:
|
||||||
x_difference = region_x_size - actual_text_box_x_size
|
|
||||||
actual_paste_x_coordinates+=x_difference
|
actual_paste_x_coordinates+=x_difference
|
||||||
|
elif "ch" in align:
|
||||||
|
text_box_center_x_position = int(actual_text_box_x_size/2)
|
||||||
|
region_center_x_position = int(region_x_size/2)
|
||||||
|
actual_paste_x_coordinates = region_center_x_position - text_box_center_x_position
|
||||||
|
image_draw = ImageDraw.Draw(base)
|
||||||
|
image_draw.rectangle(((actual_paste_x_coordinates, actual_paste_y_coordinates), (actual_paste_x_coordinates+actual_text_box_x_size, actual_text_box_y_size+actual_paste_y_coordinates)), fill="tan")
|
||||||
base.paste(line_image.image, (actual_paste_x_coordinates, actual_paste_y_coordinates), line_image.image)
|
base.paste(line_image.image, (actual_paste_x_coordinates, actual_paste_y_coordinates), line_image.image)
|
||||||
else:
|
else:
|
||||||
add_text_box(base, caption, region_size, coordinates, font=font, init_font_size=init_font_size-1)
|
add_text_box(base, caption, region_size, coordinates, font=font, init_font_size=init_font_size-1)
|
||||||
|
@ -227,11 +238,6 @@ def center_and_paste(base : Image, to_paste : Image, coordinates: tuple[int, int
|
||||||
base.paste(to_paste, (x, y), to_paste)
|
base.paste(to_paste, (x, y), to_paste)
|
||||||
|
|
||||||
def add_border_to_image(image : Image, thickness : int = 5):
|
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
|
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
|
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 = Image.new(mode="RGB", size=(outer_image_x_size,outer_image_y_size), color=(0,0,0))
|
||||||
|
@ -266,13 +272,13 @@ def get_image_file_from_url(url):
|
||||||
im = Image.open(image_file)
|
im = Image.open(image_file)
|
||||||
return im
|
return im
|
||||||
|
|
||||||
#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()
|
||||||
|
|
||||||
create_webcomic([
|
# create_webcomic([
|
||||||
TwoCharacterWebcomicPanel("soyjak", "Black people deserve the rope", "marseyconfused", "Why?"),
|
# TwoCharacterWebcomicPanel("soyjak", "Black people deserve the rope", "marseyconfused", "Why?"),
|
||||||
TwoCharacterWebcomicPanel("seethejak", "Because they are degenerate!!!", "marseysmug", "Kinda like you?"),
|
# 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"),
|
# 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, its not fair, why do you always have to bully me around, you are such a bitch, i hate you so much, hitler was right and six million wasnt nearly enough, the jews are responsible for this and they will be punished on the day of the rope, youll be sorry then, plus i am armed and dangerous and i have a gun and i will shoot you if you keep making fun of me plus youll be in troulbe if I kill myself so how do you like that you stupid nigger bitch. fuck", words_in_background=True),
|
||||||
TitleCardWebcomicPanel("One Hour Later..."),
|
# TitleCardWebcomicPanel("One Hour Later..."),
|
||||||
TwoCharacterWebcomicPanel("marseytombstone", "", "!marseycry", "He had so much to live for"),
|
# TwoCharacterWebcomicPanel("marseytombstone", "", "!marseycry", "He had so much to live for"),
|
||||||
OneCharacterWebcomicPanel("marseylaugh", "Just Kidding!")
|
# OneCharacterWebcomicPanel("marseylaugh", "Just Kidding!", False)
|
||||||
]).show()
|
# ]).show()
|
Loading…
Reference in New Issue