~ubuntu-branches/ubuntu/karmic/calibre/karmic

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#!/usr/bin/env python
# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai
from __future__ import with_statement

__license__   = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'

from calibre import fit_image

class RescaleImages(object):
    'Rescale all images to fit inside given screen size'

    def __call__(self, oeb, opts):
        from PyQt4.Qt import QApplication, QImage, Qt
        from calibre.gui2 import pixmap_to_data
        self.oeb, self.opts, self.log = oeb, opts, oeb.log
        page_width, page_height = opts.dest.width, opts.dest.height
        for item in oeb.manifest:
            if item.media_type.startswith('image'):
                raw = item.data
                if not raw: continue
                if QApplication.instance() is None:
                    QApplication([])

                img = QImage(10, 10, QImage.Format_ARGB32_Premultiplied)
                if not img.loadFromData(raw): continue
                width, height = img.width(), img.height()
                scaled, new_width, new_height = fit_image(width, height,
                        page_width, page_height)
                if scaled:
                    self.log('Rescaling image', item.href)
                    img = img.scaled(new_width, new_height,
                            Qt.IgnoreAspectRatio, Qt.SmoothTransformation)
                    item.data = pixmap_to_data(img)