@@ -449,9 +449,8 @@ def buffer_rgba(self):
449449 def print_raw (self , filename_or_obj , * args , ** kwargs ):
450450 FigureCanvasAgg .draw (self )
451451 renderer = self .get_renderer ()
452- with cbook ._setattr_cm (renderer , dpi = self .figure .dpi ), \
453- cbook .open_file_cm (filename_or_obj , "wb" ) as fh :
454- fh .write (renderer ._renderer .buffer_rgba ())
452+ with cbook .open_file_cm (filename_or_obj , "wb" ) as fh :
453+ fh .write (renderer .buffer_rgba ())
455454
456455 print_rgba = print_raw
457456
@@ -516,10 +515,10 @@ def print_png(self, filename_or_obj, *args,
516515 ** metadata ,
517516 }
518517
518+ FigureCanvasAgg .draw (self )
519519 if pil_kwargs is not None :
520520 from PIL import Image
521521 from PIL .PngImagePlugin import PngInfo
522- buf , size = self .print_to_buffer ()
523522 # Only use the metadata kwarg if pnginfo is not set, because the
524523 # semantics of duplicate keys in pnginfo is unclear.
525524 if "pnginfo" not in pil_kwargs :
@@ -528,23 +527,20 @@ def print_png(self, filename_or_obj, *args,
528527 pnginfo .add_text (k , v )
529528 pil_kwargs ["pnginfo" ] = pnginfo
530529 pil_kwargs .setdefault ("dpi" , (self .figure .dpi , self .figure .dpi ))
531- (Image .frombuffer ( "RGBA" , size , buf , "raw" , "RGBA" , 0 , 1 )
530+ (Image .fromarray ( np . asarray ( self . buffer_rgba ()) )
532531 .save (filename_or_obj , format = "png" , ** pil_kwargs ))
533532
534533 else :
535- FigureCanvasAgg .draw (self )
536534 renderer = self .get_renderer ()
537- with cbook ._setattr_cm (renderer , dpi = self .figure .dpi ), \
538- cbook .open_file_cm (filename_or_obj , "wb" ) as fh :
535+ with cbook .open_file_cm (filename_or_obj , "wb" ) as fh :
539536 _png .write_png (renderer ._renderer , fh ,
540537 self .figure .dpi , metadata = metadata )
541538
542539 def print_to_buffer (self ):
543540 FigureCanvasAgg .draw (self )
544541 renderer = self .get_renderer ()
545- with cbook ._setattr_cm (renderer , dpi = self .figure .dpi ):
546- return (renderer ._renderer .buffer_rgba (),
547- (int (renderer .width ), int (renderer .height )))
542+ return (bytes (renderer .buffer_rgba ()),
543+ (int (renderer .width ), int (renderer .height )))
548544
549545 if _has_pil :
550546
@@ -585,15 +581,15 @@ def print_jpg(self, filename_or_obj, *args, dryrun=False,
585581 `PIL.Image.save` when saving the figure. These take precedence
586582 over *quality*, *optimize* and *progressive*.
587583 """
588- buf , size = self . print_to_buffer ( )
584+ FigureCanvasAgg . draw ( self )
589585 if dryrun :
590586 return
591587 # The image is "pasted" onto a white background image to safely
592588 # handle any transparency
593- image = Image .frombuffer ( 'RGBA' , size , buf , 'raw' , 'RGBA' , 0 , 1 )
589+ image = Image .fromarray ( np . asarray ( self . buffer_rgba ()) )
594590 rgba = mcolors .to_rgba (rcParams ['savefig.facecolor' ])
595591 color = tuple ([int (x * 255 ) for x in rgba [:3 ]])
596- background = Image .new ('RGB' , size , color )
592+ background = Image .new ('RGB' , image . size , color )
597593 background .paste (image , image )
598594 if pil_kwargs is None :
599595 pil_kwargs = {}
@@ -610,14 +606,14 @@ def print_jpg(self, filename_or_obj, *args, dryrun=False,
610606 @cbook ._delete_parameter ("3.2" , "dryrun" )
611607 def print_tif (self , filename_or_obj , * args , dryrun = False ,
612608 pil_kwargs = None , ** kwargs ):
613- buf , size = self . print_to_buffer ( )
609+ FigureCanvasAgg . draw ( self )
614610 if dryrun :
615611 return
616- image = Image .frombuffer ('RGBA' , size , buf , 'raw' , 'RGBA' , 0 , 1 )
617612 if pil_kwargs is None :
618613 pil_kwargs = {}
619614 pil_kwargs .setdefault ("dpi" , (self .figure .dpi , self .figure .dpi ))
620- return image .save (filename_or_obj , format = 'tiff' , ** pil_kwargs )
615+ return (Image .fromarray (np .asarray (self .buffer_rgba ()))
616+ .save (filename_or_obj , format = 'tiff' , ** pil_kwargs ))
621617
622618 print_tiff = print_tif
623619
0 commit comments