X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/13480b3da2d3da87f1d99c6d340c1553ca9d89c1..d8393802a7cb8d84a3b3c989ea30b4ba21d9a8da:/librarian/formats/cover/__init__.py diff --git a/librarian/formats/cover/__init__.py b/librarian/formats/cover/__init__.py index 7a787e8..4788e39 100644 --- a/librarian/formats/cover/__init__.py +++ b/librarian/formats/cover/__init__.py @@ -4,9 +4,9 @@ # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # import re -from PIL import Image, ImageFont, ImageDraw, ImageFilter, ImageEnhance +from PIL import Image, ImageFont, ImageDraw, ImageFilter from StringIO import StringIO -from librarian import DCNS, URLOpener +from librarian import DCNS, BuildError from librarian.output import OutputFile from librarian.utils import get_resource from librarian.formats import Format @@ -126,6 +126,7 @@ class Cover(Format): logo_bottom = None logo_width = None + logo_file = get_resource('res/wl-logo.png') uses_dc_cover = False format = 'JPEG' @@ -142,6 +143,7 @@ class Cover(Format): } def __init__(self, doc, format=None, width=None, height=None): + super(Cover, self).__init__(doc) self.author = ", ".join(auth for auth in doc.meta.get(DCNS('creator'))) self.title = doc.meta.title() if format is not None: @@ -163,15 +165,21 @@ class Cover(Format): img = Image.new('RGB', (metr.width, metr.height), self.background_color) if self.background_img: + IMG_EXT = ('png', 'jpg', 'jpeg') + if '.' not in self.background_img or self.background_img.rsplit('.')[1].lower() not in IMG_EXT: + raise BuildError('Wrong cover format, should be PNG or JPG') background = Image.open(self.background_img) - img.paste(background, None, background) - del background + resized = background.resize((1024, background.height*1024/background.width), Image.ANTIALIAS) + resized = resized.convert('RGBA') + img.paste(resized, (0, 0), resized) + del background, resized - # WL logo if metr.logo_width: - logo = Image.open(get_resource('res/wl-logo.png')) - logo = logo.resize((metr.logo_width, logo.size[1] * metr.logo_width / logo.size[0])) - img.paste(logo, ((metr.width - metr.logo_width) / 2, img.size[1] - logo.size[1] - metr.logo_bottom)) + logo = Image.open(self.logo_file) + logo = logo.resize((metr.logo_width, logo.size[1] * metr.logo_width / logo.size[0]), Image.ANTIALIAS) + logo = logo.convert('RGBA') + img.paste(logo, ((metr.width - metr.logo_width) / 2, + img.size[1] - logo.size[1] - metr.logo_bottom), logo) top = metr.author_top tbox = TextBox( @@ -181,7 +189,8 @@ class Cover(Format): author_font = ImageFont.truetype( self.author_font_ttf, metr.author_font_size) - tbox.text(self.pretty_author(), self.author_color, author_font, + tbox.text( + self.pretty_author(), self.author_color, author_font, metr.author_lineskip, self.author_shadow) text_img = tbox.image() img.paste(text_img, (metr.author_margin_left, top), text_img) @@ -193,15 +202,16 @@ class Cover(Format): ) title_font = ImageFont.truetype( self.title_font_ttf, metr.title_font_size) - tbox.text(self.pretty_title(), self.title_color, title_font, + tbox.text( + self.pretty_title(), self.title_color, title_font, metr.title_lineskip, self.title_shadow) text_img = tbox.image() img.paste(text_img, (metr.title_margin_left, top), text_img) return img - imgstr = StringIO() - img.save(imgstr, format=self.format, quality=95) - OutputFile.from_string(imgstr.getvalue()) + # imgstr = StringIO() + # img.save(imgstr, format=self.format, quality=95) + # OutputFile.from_stringing(imgstr.getvalue()) def mime_type(self): return self.mime_types[self.format]