from .utils.textbox import DoesNotFit
from .widgets.author import AuthorBox
from .widgets.background import Background
-from .widgets.image import WLLogo, Label
+from .widgets.image import WLLogo, Label, LogoSticker
from .widgets.marquise import Marquise
from .widgets.title import TitleBox
margin = 100
logo_h = 177
author_width = 1300
+ sticker_size = 400
+ sticker_padding_x = 30
+ sticker_padding_y = 50
+ sticker_radius = 10
title_box_top = 262
)
WLLogo(self).apply(img, self.m.margin, self.m.margin, None, self.m.logo_h)
-
+
+ if self.cover_logo:
+ LogoSticker(self, self.cover_logo).apply(
+ img,
+ self.m.width - self.m.margin - self.m.sticker_size,
+ self.m.height - self.m.margin,
+ self.m.sticker_size, self.m.sticker_size, self.m.sticker_padding_x, self.m.sticker_padding_y, self.m.sticker_radius
+ )
for logo in self.additional_logos:
LogoSticker(self, logo).apply(img, 0, 0)
# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
#
import PIL.Image
+import PIL.ImageDraw
from librarian import get_resource
from .base import Widget
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