1
0
Fork 0
paraderos_led/GenPoster/scripts/Poster/MyDraw.py

117 lines
3.5 KiB
Python
Raw Normal View History

2023-08-29 00:18:41 -04:00
import requests
import io
from io import BytesIO
from PIL import ImageDraw, ImageFont
from PIL import Image, ImageDraw, ImageFont
import matplotlib.pyplot as plt
import numpy as np
class MyDraw():
def __init__(self, height, width):
self.height = height
self.width = width
pass
def save_image(self, filename):
self.image.save(filename)
pass
def start_draw(self, background_color=None):
if background_color is None:
background_color = self.theme_params['background_color']
self.image = Image.new("RGB", (self.width, self.height), background_color)
self.draw = ImageDraw.Draw(self.image)
pass
def add_image(self, obj, position):
image_to_add = obj.get_image() # Obtiene la imagen del objeto pasado como argumento
if image_to_add:
self.image.paste(image_to_add, position)
pass
def get_draw(self):
return self.draw
def get_image(self):
return self.image
def set_params(self,params):
self.prms = params
pass
def set_theme(self,mode='day'):
if(mode=='day'):
self.start_day_mode()
else:
self.start_night_mode()
pass
def start_day_mode(self):
self.theme_params = {
'background_color': 'white',
'text_color': 'black',
'poster_line_color': 'black',
}
pass
def start_night_mode(self):
self.theme_params = {
'background_color': 'black',
'text_color': 'white',
'poster_line_color': 'gray',
}
pass
def load_barlow(self, font_size=None):
# Ruta a la fuente TTF personalizada
2024-02-19 17:12:49 -03:00
# font_path = "../../assets/fonts/Barlow-Medium.ttf"
font_path = "assets/fonts/Barlow-Medium.ttf"
2023-08-29 00:18:41 -04:00
# Carga la fuente
if font_size is None:
self.font = ImageFont.truetype(font_path, self.prms['font_size'])
else:
self.font = ImageFont.truetype(font_path, font_size)
pass
def preview(self):
plt.imshow(self.image)
plt.axis('off')
plt.show()
def crop_image(self, top_cut, bottom_cut):
width, height = self.image.size
self.image = self.image.crop((0, top_cut, width, height - bottom_cut))
pass
def resize_image(self, target_width=None, target_height=None):
"""
Ajusta el tamaño de la imagen mientras mantiene las proporciones.
Args:
image (PIL.Image.Image): La imagen a redimensionar.
target_width (int, opcional): El ancho objetivo deseado.
target_height (int, opcional): La altura objetivo deseada.
Returns:
PIL.Image.Image: La imagen redimensionada.
"""
width, height = self.image.size
aspect_ratio = width / height
if target_width is None and target_height is None:
raise ValueError("Debes proporcionar al menos una de las dimensiones objetivo.")
if target_width is not None and target_height is None:
new_width = target_width
new_height = int(target_width / aspect_ratio)
elif target_width is None and target_height is not None:
new_width = int(target_height * aspect_ratio)
new_height = target_height
else:
new_width = target_width
new_height = target_height
self.image = self.image.resize((new_width, new_height))
pass