mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Fix cover not displaying in Adobe DE for epub files
This commit is contained in:
parent
69671e1386
commit
de679ed342
@ -35,10 +35,6 @@ Conversion of HTML/OPF files follows several stages:
|
|||||||
import os, sys, cStringIO, logging, re
|
import os, sys, cStringIO, logging, re
|
||||||
|
|
||||||
from lxml.etree import XPath
|
from lxml.etree import XPath
|
||||||
try:
|
|
||||||
from PIL import Image as PILImage
|
|
||||||
except ImportError:
|
|
||||||
import Image as PILImage
|
|
||||||
|
|
||||||
from calibre.ebooks.html import Processor, merge_metadata, get_filelist,\
|
from calibre.ebooks.html import Processor, merge_metadata, get_filelist,\
|
||||||
opf_traverse, create_metadata, rebase_toc
|
opf_traverse, create_metadata, rebase_toc
|
||||||
@ -134,16 +130,6 @@ def parse_content(filelist, opts, tdir):
|
|||||||
|
|
||||||
return resource_map, hp.htmlfile_map, toc, stylesheet_map
|
return resource_map, hp.htmlfile_map, toc, stylesheet_map
|
||||||
|
|
||||||
def resize_cover(im, opts):
|
|
||||||
width, height = im.size
|
|
||||||
dw, dh = (opts.profile.screen_size[0]-width)/float(width), (opts.profile.screen_size[1]-height)/float(height)
|
|
||||||
delta = min(dw, dh)
|
|
||||||
if delta > 0:
|
|
||||||
nwidth = int(width + delta*(width))
|
|
||||||
nheight = int(height + delta*(height))
|
|
||||||
im = im.resize((int(nwidth), int(nheight)), PILImage.ANTIALIAS)
|
|
||||||
return im
|
|
||||||
|
|
||||||
TITLEPAGE = '''\
|
TITLEPAGE = '''\
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||||
<head>
|
<head>
|
||||||
@ -162,6 +148,31 @@ TITLEPAGE = '''\
|
|||||||
</html>
|
</html>
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
def create_cover_image(src, dest, screen_size):
|
||||||
|
from PyQt4.Qt import QApplication, QImage, Qt
|
||||||
|
if QApplication.instance() is None:
|
||||||
|
app = QApplication([])
|
||||||
|
app
|
||||||
|
im = QImage()
|
||||||
|
try:
|
||||||
|
im.load(src)
|
||||||
|
if im.isNull():
|
||||||
|
raise ValueError
|
||||||
|
if screen_size is not None:
|
||||||
|
width, height = im.width(), im.height()
|
||||||
|
dw, dh = (screen_size[0]-width)/float(width), (screen_size[1]-height)/float(height)
|
||||||
|
delta = min(dw, dh)
|
||||||
|
if delta > 0:
|
||||||
|
nwidth = int(width + delta*(width))
|
||||||
|
nheight = int(height + delta*(height))
|
||||||
|
im = im.scaled(int(nwidth), int(nheight), Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
|
||||||
|
im.save(dest)
|
||||||
|
except:
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
return False
|
||||||
|
return True
|
||||||
|
|
||||||
def process_title_page(mi, filelist, htmlfilemap, opts, tdir):
|
def process_title_page(mi, filelist, htmlfilemap, opts, tdir):
|
||||||
old_title_page = None
|
old_title_page = None
|
||||||
f = lambda x : os.path.normcase(os.path.normpath(x))
|
f = lambda x : os.path.normcase(os.path.normpath(x))
|
||||||
@ -176,35 +187,20 @@ def process_title_page(mi, filelist, htmlfilemap, opts, tdir):
|
|||||||
|
|
||||||
cpath = '/'.join(('resources', '_cover_.jpg'))
|
cpath = '/'.join(('resources', '_cover_.jpg'))
|
||||||
cover_dest = os.path.join(tdir, 'content', *cpath.split('/'))
|
cover_dest = os.path.join(tdir, 'content', *cpath.split('/'))
|
||||||
with open(cover_dest, 'wb') as f_cover_dest:
|
if metadata_cover is not None:
|
||||||
if metadata_cover is not None:
|
if not create_cover_image(metadata_cover, cover_dest, opts.profile.screen_size):
|
||||||
with open(metadata_cover, 'rb') as src:
|
metadata_cover = None
|
||||||
try:
|
|
||||||
im = PILImage.open(src).convert('RGB')
|
specified_cover = opts.cover
|
||||||
if opts.profile.screen_size is not None:
|
if specified_cover and not os.path.exists(specified_cover):
|
||||||
im = resize_cover(im, opts)
|
specified_cover = None
|
||||||
im.save(f_cover_dest, format='jpeg')
|
if specified_cover is not None:
|
||||||
metadata_cover = im
|
if not create_cover_image(specified_cover, cover_dest, opts.profile.screen_size):
|
||||||
except:
|
|
||||||
metadata_cover = None
|
|
||||||
|
|
||||||
specified_cover = opts.cover
|
|
||||||
if specified_cover and not os.path.exists(specified_cover):
|
|
||||||
specified_cover = None
|
specified_cover = None
|
||||||
if specified_cover is not None:
|
|
||||||
with open(specified_cover, 'rb') as src:
|
cover = metadata_cover if specified_cover is None or (opts.prefer_metadata_cover and metadata_cover is not None) else specified_cover
|
||||||
try:
|
|
||||||
im = PILImage.open(src).convert('RGB')
|
|
||||||
if opts.profile.screen_size is not None:
|
|
||||||
im = resize_cover(im, opts)
|
|
||||||
specified_cover = im
|
|
||||||
im.save(f_cover_dest, format='jpeg')
|
|
||||||
except:
|
|
||||||
specified_cover = None
|
|
||||||
|
|
||||||
cover = metadata_cover if specified_cover is None or (opts.prefer_metadata_cover and metadata_cover is not None) else specified_cover
|
|
||||||
|
|
||||||
if hasattr(cover, 'save'):
|
if cover is not None:
|
||||||
titlepage = TITLEPAGE%cpath
|
titlepage = TITLEPAGE%cpath
|
||||||
tp = 'calibre_title_page.html' if old_title_page is None else old_title_page
|
tp = 'calibre_title_page.html' if old_title_page is None else old_title_page
|
||||||
tppath = os.path.join(tdir, 'content', tp)
|
tppath = os.path.join(tdir, 'content', tp)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user