aboutsummaryrefslogtreecommitdiffstats
path: root/bsie/reader/preview/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'bsie/reader/preview/utils.py')
-rw-r--r--bsie/reader/preview/utils.py34
1 files changed, 34 insertions, 0 deletions
diff --git a/bsie/reader/preview/utils.py b/bsie/reader/preview/utils.py
new file mode 100644
index 0000000..82ecc31
--- /dev/null
+++ b/bsie/reader/preview/utils.py
@@ -0,0 +1,34 @@
+
+# standard imports
+import typing
+
+# external imports
+import PIL.Image
+
+# exports
+__all__: typing.Sequence[str] = (
+ 'resize',
+ )
+
+
+## code ##
+
+def resize(
+ img: PIL.Image.Image,
+ max_size: int,
+ ) -> PIL.Image.Image:
+ """Resize an image to a given maximum side length."""
+ # determine target dimensions
+ ratio = img.width / img.height
+ if img.width > img.height:
+ width, height = max_size, round(max_size / ratio)
+ else:
+ width, height = round(ratio * max_size), max_size
+ # rescale and return
+ return img.resize(
+ (width, height),
+ resample=PIL.Image.Resampling.LANCZOS, # create high-quality image
+ reducing_gap=3.0, # optimize computation via fast size reduction
+ )
+
+## EOF ##