X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/3a0c83394d5783715fab2be29fa1a9cfc3574e28..ddeba8a8483dc73d0103030afe46fc5bce51d8a0:/src/librarian/covers/widgets/image.py diff --git a/src/librarian/covers/widgets/image.py b/src/librarian/covers/widgets/image.py index 798dfaf..af1e687 100644 --- a/src/librarian/covers/widgets/image.py +++ b/src/librarian/covers/widgets/image.py @@ -2,6 +2,7 @@ # Copyright © Fundacja Wolne Lektury. See NOTICE for more information. # import PIL.Image +import PIL.ImageDraw from librarian import get_resource from .base import Widget @@ -30,3 +31,41 @@ class Label(ImageWidget): else: return get_resource('res/cover/label_WLpolecaja.png') + +class LogoSticker(ImageWidget): + def __init__(self, cover, image_path): + self.image_path = image_path + + def apply(self, img, x, y, w, h, padding_x, padding_y, radius): + my_img = self.build(w, h, padding_x, padding_y, radius) + if my_img is not None: + img.paste( + my_img, + (round(x), round(y - my_img.size[1])), + my_img if self.transparency else None + ) + + + def build(self, w, h, padding_x, padding_y, radius): + img = PIL.Image.open(self.image_path) + uw, uh = w - 2 * padding_x, h - 2 * padding_y + if img.size[1] / img.size[0] > uh / uw: + img = img.resize((round(img.size[0] / img.size[1] * uh), uh)) + else: + img = img.resize((uw, round(img.size[1] / img.size[0] * uw))) + sz = w, img.size[1] + 2 * padding_y + sticker = PIL.Image.new('RGBA', sz) + draw = PIL.ImageDraw.Draw(sticker) + draw.rectangle((0, radius, sz[0], sz[1] - radius), (0, 0, 0)) + draw.rectangle((radius, 0, sz[0] - radius, sz[1]), (0, 0, 0)) + draw.ellipse((0, 0, 2 * radius, 2 * radius), (0, 0, 0)) + draw.ellipse((0, sz[1] - 2 * radius, 2 * radius, sz[1]), (0, 0, 0)) + draw.ellipse((sz[0] - 2 * radius, 0, sz[0], 2 * radius), (0, 0, 0)) + draw.ellipse((sz[0] - 2 * radius, sz[1] - 2 * radius, sz[0], sz[1]), (0, 0, 0)) + sticker.paste( + img, + ( + round(padding_x + (uw - img.size[0]) / 2), padding_y), + img + ) + return sticker