def preview_from_xml(request): from hashlib import sha1 import Image from os import makedirs from lxml import etree from librarian.cover import WLCover from librarian.dcparser import BookInfo xml = request.POST['xml'] try: info = BookInfo.from_string(xml.encode('utf-8')) except: return HttpResponse(os.path.join(settings.STATIC_URL, "img/sample_cover.png")) coverid = sha1(etree.tostring(info.to_etree())).hexdigest() cover = WLCover(info) cover_dir = 'cover/preview' try: makedirs(os.path.join(settings.MEDIA_ROOT, cover_dir)) except OSError: pass fname = os.path.join(cover_dir, "%s.%s" % (coverid, cover.ext())) image = cover.image().resize(PREVIEW_SIZE, Image.ANTIALIAS) image.save(os.path.join(settings.MEDIA_ROOT, fname)) return HttpResponse(os.path.join(settings.MEDIA_URL, fname))
def preview(request, book, chunk=None, rev=None): """Creates a cover image. If chunk and rev number are given, use version from given revision. If rev is not given, use publishable version. """ import Image from librarian.cover import WLCover from librarian.dcparser import BookInfo chunk = Chunk.get(book, chunk) if rev is not None: try: revision = chunk.at_revision(rev) except Chunk.change_model.DoesNotExist: raise Http404 else: revision = chunk.publishable() if revision is None: raise Http404 xml = revision.materialize().encode('utf-8') try: info = BookInfo.from_string(xml) except: return HttpResponseRedirect(os.path.join(settings.STATIC_URL, "img/sample_cover.png")) cover = WLCover(info) response = HttpResponse(mimetype=cover.mime_type()) image = cover.image().resize(PREVIEW_SIZE, Image.ANTIALIAS) image.save(response, cover.format) return response
def build_cover(self, book_info=None): """(Re)builds the cover image.""" from StringIO import StringIO from django.core.files.base import ContentFile from librarian.cover import WLCover if book_info is None: book_info = self.wldocument().book_info cover = WLCover(book_info).image() imgstr = StringIO() cover.save(imgstr, 'png') self.cover.save(None, ContentFile(imgstr.getvalue()))
def transform(cls, wldoc, fieldfile): from librarian.cover import WLCover return WLCover(wldoc.book_info, height=193).output_file()