Andreas Preikschat has proposed merging lp:~googol-hush/openlp/thumb-creation 
into lp:openlp.

Requested reviews:
  OpenLP Core (openlp-core)

For more details, see:
https://code.launchpad.net/~googol-hush/openlp/thumb-creation/+merge/64002

Hello,

- Improved image resizing speed

Average time needed to resize an image:
trunk:  ~0.74s
branch: ~0.375s

In another test I created an image service item (20 images of a total size of 
31.5MB):
trunk: 22s
branch: 10s

Note, the time taken is lower when the image ratio is the same as the display 
ratio. This is because we have to paint black bars on the right and left (lower 
and upper) sides.

I do not know if you classify this as bug or not.
-- 
https://code.launchpad.net/~googol-hush/openlp/thumb-creation/+merge/64002
Your team OpenLP Core is requested to review the proposed merge of 
lp:~googol-hush/openlp/thumb-creation into lp:openlp.
=== modified file 'openlp/core/lib/__init__.py'
--- openlp/core/lib/__init__.py	2011-05-26 17:56:08 +0000
+++ openlp/core/lib/__init__.py	2011-06-09 12:36:30 +0000
@@ -137,13 +137,12 @@
     # convert to base64 encoding so does not get missed!
     return byte_array.toBase64()
 
-def resize_image(image, width, height, background=QtCore.Qt.black):
+def resize_image(image_path, width, height, background=QtCore.Qt.black):
     """
     Resize an image to fit on the current screen.
 
-    ``image``
-        The image to resize. It has to be either a ``QImage`` instance or the
-        path to the image.
+    ``image_path``
+        The path to the image to resize.
 
     ``width``
         The new image width.
@@ -155,16 +154,24 @@
         The background colour defaults to black.
     """
     log.debug(u'resize_image - start')
-    if isinstance(image, QtGui.QImage):
-        preview = image
+    reader = QtGui.QImageReader(image_path)
+    # The image's ratio.
+    image_ratio = float(reader.size().width()) / float(reader.size().height())
+    resize_ratio = float(width) / float(height)
+    # Figure out the size we want to resize the image to (keep aspect ratio).
+    if image_ratio == resize_ratio:
+        size = QtCore.QSize(width, height)
+    elif image_ratio < resize_ratio:
+        # Use the image's height as reference for the new size.
+        size = QtCore.QSize(image_ratio * height, height)
     else:
-        preview = QtGui.QImage(image)
-    if not preview.isNull():
-        # Only resize if different size
-        if preview.width() == width and preview.height == height:
-            return preview
-        preview = preview.scaled(width, height, QtCore.Qt.KeepAspectRatio,
-            QtCore.Qt.SmoothTransformation)
+        # Use the image's width as reference for the new size.
+        size = QtCore.QSize(width, 1 / (image_ratio / width))
+    reader.setScaledSize(size)
+    preview = reader.read()
+    if image_ratio == resize_ratio:
+        # We neither need to centre the image nor add "bars" to the image.
+        return preview
     realw = preview.width()
     realh = preview.height()
     # and move it to the centre of the preview space

_______________________________________________
Mailing list: https://launchpad.net/~openlp-core
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openlp-core
More help   : https://help.launchpad.net/ListHelp

Reply via email to