def process_image(self, data): if not self.process_images: return data if self.opts.mobi_keep_original_images: return mobify_image(data) else: return rescale_image(data, png2jpg=self.opts.image_png_to_jpg, graying=self.opts.graying_image)
def process_image(self, data): if not self.opts.process_images or self.opts.process_images_immediately: return data if self.opts.mobi_keep_original_images: return mobify_image(data) else: return rescale_image(data, png2jpg=self.opts.image_png_to_jpg, graying=self.opts.graying_image, reduceto=self.opts.reduce_image_to)
def process_image(self, data): if not self.process_images or self.opts.process_images_immediately: return data if self.opts.mobi_keep_original_images: return mobify_image(data) else: return rescale_image(data, png2jpg=self.opts.image_png_to_jpg, graying=self.opts.graying_image, reduceto=self.opts.reduce_image_to)
def process_image(data, opts): try: if not opts or not opts.process_images or not opts.process_images_immediately: return data elif opts.mobi_keep_original_images: return mobify_image(data) else: return rescale_image(data, png2jpg=opts.image_png_to_jpg, graying=opts.graying_image) except Exception: return None
def process_image(self, data, opts): try: if not opts or not opts.process_images or not opts.process_images_immediately: return data elif opts.mobi_keep_original_images: return mobify_image(data) else: return rescale_image(data, png2jpg=opts.image_png_to_jpg, graying=opts.graying_image, reduceto=opts.reduce_image_to) except Exception: return None
def convert(self, oeb, output_path, opts, log): self.log, self.opts, self.oeb = log, opts, oeb if self.opts.epub_flatten: from calibre.ebooks.oeb.transforms.filenames import FlatFilenames FlatFilenames()(oeb, opts) else: from calibre.ebooks.oeb.transforms.filenames import UniqueFilenames UniqueFilenames()(oeb, opts) self.workaround_ade_quirks() self.workaround_webkit_quirks() self.upshift_markup() #from calibre.ebooks.oeb.transforms.rescale import RescaleImages #RescaleImages()(oeb, opts) from calibre.ebooks.oeb.transforms.split import Split split = Split(not self.opts.dont_split_on_page_breaks, max_flow_size=self.opts.flow_size*1024 ) split(self.oeb, self.opts) #from calibre.ebooks.oeb.transforms.cover import CoverManager #cm = CoverManager( # no_default_cover=self.opts.no_default_epub_cover, # no_svg_cover=self.opts.no_svg_cover, # preserve_aspect_ratio=self.opts.preserve_cover_aspect_ratio) #cm(self.oeb, self.opts, self.log) self.workaround_sony_quirks() if self.oeb.toc.count() == 0: self.log.warn('This EPUB file has no Table of Contents. ' 'Creating a default TOC') first = iter(self.oeb.spine).next() self.oeb.toc.add(_('Start'), first.href) from calibre.ebooks.oeb.base import OPF_MIME, NCX_MIME, PAGE_MAP_MIME results = oeb.to_opf2(page_map=True) epub = zipfile.ZipFile(output_path, "w", zipfile.ZIP_STORED) epub.writestr('mimetype', "application/epub+zip") CONTAINER = u'''\ <?xml version="1.0"?> <container version="1.0" xmlns="urn:oasis:names:tc:opendocument:xmlns:container"> <rootfiles> <rootfile full-path="{0}" media-type="application/oebps-package+xml"/> </rootfiles> </container> ''' if hasattr(self.opts,"epub_dont_compress") and self.opts.epub_dont_compress: compress = zipfile.ZIP_STORED else: compress = zipfile.ZIP_DEFLATED from lxml import etree for key in (OPF_MIME, NCX_MIME, PAGE_MAP_MIME): href, root = results.pop(key, [None, None]) if root is not None: if key == OPF_MIME: epub.writestr('META-INF/container.xml', CONTAINER.format('OEBPS/%s'%href).encode('utf-8'), compress_type=compress) raw = etree.tostring(root, pretty_print=True,encoding='utf-8', xml_declaration=True) epub.writestr('OEBPS/%s' % href, raw) from calibre.ebooks.oeb.base import OEB_RASTER_IMAGES for item in oeb.manifest: if item.media_type in OEB_RASTER_IMAGES: if self.opts.process_images or self.opts.graying_image: img = rescale_image(str(item), graying=self.opts.graying_image) epub.writestr('OEBPS/%s' % item.href, img, compress_type=compress) else: epub.writestr('OEBPS/%s' % item.href, str(item), compress_type=compress) else: epub.writestr('OEBPS/%s' % item.href, str(item), compress_type=compress)
def add_resources(self, add_fonts): oeb = self.oeb oeb.logger.info('Serializing resources...') index = 1 mh_href = None if 'masthead' in oeb.guide and oeb.guide['masthead'].href: mh_href = oeb.guide['masthead'].href self.records.append(None) index += 1 self.used_image_indices.add(0) self.image_indices.add(0) elif self.is_periodical: # Generate a default masthead data = generate_masthead(unicode(self.oeb.metadata['title'][0])) self.records.append(data) self.used_image_indices.add(0) self.image_indices.add(0) index += 1 cover_href = self.cover_offset = self.thumbnail_offset = None if (oeb.metadata.cover and unicode(oeb.metadata.cover[0]) in oeb.manifest.ids): cover_id = unicode(oeb.metadata.cover[0]) item = oeb.manifest.ids[cover_id] cover_href = item.href for item in self.oeb.manifest.values(): if item.media_type not in OEB_RASTER_IMAGES: continue try: data = self.process_image(item.data) except Exception,e: self.log.warn('Bad image file %r : %s' % (item.href,str(e))) continue else: if mh_href and item.href == mh_href: self.records[0] = data continue self.image_indices.add(len(self.records)) self.records.append(data) self.item_map[item.href] = index self.mime_map[item.href] = 'image/%s'%what(None, data) index += 1 if cover_href and item.href == cover_href: self.cover_offset = self.item_map[item.href] - 1 self.used_image_indices.add(self.cover_offset) try: data = rescale_image(item.data, dimen=MAX_THUMB_DIMEN, maxsizeb=MAX_THUMB_SIZE) except: self.log.warn('Failed to generate thumbnail') else: self.image_indices.add(len(self.records)) self.records.append(data) self.thumbnail_offset = index - 1 self.used_image_indices.add(self.thumbnail_offset) index += 1 finally:
def process_image(self, data): if not self.process_images: return data return (mobify_image(data) if self.opts.mobi_keep_original_images else rescale_image(data))