mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-31 14:33:54 -04:00
Fix regression that broke setting of MOBI metadata
This commit is contained in:
parent
fbb87d9f8a
commit
7f6996dcf6
@ -404,14 +404,16 @@ class MetadataUpdater(object):
|
|||||||
if self.cover_record is not None:
|
if self.cover_record is not None:
|
||||||
size = len(self.cover_record)
|
size = len(self.cover_record)
|
||||||
cover = rescale_image(data, size)
|
cover = rescale_image(data, size)
|
||||||
cover += '\0' * (size - len(cover))
|
if len(cover) <= size:
|
||||||
self.cover_record[:] = cover
|
cover += '\0' * (size - len(cover))
|
||||||
|
self.cover_record[:] = cover
|
||||||
if self.thumbnail_record is not None:
|
if self.thumbnail_record is not None:
|
||||||
size = len(self.thumbnail_record)
|
size = len(self.thumbnail_record)
|
||||||
thumbnail = rescale_image(data, size, dimen=MAX_THUMB_DIMEN)
|
thumbnail = rescale_image(data, size, dimen=MAX_THUMB_DIMEN)
|
||||||
thumbnail += '\0' * (size - len(thumbnail))
|
if len(thumbnail) <= size:
|
||||||
self.thumbnail_record[:] = thumbnail
|
thumbnail += '\0' * (size - len(thumbnail))
|
||||||
return
|
self.thumbnail_record[:] = thumbnail
|
||||||
|
return
|
||||||
|
|
||||||
def set_metadata(stream, mi):
|
def set_metadata(stream, mi):
|
||||||
mu = MetadataUpdater(stream)
|
mu = MetadataUpdater(stream)
|
||||||
|
@ -112,15 +112,34 @@ def align_block(raw, multiple=4, pad='\0'):
|
|||||||
|
|
||||||
def rescale_image(data, maxsizeb, dimen=None):
|
def rescale_image(data, maxsizeb, dimen=None):
|
||||||
if dimen is not None:
|
if dimen is not None:
|
||||||
return thumbnail(data, width=dimen, height=dimen)[-1]
|
data = thumbnail(data, width=dimen, height=dimen)[-1]
|
||||||
# Replace transparent pixels with white pixels and convert to JPEG
|
else:
|
||||||
data = save_cover_data_to(data, 'img.jpg', return_data=True)
|
# Replace transparent pixels with white pixels and convert to JPEG
|
||||||
|
data = save_cover_data_to(data, 'img.jpg', return_data=True)
|
||||||
|
if len(data) <= maxsizeb:
|
||||||
|
return data
|
||||||
|
orig_data = data
|
||||||
|
img = Image()
|
||||||
|
quality = 95
|
||||||
|
|
||||||
|
if hasattr(img, 'set_compression_quality'):
|
||||||
|
img.load(data)
|
||||||
|
while len(data) >= maxsizeb and quality >= 10:
|
||||||
|
quality -= 5
|
||||||
|
img.set_compression_quality(quality)
|
||||||
|
data = img.export('jpg')
|
||||||
|
if len(data) <= maxsizeb:
|
||||||
|
return data
|
||||||
|
orig_data = data
|
||||||
|
|
||||||
scale = 0.9
|
scale = 0.9
|
||||||
while len(data) >= maxsizeb and scale >= 0.05:
|
while len(data) >= maxsizeb and scale >= 0.05:
|
||||||
img = Image()
|
img = Image()
|
||||||
img.load(data)
|
img.load(orig_data)
|
||||||
w, h = img.size
|
w, h = img.size
|
||||||
img.size = (int(scale*w), int(scale*h))
|
img.size = (int(scale*w), int(scale*h))
|
||||||
|
if hasattr(img, 'set_compression_quality'):
|
||||||
|
img.set_compression_quality(quality)
|
||||||
data = img.export('jpg')
|
data = img.export('jpg')
|
||||||
scale -= 0.05
|
scale -= 0.05
|
||||||
return data
|
return data
|
||||||
|
@ -72,6 +72,8 @@ def thumbnail(data, width=120, height=120, bgcolor='#ffffff', fmt='jpg'):
|
|||||||
img.size = (nwidth, nheight)
|
img.size = (nwidth, nheight)
|
||||||
canvas = create_canvas(img.size[0], img.size[1], bgcolor)
|
canvas = create_canvas(img.size[0], img.size[1], bgcolor)
|
||||||
canvas.compose(img)
|
canvas.compose(img)
|
||||||
|
if fmt == 'jpg' and hasattr(canvas, 'set_compression_quality'):
|
||||||
|
canvas.set_compression_quality(70)
|
||||||
return (canvas.size[0], canvas.size[1], canvas.export(fmt))
|
return (canvas.size[0], canvas.size[1], canvas.export(fmt))
|
||||||
|
|
||||||
def identify_data(data):
|
def identify_data(data):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user