X-Git-Url: https://git.mdrn.pl/librarian.git/blobdiff_plain/9e13b0c994e9d481008bef7006a74609adfd16f8..3754989331c91f1d78cd5c1904f768a4cf80f07a:/librarian/cover.py diff --git a/librarian/cover.py b/librarian/cover.py index 23603d6..be34e26 100644 --- a/librarian/cover.py +++ b/librarian/cover.py @@ -3,8 +3,10 @@ # This file is part of Librarian, licensed under GNU Affero GPLv3 or later. # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information. # +import re import Image, ImageFont, ImageDraw, ImageFilter -from librarian import get_resource +from StringIO import StringIO +from librarian import get_resource, OutputFile, URLOpener class TextBox(object): @@ -36,6 +38,7 @@ class TextBox(object): def text(self, text, color='#000', font=None, line_height=20, shadow_color=None): """Writes some centered text.""" + text = re.sub(r'\s+', ' ', text) if shadow_color: if not self.shadow_img: self.shadow_img = Image.new('RGBA', self.img.size) @@ -117,9 +120,11 @@ class Cover(object): 'PNG': 'image/png', } - def __init__(self, book_info): + def __init__(self, book_info, format=None): self.author = ", ".join(auth.readable() for auth in book_info.authors) self.title = book_info.title + if format is not None: + self.format = format def pretty_author(self): """Allows for decorating author's name.""" @@ -178,9 +183,16 @@ class Cover(object): def save(self, *args, **kwargs): return self.image().save(format=self.format, *args, **kwargs) + def output_file(self, *args, **kwargs): + imgstr = StringIO() + self.save(imgstr, *args, **kwargs) + return OutputFile.from_string(imgstr.getvalue()) + class WLCover(Cover): """Default Wolne Lektury cover generator.""" + width = 600 + height = 833 uses_dc_cover = True author_font = ImageFont.truetype( get_resource('fonts/JunicodeWL-Regular.ttf'), 20) @@ -208,15 +220,21 @@ class WLCover(Cover): u'Współczesność': '#06393d', } - def __init__(self, book_info): - super(WLCover, self).__init__(book_info) + def __init__(self, book_info, format=None, image_cache=None): + super(WLCover, self).__init__(book_info, format=format) self.kind = book_info.kind self.epoch = book_info.epoch if book_info.cover_url: - from urllib2 import urlopen - from StringIO import StringIO - - bg_src = urlopen(book_info.cover_url) + url = book_info.cover_url + bg_src = None + if image_cache: + from urllib import quote + try: + bg_src = URLOpener().open(image_cache + quote(url, safe="")) + except: + pass + if bg_src is None: + bg_src = URLOpener().open(url) self.background_img = StringIO(bg_src.read()) bg_src.close() else: