Use the new cover generation code to generate default covers during conversion

This commit is contained in:
Kovid Goyal 2014-09-14 17:34:36 +05:30
parent 583aa2bf4e
commit 1cb3e02ab8
2 changed files with 17 additions and 11 deletions

View File

@ -22,6 +22,7 @@ from PyQt5.Qt import (
from calibre import force_unicode from calibre import force_unicode
from calibre.constants import __appname__, __version__ from calibre.constants import __appname__, __version__
from calibre.ebooks.metadata import fmt_sidx from calibre.ebooks.metadata import fmt_sidx
from calibre.ebooks.metadata.book.base import Metadata
from calibre.ebooks.metadata.book.formatter import SafeFormat from calibre.ebooks.metadata.book.formatter import SafeFormat
from calibre.gui2 import ensure_app, config, load_builtin_fonts, pixmap_to_data from calibre.gui2 import ensure_app, config, load_builtin_fonts, pixmap_to_data
from calibre.utils.cleantext import clean_ascii_chars, clean_xml_chars from calibre.utils.cleantext import clean_ascii_chars, clean_xml_chars
@ -478,9 +479,19 @@ def override_prefs(base_prefs, **overrides):
return ans return ans
def create_cover(title, authors, series=None, series_index=1, prefs=None, as_qimage=False):
' Create a cover from the specified title, author and series. Any user set'
' templates are ignored, to ensure that the specified metadata is used. '
mi = Metadata(title, authors)
if series:
mi.series, mi.series_index = series, series_index
d = cprefs.defaults
prefs = override_prefs(
prefs or cprefs, title_template=d['title_template'], subtitle_template=d['subtitle_template'], footer_template=d['footer_template'])
return generate_cover(mi, prefs=prefs, as_qimage=as_qimage)
def test(scale=0.5): def test(scale=0.5):
from PyQt5.Qt import QLabel, QApplication, QPixmap, QMainWindow, QWidget, QScrollArea, QGridLayout from PyQt5.Qt import QLabel, QApplication, QPixmap, QMainWindow, QWidget, QScrollArea, QGridLayout
from calibre.ebooks.metadata.book.base import Metadata
app = QApplication([]) app = QApplication([])
mi = Metadata('xxx', ['Kovid Goyal', 'John Q. Doe', 'Author']) mi = Metadata('xxx', ['Kovid Goyal', 'John Q. Doe', 'Author'])
mi.series = 'A series of styles' mi.series = 'A series of styles'

View File

@ -85,23 +85,18 @@ class CoverManager(object):
''' '''
Create a generic cover for books that dont have a cover Create a generic cover for books that dont have a cover
''' '''
from calibre.ebooks.metadata import authors_to_string, fmt_sidx
if self.no_default_cover: if self.no_default_cover:
return None return None
self.log('Generating default cover') self.log('Generating default cover')
m = self.oeb.metadata m = self.oeb.metadata
title = unicode(m.title[0]) title = unicode(m.title[0])
authors = [unicode(x) for x in m.creator if x.role == 'aut'] authors = [unicode(x) for x in m.creator if x.role == 'aut']
series_string = None
if m.series and m.series_index:
series_string = _('Book %(sidx)s of %(series)s')%dict(
sidx=fmt_sidx(m.series_index[0], use_roman=True),
series=unicode(m.series[0]))
try: try:
from calibre.ebooks import calibre_cover from calibre.ebooks.covers import create_cover
img_data = calibre_cover(title, authors_to_string(authors), series = series_index = None
series_string=series_string) if m.series:
series, series_index = unicode(m.series[0]), m.series_index[0]
img_data = create_cover(title, authors, series, series_index)
id, href = self.oeb.manifest.generate('cover', id, href = self.oeb.manifest.generate('cover',
u'cover_image.jpg') u'cover_image.jpg')
item = self.oeb.manifest.add(id, href, guess_type('t.jpg')[0], item = self.oeb.manifest.add(id, href, guess_type('t.jpg')[0],