Use ImageMagick instead of Qt to generate thumbnails when sending covers to device.

This commit is contained in:
Kovid Goyal 2010-09-04 13:28:09 -06:00
parent 0c9f21ed5b
commit 0bba8cf23d
2 changed files with 24 additions and 20 deletions

View File

@ -9,9 +9,8 @@ from itertools import repeat
from functools import partial
from binascii import unhexlify
from PyQt4.Qt import QMenu, QAction, QActionGroup, QIcon, SIGNAL, QPixmap, \
Qt, pyqtSignal, QColor, QPainter, QDialog, QMessageBox
from PyQt4.QtSvg import QSvgRenderer
from PyQt4.Qt import QMenu, QAction, QActionGroup, QIcon, SIGNAL, \
Qt, pyqtSignal, QDialog, QMessageBox
from calibre.customize.ui import available_input_formats, available_output_formats, \
device_plugins
@ -21,7 +20,7 @@ from calibre.gui2.dialogs.choose_format import ChooseFormatDialog
from calibre.utils.ipc.job import BaseJob
from calibre.devices.scanner import DeviceScanner
from calibre.gui2 import config, error_dialog, Dispatcher, dynamic, \
pixmap_to_data, warning_dialog, \
warning_dialog, \
question_dialog, info_dialog, choose_dir
from calibre.ebooks.metadata import authors_to_string
from calibre import preferred_encoding, prints
@ -34,7 +33,7 @@ from calibre.devices.folder_device.driver import FOLDER_DEVICE
from calibre.ebooks.metadata.meta import set_metadata
from calibre.constants import DEBUG
from calibre.utils.config import prefs, tweaks
from calibre.utils.magick.draw import thumbnail
# }}}
class DeviceJob(BaseJob): # {{{
@ -617,14 +616,8 @@ class DeviceMixin(object): # {{{
self.connect_to_folder_named(tweaks['auto_connect_to_folder'])
def set_default_thumbnail(self, height):
r = QSvgRenderer(I('book.png'))
pixmap = QPixmap(height, height)
pixmap.fill(QColor(255,255,255))
p = QPainter(pixmap)
r.render(p)
p.end()
self.default_thumbnail = (pixmap.width(), pixmap.height(),
pixmap_to_data(pixmap))
img = I('book.png', data=True)
self.default_thumbnail = thumbnail(img, height, height)
def connect_to_folder_named(self, folder):
if os.path.exists(folder) and os.path.isdir(folder):
@ -959,13 +952,12 @@ class DeviceMixin(object): # {{{
self.library_view.model().delete_books_by_id(remove)
def cover_to_thumbnail(self, data):
p = QPixmap()
p.loadFromData(data)
if not p.isNull():
ht = self.device_manager.device.THUMBNAIL_HEIGHT \
if self.device_manager else DevicePlugin.THUMBNAIL_HEIGHT
p = p.scaledToHeight(ht, Qt.SmoothTransformation)
return (p.width(), p.height(), pixmap_to_data(p))
ht = self.device_manager.device.THUMBNAIL_HEIGHT \
if self.device_manager else DevicePlugin.THUMBNAIL_HEIGHT
try:
return thumbnail(data, ht, ht)
except:
pass
def email_news(self, id):
opts = email_config().parse()

View File

@ -8,6 +8,7 @@ __docformat__ = 'restructuredtext en'
from calibre.utils.magick import Image, DrawingWand, create_canvas
from calibre.constants import __appname__, __version__
from calibre import fit_image
def save_cover_data_to(data, path, bgcolor='white', resize_to=None):
'''
@ -23,6 +24,17 @@ def save_cover_data_to(data, path, bgcolor='white', resize_to=None):
canvas.compose(img)
canvas.save(path)
def thumbnail(data, width=120, height=120, bgcolor='white', fmt='jpg'):
img = Image()
img.load(data)
owidth, oheight = img.size
scaled, nwidth, nheight = fit_image(owidth, oheight, width, height)
if scaled:
img.size = (nwidth, nheight)
canvas = create_canvas(img.size[0], img.size[1], bgcolor)
canvas.compose(img)
return (canvas.size[0], canvas.size[1], canvas.export(fmt))
def identify_data(data):
'''
Identify the image in data. Returns a 3-tuple