Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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)
Example #4
0
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
Example #5
0
 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
Example #6
0
    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)
Example #7
0
    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:
Example #8
0
    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:
Example #9
0
 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))