diff --git a/src/calibre/ebooks/metadata/sources/covers.py b/src/calibre/ebooks/metadata/sources/covers.py index 89326a2d11..6a401dae60 100644 --- a/src/calibre/ebooks/metadata/sources/covers.py +++ b/src/calibre/ebooks/metadata/sources/covers.py @@ -15,7 +15,8 @@ from io import BytesIO from calibre.customize.ui import metadata_plugins from calibre.ebooks.metadata.sources.base import create_log from calibre.ebooks.metadata.sources.prefs import msprefs -from calibre.utils.magick.draw import Image, save_cover_data_to +from calibre.utils.img import save_cover_data_to +from calibre.utils.imghdr import identify class Worker(Thread): @@ -59,17 +60,19 @@ def is_worker_alive(workers): def process_result(log, result): plugin, data = result try: - im = Image() - im.load(data) if getattr(plugin, 'auto_trim_covers', False): + from calibre.utils.magick import Image + im = Image() + im.load(data) im.trim(10) - width, height = im.size - fmt = im.format - + data = im.export('JPEG') + fmt, width, height = identify(data) + if width < 0 or height < 0: + raise ValueError('Could not read cover image dimensions') if width < 50 or height < 50: raise ValueError('Image too small') - data = save_cover_data_to(im, '/cover.jpg', return_data=True) - except: + data = save_cover_data_to(data) + except Exception: log.exception('Invalid cover from', plugin.name) return None return (plugin, width, height, fmt, data)