Create function num_tiles().
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Fri, 7 Jun 2019 20:47:28 +0000 (22:47 +0200)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Fri, 7 Jun 2019 20:52:55 +0000 (22:52 +0200)
gimp_passport.py
test_gimp_passport.py

index 481c26c..a4025f2 100644 (file)
@@ -42,6 +42,19 @@ def make_passport(img_rgba: Image, fpr: float, width_mm: float, height_mm: float
     return pic
 
 
+def num_tiles(paper_size: float, tile_size: float, margin: float, spacing: float) -> int:
+    """Returns the number of tiles that fit in the space described by the parameres.
+    All length units have to be the same (e.g. milimeter or pixel).
+
+    :param paper_size: paper width or paper height
+    :para tile_size: tile width or tile height
+    :param margin: space between paper border and first tile
+    :param spacing: space between tiles
+    """
+    size = paper_size - 2 * margin
+    return max(0, int((size + spacing) // (tile_size + spacing)))
+
+
 def tile(img: Image, paper_width_mm: float, paper_height_mm: float, margin_mm: float,
          spacing_mm: float) -> Image:
     """Create and return image representing paper with specified dimensions and copy the given
index d77dad0..4c749d2 100644 (file)
@@ -1,7 +1,7 @@
 import os
 import unittest
 from PIL import Image, ImageDraw
-from gimp_passport import mm_to_pixel, make_passport, tile, main
+from gimp_passport import mm_to_pixel, num_tiles, make_passport, tile, main
 
 
 class TestMakePassport(unittest.TestCase):
@@ -20,6 +20,16 @@ class TestMakePassport(unittest.TestCase):
         pic = make_passport(img, 0.75, 35., 45.)
         self.assertIsInstance(pic, Image.Image)
 
+    def test_num_tiles(self):
+        self.assertEqual(0, num_tiles(10., 11., 0., 0.))
+        self.assertEqual(1, num_tiles(10., 10., 0., 0.))
+        self.assertEqual(2, num_tiles(20., 10., 0., 0.))
+        self.assertEqual(1, num_tiles(20., 10., 1., 0.))
+        self.assertEqual(1, num_tiles(20., 10., 0., 1.))
+        self.assertEqual(3, num_tiles(30., 9., 0., 1.))
+        self.assertEqual(3, num_tiles(30., 9., 1., 0.))
+        self.assertEqual(2, num_tiles(30., 9., 1., 1.))
+
     def test_tile(self):
         dpi = 90
         img = Image.new('RGB', (mm_to_pixel(35, dpi), mm_to_pixel(45, dpi)), 'lightgray')