From e936eb0c84a19765796dfa070b11878be6aaa8f7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 19 Jan 2010 14:02:16 -0700 Subject: [PATCH] MOBI Input: Rescale img width and height attributes that were specified in em units. Fixes #4608 (Built in viewre picture issue) --- resources/viewer/images.js | 1 + src/calibre/ebooks/mobi/reader.py | 10 ++++++++++ src/calibre/ebooks/oeb/stylizer.py | 4 ++++ 3 files changed, 15 insertions(+) diff --git a/resources/viewer/images.js b/resources/viewer/images.js index cc6e6d47e5..ea68009254 100644 --- a/resources/viewer/images.js +++ b/resources/viewer/images.js @@ -7,6 +7,7 @@ function scale_images() { $("img:visible").each(function() { var offset = $(this).offset(); + //window.py_bridge.debug(window.getComputedStyle(this, '').getPropertyValue('max-width')); $(this).css("max-width", (window.innerWidth-offset.left-5)+"px"); $(this).css("max-height", (window.innerHeight-5)+"px"); }); diff --git a/src/calibre/ebooks/mobi/reader.py b/src/calibre/ebooks/mobi/reader.py index b8557aea98..4f894ce088 100644 --- a/src/calibre/ebooks/mobi/reader.py +++ b/src/calibre/ebooks/mobi/reader.py @@ -563,6 +563,16 @@ class MobiReader(object): recindex = attrib.pop(attr, None) or recindex if recindex is not None: attrib['src'] = 'images/%s.jpg' % recindex + for attr in ('width', 'height'): + if attr in attrib: + val = attrib[attr] + if val.lower().endswith('em'): + try: + nval = float(val[:-2]) + nval *= 16 * (168.451/72) # Assume this was set using the Kindle profile + attrib[attr] = "%dpx"%int(nval) + except: + del attrib[attr] elif tag.tag == 'pre': if not tag.text: tag.tag = 'div' diff --git a/src/calibre/ebooks/oeb/stylizer.py b/src/calibre/ebooks/oeb/stylizer.py index 9f50796615..d0e394b9e5 100644 --- a/src/calibre/ebooks/oeb/stylizer.py +++ b/src/calibre/ebooks/oeb/stylizer.py @@ -411,6 +411,7 @@ class Style(object): return result def _unit_convert(self, value, base=None, font=None): + ' Return value in pts' if isinstance(value, (int, long, float)): return value try: @@ -447,6 +448,9 @@ class Style(object): result = value * 0.40 return result + def pt_to_px(self, value): + return (self._profile.dpi / 72.0) * value + @property def fontSize(self): def normalize_fontsize(value, base):