Make downsample_large() functionality available in main() and command line.
authorPhilipp Spitzer <philipp@spitzer.priv.at>
Thu, 27 Jun 2019 21:23:44 +0000 (23:23 +0200)
committerPhilipp Spitzer <philipp@spitzer.priv.at>
Thu, 27 Jun 2019 21:23:44 +0000 (23:23 +0200)
gimp_passport.py
test_gimp_passport.py

index fe0b151..cb905df 100644 (file)
@@ -161,11 +161,13 @@ def downsample_large(img: Image, max_dpi: Optional[int]) -> Image:
 
 def main(paper_width_mm: float, paper_height_mm: float, paper_margin_mm: float,
          photo_width_mm: float, photo_height_mm: float, photo_spacing_mm: float,
+         max_dpi: Optional[int],
          bbox: Tuple[int,int,int,int],
          source_image: str, dest_image: str):
     img = Image.open(source_image)
     photo = make_passport(img, bbox, 0.75, photo_width_mm, photo_height_mm)
     paper = tile(photo, paper_width_mm, paper_height_mm, paper_margin_mm, photo_spacing_mm)
+    paper = downsample_large(paper, max_dpi)
     paper.save(dest_image, dpi=paper.info['dpi'])
 
 
@@ -178,6 +180,7 @@ if __name__ == '__main__':
     parser.add_argument('--photo-width', type=float, metavar='mm', default=35., help='passport photo width in mm (default: 35)')
     parser.add_argument('--photo-height', type=float, metavar='mm', default=45., help='passport photo height in mm (default: 45)')
     parser.add_argument('--photo-spacing', type=float, metavar='mm', default=0., help='space between passport photos in mm (default: 0)')
+    parser.add_argument('--max-dpi', type=int, metavar='dpi', help='if given, scale the final image down to dpi if resultion is larger')
     parser.add_argument('left', type=int, help='number of pixels from left image border to left face border (inclusive)')
     parser.add_argument('top', type=int, help='number of pixels from top image border to top face border (inclusive)')
     parser.add_argument('right', type=int, help='number of pixels from left image border to right face border (exclusive)')
@@ -186,7 +189,7 @@ if __name__ == '__main__':
     parser.add_argument('dest', help='destination image')
     args = parser.parse_args()
     main(args.paper_width, args.paper_height, args.paper_margin, args.photo_width, args.photo_height,
-         args.photo_spacing,
+         args.photo_spacing, args.max_dpi,
          (args.left, args.top, args.right, args.bottom),
          args.source, args.dest)
 
index 0d358c0..7d727f2 100644 (file)
@@ -70,7 +70,7 @@ class TestMakePassport(unittest.TestCase):
         dest = 'test_image_result.jpg'
         if os.path.exists(dest):
             os.remove(dest)
-        main(150., 100., 4., 35., 45., 1., (1108, 280, 2180, 1620), source, dest)
+        main(150., 100., 4., 35., 45., 1., None, (1108, 280, 2180, 1620), source, dest)
         self.assertTrue(os.path.exists(dest))
         img = Image.open(dest)
         dpi = img.info['dpi']