mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Code to render books without an auto-generated cover
This commit is contained in:
parent
cc8918d470
commit
7a9e791506
@ -440,6 +440,19 @@ def remove_cover_image_in_page(container, page, cover_images):
|
|||||||
break
|
break
|
||||||
|
|
||||||
|
|
||||||
|
def has_epub_cover(container):
|
||||||
|
if find_cover_image(container):
|
||||||
|
return True
|
||||||
|
if find_cover_page(container):
|
||||||
|
return True
|
||||||
|
spine_items = tuple(container.spine_items)
|
||||||
|
if spine_items:
|
||||||
|
candidate = container.abspath_to_name(spine_items[0])
|
||||||
|
if find_cover_image_in_page(container, candidate) is not None:
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def set_epub_cover(container, cover_path, report, options=None, image_callback=None):
|
def set_epub_cover(container, cover_path, report, options=None, image_callback=None):
|
||||||
existing_image = options is not None and options.get('existing_image', False)
|
existing_image = options is not None and options.get('existing_image', False)
|
||||||
if existing_image:
|
if existing_image:
|
||||||
|
@ -25,7 +25,9 @@ from calibre.ebooks.oeb.base import (
|
|||||||
)
|
)
|
||||||
from calibre.ebooks.oeb.iterator.book import extract_book
|
from calibre.ebooks.oeb.iterator.book import extract_book
|
||||||
from calibre.ebooks.oeb.polish.container import Container as ContainerBase
|
from calibre.ebooks.oeb.polish.container import Container as ContainerBase
|
||||||
from calibre.ebooks.oeb.polish.cover import find_cover_image, set_epub_cover
|
from calibre.ebooks.oeb.polish.cover import (
|
||||||
|
find_cover_image, has_epub_cover, set_epub_cover
|
||||||
|
)
|
||||||
from calibre.ebooks.oeb.polish.css import transform_css
|
from calibre.ebooks.oeb.polish.css import transform_css
|
||||||
from calibre.ebooks.oeb.polish.toc import from_xpaths, get_landmarks, get_toc
|
from calibre.ebooks.oeb.polish.toc import from_xpaths, get_landmarks, get_toc
|
||||||
from calibre.ebooks.oeb.polish.utils import extract, guess_type
|
from calibre.ebooks.oeb.polish.utils import extract, guess_type
|
||||||
@ -201,8 +203,9 @@ class Container(ContainerBase):
|
|||||||
|
|
||||||
tweak_mode = True
|
tweak_mode = True
|
||||||
|
|
||||||
def __init__(self, path_to_ebook, tdir, log=None, book_hash=None, save_bookmark_data=False, book_metadata=None):
|
def __init__(self, path_to_ebook, tdir, log=None, book_hash=None, save_bookmark_data=False, book_metadata=None, allow_no_cover=False):
|
||||||
log = log or default_log
|
log = log or default_log
|
||||||
|
self.allow_no_cover = allow_no_cover
|
||||||
book_fmt, opfpath, input_fmt = extract_book(path_to_ebook, tdir, log=log)
|
book_fmt, opfpath, input_fmt = extract_book(path_to_ebook, tdir, log=log)
|
||||||
ContainerBase.__init__(self, tdir, opfpath, log)
|
ContainerBase.__init__(self, tdir, opfpath, log)
|
||||||
self.book_metadata = book_metadata
|
self.book_metadata = book_metadata
|
||||||
@ -318,12 +321,16 @@ class Container(ContainerBase):
|
|||||||
cdata = getattr(image_callback, 'cover_data', None) or generic_cover()
|
cdata = getattr(image_callback, 'cover_data', None) or generic_cover()
|
||||||
data.write(cdata)
|
data.write(cdata)
|
||||||
|
|
||||||
|
if self.allow_no_cover and not has_epub_cover(self):
|
||||||
|
return None, None
|
||||||
raster_cover_name, titlepage_name = set_epub_cover(
|
raster_cover_name, titlepage_name = set_epub_cover(
|
||||||
self, cover_path, (lambda *a: None), options={'template':templ},
|
self, cover_path, (lambda *a: None), options={'template':templ},
|
||||||
image_callback=image_callback)
|
image_callback=image_callback)
|
||||||
else:
|
else:
|
||||||
raster_cover_name = find_cover_image(self, strict=True)
|
raster_cover_name = find_cover_image(self, strict=True)
|
||||||
if raster_cover_name is None:
|
if raster_cover_name is None:
|
||||||
|
if self.allow_no_cover:
|
||||||
|
return None, None
|
||||||
item = self.generate_item(name='cover.jpeg', id_prefix='cover')
|
item = self.generate_item(name='cover.jpeg', id_prefix='cover')
|
||||||
raster_cover_name = self.href_to_name(item.get('href'), self.opf_name)
|
raster_cover_name = self.href_to_name(item.get('href'), self.opf_name)
|
||||||
with self.open(raster_cover_name, 'wb') as dest:
|
with self.open(raster_cover_name, 'wb') as dest:
|
||||||
|
@ -44,9 +44,6 @@ def load_resources(book, root_name, previous_resources, proceed):
|
|||||||
ui_operations.get_file(book, name, got_one)
|
ui_operations.get_file(book, name, got_one)
|
||||||
|
|
||||||
def got_one(data, name, mimetype):
|
def got_one(data, name, mimetype):
|
||||||
if False and name is book.manifest.title_page_name:
|
|
||||||
# Enable to have cover image not preserve aspect ratio
|
|
||||||
data = data.replace('width: auto; height: auto', 'width: 100vw; height: 100vh')
|
|
||||||
ans[name] = v'[data, mimetype]'
|
ans[name] = v'[data, mimetype]'
|
||||||
if jstype(data) is 'string':
|
if jstype(data) is 'string':
|
||||||
find_virtualized_resources(data)
|
find_virtualized_resources(data)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user