Spaces:
Sleeping
Sleeping
| import io | |
| from PIL import Image, ImageDraw, ImageOps, ImageEnhance | |
| from .base import BaseGenerator | |
| class CommonGenerator(BaseGenerator): | |
| def build_template(self, image_data: bytes, element: str) -> Image.Image: | |
| r_color = self.ELEMENT_COLORS.get(element, (156, 163, 175)) | |
| canvas = Image.new("RGBA", (self.CANVAS_W, self.CANVAS_H), (0, 0, 0, 0)) | |
| char_raw = Image.open(io.BytesIO(image_data)).convert("RGBA") | |
| if char_raw.size != (self.CARD_W, self.CARD_H): | |
| char_base = ImageOps.fit(char_raw, (self.CARD_W, self.CARD_H), centering=(0.5, 0.15)) | |
| else: | |
| char_base = char_raw | |
| char_base = ImageEnhance.Contrast(char_base).enhance(1.05) | |
| banner_crop = char_base.crop((0, self.CARD_H - self.BANNER_H, self.CARD_W, self.CARD_H)) | |
| gradient = Image.new("RGBA", banner_crop.size, (20, 20, 25, 200)) | |
| banner_img = Image.alpha_composite(banner_crop, gradient) | |
| banner_draw = ImageDraw.Draw(banner_img) | |
| banner_draw.line([(0, 0), (self.CARD_W, 0)], fill=r_color + (255,), width=2) | |
| banner_img.putalpha(self.create_bottom_rounded_mask(banner_img.size, self.CORNER_RAD)) | |
| char_base.putalpha(self.create_rounded_mask((self.CARD_W, self.CARD_H), self.CORNER_RAD)) | |
| canvas.paste(char_base, (self.OFFSET_X, self.OFFSET_Y), char_base) | |
| canvas.paste(banner_img, (self.OFFSET_X, self.OFFSET_Y + self.CARD_H - self.BANNER_H), banner_img) | |
| ui_layer = Image.new("RGBA", (self.CANVAS_W, self.CANVAS_H), (0, 0, 0, 0)) | |
| uid = ImageDraw.Draw(ui_layer) | |
| uid.rounded_rectangle( | |
| (self.OFFSET_X, self.OFFSET_Y, self.OFFSET_X + self.CARD_W, self.OFFSET_Y + self.CARD_H), | |
| radius=self.CORNER_RAD, | |
| outline=r_color + (200,), | |
| width=2 | |
| ) | |
| canvas.alpha_composite(ui_layer) | |
| return canvas | |