From b50a2449fe3f7d71a5e1e9ab0eace197d2d277ca Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 19 Dec 2021 07:57:59 +0530 Subject: [PATCH] py310: More float->int goodness Fixes #1955311 [Error converting ePUB to MOBI during Rasterizing SVG images](https://bugs.launchpad.net/calibre/+bug/1955311) --- src/calibre/ebooks/oeb/transforms/rasterize.py | 4 ++-- src/calibre/gui2/icon_theme.py | 2 +- src/calibre/gui2/library/alternate_views.py | 2 +- src/calibre/gui2/library/models.py | 2 +- src/calibre/gui2/lrf_renderer/document.py | 2 +- src/calibre/gui2/lrf_renderer/text.py | 4 ++-- src/calibre/linux.py | 2 +- src/calibre/utils/img.py | 8 ++++---- src/calibre/utils/open_with/windows.py | 9 ++++++--- 9 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/calibre/ebooks/oeb/transforms/rasterize.py b/src/calibre/ebooks/oeb/transforms/rasterize.py index ad73500258..d9ce6495a9 100644 --- a/src/calibre/ebooks/oeb/transforms/rasterize.py +++ b/src/calibre/ebooks/oeb/transforms/rasterize.py @@ -87,7 +87,7 @@ class SVGRasterizer: size.setWidth(sizes[0]) size.setHeight(sizes[1]) if width or height: - size.scale(width, height, Qt.AspectRatioMode.KeepAspectRatio) + size.scale(int(width), int(height), Qt.AspectRatioMode.KeepAspectRatio) logger.info('Rasterizing %r to %dx%d' % (elem, size.width(), size.height())) image = QImage(size, QImage.Format.Format_ARGB32_Premultiplied) @@ -183,7 +183,7 @@ class SVGRasterizer: data = QByteArray(svgitem.bytes_representation) svg = QSvgRenderer(data) size = svg.defaultSize() - size.scale(width, height, Qt.AspectRatioMode.KeepAspectRatio) + size.scale(int(width), int(height), Qt.AspectRatioMode.KeepAspectRatio) key = (svgitem.href, size.width(), size.height()) if key in self.images: href = self.images[key] diff --git a/src/calibre/gui2/icon_theme.py b/src/calibre/gui2/icon_theme.py index 6db1d887ed..1be01bc082 100644 --- a/src/calibre/gui2/icon_theme.py +++ b/src/calibre/gui2/icon_theme.py @@ -187,7 +187,7 @@ def create_cover(report, icons=(), cols=5, size=120, padding=16): with lopen(ipath, 'rb') as f: img = image_from_data(f.read()) scaled, nwidth, nheight = fit_image(img.width(), img.height(), size, size) - img = img.scaled(nwidth, nheight, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) + img = img.scaled(int(nwidth), int(nheight), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) dx = (size - nwidth) // 2 canvas.compose(img, x + dx, y) return canvas.export() diff --git a/src/calibre/gui2/library/alternate_views.py b/src/calibre/gui2/library/alternate_views.py index 301f5f482a..58912c06ec 100644 --- a/src/calibre/gui2/library/alternate_views.py +++ b/src/calibre/gui2/library/alternate_views.py @@ -932,7 +932,7 @@ class GridView(QListView): if scaled: if self.ignore_render_requests.is_set(): return - p = p.scaled(nwidth, nheight, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) + p = p.scaled(int(nwidth), int(nheight), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) p.setDevicePixelRatio(dpr) cdata = p # update cache diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index 18c6d81719..17452d546b 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -142,7 +142,7 @@ class ColumnIcon: # {{{ if (os.path.exists(d)): bm = QPixmap(d) scaled, nw, nh = fit_image(bm.width(), bm.height(), bm.width(), dim) - bm = bm.scaled(nw, nh, aspectRatioMode=Qt.AspectRatioMode.IgnoreAspectRatio, transformMode=Qt.TransformationMode.SmoothTransformation) + bm = bm.scaled(int(nw), int(nh), aspectRatioMode=Qt.AspectRatioMode.IgnoreAspectRatio, transformMode=Qt.TransformationMode.SmoothTransformation) bm.setDevicePixelRatio(self.dpr) icon_bitmaps.append(bm) total_width += bm.width() diff --git a/src/calibre/gui2/lrf_renderer/document.py b/src/calibre/gui2/lrf_renderer/document.py index fb57bf9c70..b2f062ff82 100644 --- a/src/calibre/gui2/lrf_renderer/document.py +++ b/src/calibre/gui2/lrf_renderer/document.py @@ -153,7 +153,7 @@ class _Canvas(QGraphicsRectItem): max_width = min(br.width(), self.max_x-x) if br.height() > max_height or br.width() > max_width: p = ib.pixmap() - ib.setPixmap(p.scaled(max_width, max_height, Qt.AspectRatioMode.IgnoreAspectRatio, + ib.setPixmap(p.scaled(int(max_width), int(max_height), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation)) br = ib.boundingRect() ib.setParentItem(self) diff --git a/src/calibre/gui2/lrf_renderer/text.py b/src/calibre/gui2/lrf_renderer/text.py index cd2a0cf2d1..fe68b571d6 100644 --- a/src/calibre/gui2/lrf_renderer/text.py +++ b/src/calibre/gui2/lrf_renderer/text.py @@ -25,7 +25,7 @@ class PixmapItem(QGraphicsPixmapItem): w, h = p.width(), p.height() p = p.copy(x0, y0, min(w, x1-x0), min(h, y1-y0)) if p.width() != xsize or p.height() != ysize: - p = p.scaled(xsize, ysize, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) + p = p.scaled(int(xsize), int(ysize), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) QGraphicsPixmapItem.__init__(self, p) self.height, self.width = ysize, xsize self.setTransformationMode(Qt.TransformationMode.SmoothTransformation) @@ -33,7 +33,7 @@ class PixmapItem(QGraphicsPixmapItem): def resize(self, width, height): p = self.pixmap() - self.setPixmap(p.scaled(width, height, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation)) + self.setPixmap(p.scaled(int(width), int(height), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation)) self.width, self.height = width, height diff --git a/src/calibre/linux.py b/src/calibre/linux.py index 8a4e6e0adb..5e5078de71 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -1300,7 +1300,7 @@ def write_appdata(key, entry, base, translators): def render_img(image, dest, width=128, height=128): from qt.core import QImage, Qt - img = QImage(I(image)).scaled(width, height, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) + img = QImage(I(image)).scaled(int(width), int(height), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) img.save(dest) diff --git a/src/calibre/utils/img.py b/src/calibre/utils/img.py index 8aacf17ca0..d6092dc8d3 100644 --- a/src/calibre/utils/img.py +++ b/src/calibre/utils/img.py @@ -257,7 +257,7 @@ def save_cover_data_to( changed = fmt != orig_fmt if resize_to is not None: changed = True - img = img.scaled(resize_to[0], resize_to[1], Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) + img = img.scaled(int(resize_to[0]), int(resize_to[1]), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) owidth, oheight = img.width(), img.height() nwidth, nheight = tweaks['maximum_cover_size'] if minify_to is None else minify_to if letterbox: @@ -269,7 +269,7 @@ def save_cover_data_to( scaled, nwidth, nheight = fit_image(owidth, oheight, nwidth, nheight) if scaled: changed = True - img = img.scaled(nwidth, nheight, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) + img = img.scaled(int(nwidth), int(nheight), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) if img.hasAlphaChannel(): changed = True img = blend_image(img, bgcolor) @@ -411,10 +411,10 @@ def scale_image(data, width=60, height=80, compression_quality=70, as_png=False, if preserve_aspect_ratio: scaled, nwidth, nheight = fit_image(img.width(), img.height(), width, height) if scaled: - img = img.scaled(nwidth, nheight, Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation) + img = img.scaled(int(nwidth), int(nheight), Qt.AspectRatioMode.KeepAspectRatio, Qt.TransformationMode.SmoothTransformation) else: if img.width() != width or img.height() != height: - img = img.scaled(width, height, Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) + img = img.scaled(int(width), int(height), Qt.AspectRatioMode.IgnoreAspectRatio, Qt.TransformationMode.SmoothTransformation) fmt = 'PNG' if as_png else 'JPEG' w, h = img.width(), img.height() return w, h, image_to_data(img, compression_quality=compression_quality, fmt=fmt) diff --git a/src/calibre/utils/open_with/windows.py b/src/calibre/utils/open_with/windows.py index 086cad30c7..069a64bae7 100644 --- a/src/calibre/utils/open_with/windows.py +++ b/src/calibre/utils/open_with/windows.py @@ -62,8 +62,10 @@ def load_icon_resource_as_pixmap(icon_resource, size=ICON_SIZE): if area(pmap) >= q: if area(pmap) == q: return pmap - return pmap.scaled(size, size, aspectRatioMode=Qt.AspectRatioMode.KeepAspectRatio, transformMode=Qt.TransformationMode.SmoothTransformation) - return pixmaps[-1].scaled(size, size, aspectRatioMode=Qt.AspectRatioMode.KeepAspectRatio, transformMode=Qt.TransformationMode.SmoothTransformation) + return pmap.scaled( + int(size), int(size), aspectRatioMode=Qt.AspectRatioMode.KeepAspectRatio, transformMode=Qt.TransformationMode.SmoothTransformation) + return pixmaps[-1].scaled( + int(size), int(size), aspectRatioMode=Qt.AspectRatioMode.KeepAspectRatio, transformMode=Qt.TransformationMode.SmoothTransformation) def load_icon_resource(icon_resource, as_data=False, size=ICON_SIZE): @@ -83,7 +85,8 @@ def load_icon_for_file(path: str, as_data=False, size=ICON_SIZE): pmap = hicon_to_pixmap(hicon) if not pmap.isNull(): if pmap.width() != size: - pmap = pmap.scaled(size, size, aspectRatioMode=Qt.AspectRatioMode.KeepAspectRatio, transformMode=Qt.TransformationMode.SmoothTransformation) + pmap = pmap.scaled( + int(size), int(size), aspectRatioMode=Qt.AspectRatioMode.KeepAspectRatio, transformMode=Qt.TransformationMode.SmoothTransformation) return pixmap_to_data(pmap) if as_data else pmap