@@ -472,18 +472,17 @@ def _make_boxes(
472472 return obj
473473
474474
475- def _render (
475+ def _getpage (
476476 obj : Boxable ,
477477 page : Union [Page , None ] = None ,
478- dpi : int = 72 ,
479478) -> Image .Image :
480479 if page is None :
481480 if not hasattr (obj , "page" ):
482481 raise ValueError ("Must explicitly specify page or image to show rectangles" )
483482 page = cast (HasPage , obj ).page
484483 if page is None :
485484 raise ValueError ("No page found in object: %r" % (obj ,))
486- return show ( page , dpi = dpi )
485+ return page
487486
488487
489488Color = Union [str , Tuple [int , int , int ], Tuple [float , float , float ]]
@@ -581,11 +580,15 @@ def box(
581580 font = ImageFont .load_default (label_size * scale )
582581 label_margin *= scale
583582 make_color = color_maker (color )
583+ image_page : Union [Page , None ] = None
584584 for obj in _make_boxes (objs ):
585585 if obj is None :
586586 continue
587+ if image_page is not None and obj .page != image_page :
588+ break
587589 if image is None :
588- image = _render (obj , page , dpi )
590+ image_page = _getpage (obj , page )
591+ image = show (image_page , dpi )
589592 try :
590593 left , top , right , bottom = (x * scale for x in boxfunc (obj ))
591594 except ValueError : # it has no content and no box
@@ -645,11 +648,15 @@ def mark(
645648 alpha = min (255 , int (transparency * 255 ))
646649 label_margin *= scale
647650 make_color = color_maker (color )
651+ image_page : Union [Page , None ] = None
648652 for obj in _make_boxes (objs ):
649653 if obj is None :
650654 continue
655+ if image_page is not None and obj .page != image_page :
656+ break
651657 if image is None :
652- image = _render (obj , page , dpi )
658+ image_page = _getpage (obj , page )
659+ image = show (image_page , dpi )
653660 if overlay is None :
654661 overlay = Image .new ("RGB" , image .size )
655662 if mask is None :
0 commit comments