From 0cf7af69ac08c023dcf1d7b3062232fcb2e46d00 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 17 Jan 2022 21:24:27 +0530 Subject: [PATCH] Comic conversion: Fix conversion of comic images that are stored as 8-bit grayscale images in JPEG format not working when converting to PDF. Fixes #1956932 [pdf convertion of 8 bit jpg](https://bugs.launchpad.net/calibre/+bug/1956932) --- src/calibre/ebooks/pdf/image_writer.py | 13 ++++--------- src/calibre/ebooks/pdf/render/serialize.py | 4 ++-- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/calibre/ebooks/pdf/image_writer.py b/src/calibre/ebooks/pdf/image_writer.py index 0e84b59a7a..b4c2f07d96 100644 --- a/src/calibre/ebooks/pdf/image_writer.py +++ b/src/calibre/ebooks/pdf/image_writer.py @@ -98,20 +98,15 @@ class Image: # {{{ path_or_bytes = f.read() self.img_data = path_or_bytes fmt, width, height = identify(path_or_bytes) - if width > 0 and height > 0 and fmt == 'jpeg': - self.fmt = fmt - self.width, self.height = width, height - self.cache_key = None - else: - self.img, self.fmt = image_and_format_from_data(path_or_bytes) - self.width, self.height = self.img.width(), self.img.height() - self.cache_key = self.img.cacheKey() + self.img, self.fmt = image_and_format_from_data(path_or_bytes) + self.width, self.height = self.img.width(), self.img.height() + self.cache_key = self.img.cacheKey() # }}} def draw_image_page(writer, img, preserve_aspect_ratio=True): if img.fmt == 'jpeg': - ref = writer.add_jpeg_image(img.img_data, img.width, img.height, img.cache_key) + ref = writer.add_jpeg_image(img.img_data, img.width, img.height, img.cache_key, depth=img.img.depth()) else: ref = writer.add_image(img.img, img.cache_key) page_size = tuple(writer.page_size) diff --git a/src/calibre/ebooks/pdf/render/serialize.py b/src/calibre/ebooks/pdf/render/serialize.py index 5b2aafe4ce..ceab4d97c9 100644 --- a/src/calibre/ebooks/pdf/render/serialize.py +++ b/src/calibre/ebooks/pdf/render/serialize.py @@ -416,8 +416,8 @@ class PDFStream: self.objects.commit(r, self.stream) return r - def add_jpeg_image(self, img_data, w, h, cache_key=None): - return self.write_image(img_data, w, h, 32, dct=True) + def add_jpeg_image(self, img_data, w, h, cache_key=None, depth=32): + return self.write_image(img_data, w, h, depth, dct=True) def add_image(self, img, cache_key): ref = self.get_image(cache_key)