Get rid of ImageMagick in a couple of other places as well

This commit is contained in:
Kovid Goyal 2015-11-13 22:06:10 +05:30
parent 4658a45c83
commit 3e53d5fc07
3 changed files with 10 additions and 11 deletions

View File

@ -32,7 +32,7 @@ from calibre.devices.folder_device.driver import FOLDER_DEVICE
from calibre.devices.bambook.driver import BAMBOOK, BAMBOOKWifi from calibre.devices.bambook.driver import BAMBOOK, BAMBOOKWifi
from calibre.constants import DEBUG from calibre.constants import DEBUG
from calibre.utils.config import tweaks, device_prefs from calibre.utils.config import tweaks, device_prefs
from calibre.utils.magick.draw import thumbnail from calibre.utils.img import scale_image
from calibre.library.save_to_disk import find_plugboard from calibre.library.save_to_disk import find_plugboard
from calibre.ptempfile import PersistentTemporaryFile, force_unicode as filename_to_unicode from calibre.ptempfile import PersistentTemporaryFile, force_unicode as filename_to_unicode
# }}} # }}}
@ -926,7 +926,7 @@ class DeviceMixin(object): # {{{
def set_default_thumbnail(self, height): def set_default_thumbnail(self, height):
img = I('book.png', data=True) img = I('book.png', data=True)
self.default_thumbnail = thumbnail(img, height, height) self.default_thumbnail = scale_image(img, height, height, preserve_aspect_ratio=False)
def connect_to_folder_named(self, folder): def connect_to_folder_named(self, folder):
if os.path.exists(folder) and os.path.isdir(folder): if os.path.exists(folder) and os.path.isdir(folder):
@ -1282,7 +1282,7 @@ class DeviceMixin(object): # {{{
if self.device_manager.device and \ if self.device_manager.device and \
hasattr(self.device_manager.device, 'THUMBNAIL_WIDTH'): hasattr(self.device_manager.device, 'THUMBNAIL_WIDTH'):
try: try:
return thumbnail(data, return scale_image(data,
self.device_manager.device.THUMBNAIL_WIDTH, self.device_manager.device.THUMBNAIL_WIDTH,
self.device_manager.device.THUMBNAIL_HEIGHT, self.device_manager.device.THUMBNAIL_HEIGHT,
preserve_aspect_ratio=False) preserve_aspect_ratio=False)
@ -1292,7 +1292,7 @@ class DeviceMixin(object): # {{{
ht = self.device_manager.device.THUMBNAIL_HEIGHT \ ht = self.device_manager.device.THUMBNAIL_HEIGHT \
if self.device_manager else DevicePlugin.THUMBNAIL_HEIGHT if self.device_manager else DevicePlugin.THUMBNAIL_HEIGHT
try: try:
return thumbnail(data, ht, ht, return scale_image(data, ht, ht,
compression_quality=self.device_manager.device.THUMBNAIL_COMPRESSION_QUALITY) compression_quality=self.device_manager.device.THUMBNAIL_COMPRESSION_QUALITY)
except: except:
pass pass

View File

@ -13,7 +13,7 @@ from Queue import Queue
from calibre import browser from calibre import browser
from calibre.constants import DEBUG from calibre.constants import DEBUG
from calibre.utils.magick.draw import thumbnail from calibre.utils.img import scale_image
class GenericDownloadThreadPool(object): class GenericDownloadThreadPool(object):
''' '''
@ -161,7 +161,7 @@ class CoverThread(Thread):
if result and result.cover_url: if result and result.cover_url:
with closing(self.br.open(result.cover_url, timeout=timeout)) as f: with closing(self.br.open(result.cover_url, timeout=timeout)) as f:
result.cover_data = f.read() result.cover_data = f.read()
result.cover_data = thumbnail(result.cover_data, 64, 64)[2] result.cover_data = scale_image(result.cover_data, 64, 64)[2]
callback() callback()
self.tasks.task_done() self.tasks.task_done()
except: except:

View File

@ -16,10 +16,11 @@ def image_from_data(data):
return i return i
def scale_image(data, width=60, height=80, compression_quality=70, as_png=False, preserve_aspect_ratio=True): def scale_image(data, width=60, height=80, compression_quality=70, as_png=False, preserve_aspect_ratio=True):
''' Scale an image, returning it as either JPEG or PNG data (bytestring).
Transparency is alpha blended with white when converting to JPEG. Is thread
safe and does not require a QApplication. '''
# We use Qt instead of ImageMagick here because ImageMagick seems to use # We use Qt instead of ImageMagick here because ImageMagick seems to use
# some kind of memory pool, causing memory consumption to sky rocket. Since # some kind of memory pool, causing memory consumption to sky rocket.
# we are only using QImage this method is thread safe, and does not require
# a QApplication/GUI thread
if isinstance(data, QImage): if isinstance(data, QImage):
img = data img = data
else: else:
@ -47,5 +48,3 @@ def scale_image(data, width=60, height=80, compression_quality=70, as_png=False,
if not img.save(buf, fmt, quality=compression_quality): if not img.save(buf, fmt, quality=compression_quality):
raise ValueError('Failed to export thumbnail image to: ' + fmt) raise ValueError('Failed to export thumbnail image to: ' + fmt)
return img.width(), img.height(), ba.data() return img.width(), img.height(), ba.data()