Create function num_tiles_xy().
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Fri, 7 Jun 2019 21:08:40 +0000 (23:08 +0200)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Fri, 7 Jun 2019 21:12:58 +0000 (23:12 +0200)
gimp_passport.py
test_gimp_passport.py

index a4025f2..11a6a8d 100644 (file)
@@ -1,6 +1,7 @@
 import argparse
 from itertools import count
 from numbers import Integral
+from typing import Tuple
 from PIL import Image
 
 
@@ -55,6 +56,20 @@ def num_tiles(paper_size: float, tile_size: float, margin: float, spacing: float
     return max(0, int((size + spacing) // (tile_size + spacing)))
 
 
+def num_tiles_xy(paper_size: Tuple[float, float], tile_size: Tuple[float, float],
+                 margin: float, spacing: float) -> Tuple[int, 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: tuple with paper width and height
+    :param tile_size: tuple with tile width and height
+    :param margin: space between paper border and first tile
+    :param spacing: space between tiles
+    """
+    return tuple(num_tiles(ps, ts, margin, spacing) for ps, ts in zip(paper_size, tile_size))
+
+
+def make_cut_lines(img: Image, count_x: int, count_y: int, width: int, margin: int, spacing: int, 
 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 4c749d2..eccce43 100644 (file)
@@ -1,7 +1,7 @@
 import os
 import unittest
 from PIL import Image, ImageDraw
-from gimp_passport import mm_to_pixel, num_tiles, make_passport, tile, main
+from gimp_passport import mm_to_pixel, num_tiles, num_tiles_xy, make_passport, tile, main
 
 
 class TestMakePassport(unittest.TestCase):
@@ -30,6 +30,12 @@ class TestMakePassport(unittest.TestCase):
         self.assertEqual(3, num_tiles(30., 9., 1., 0.))
         self.assertEqual(2, num_tiles(30., 9., 1., 1.))
 
+    def test_num_tiles_xy(self):
+        self.assertEqual((3, 2), num_tiles_xy((45., 10.), (15., 5.), 0., 0.))
+        self.assertEqual((3, 2), num_tiles_xy((45., 10.), (15., 4.), 0., 0.))
+        self.assertEqual((2, 2), num_tiles_xy((45., 10.), (15., 4.), 0., 2.))
+        self.assertEqual((2, 1), num_tiles_xy((45., 10.), (15., 5.), 1., 1.))
+
     def test_tile(self):
         dpi = 90
         img = Image.new('RGB', (mm_to_pixel(35, dpi), mm_to_pixel(45, dpi)), 'lightgray')