@@ -563,23 +563,25 @@ def print_jpg(self, filename_or_obj, *args, dryrun=False, pil_kwargs=None,
563
563
`PIL.Image.save` when saving the figure. These take precedence
564
564
over *quality*, *optimize* and *progressive*.
565
565
"""
566
- FigureCanvasAgg .draw (self )
566
+ # Remove transparency by alpha-blending on an assumed white background.
567
+ r , g , b , a = mcolors .to_rgba (self .figure .get_facecolor ())
568
+ try :
569
+ self .figure .set_facecolor (a * np .array ([r , g , b ]) + 1 - a )
570
+ FigureCanvasAgg .draw (self )
571
+ finally :
572
+ self .figure .set_facecolor ((r , g , b , a ))
567
573
if dryrun :
568
574
return
569
- # The image is "pasted" onto a white background image to safely
570
- # handle any transparency
571
- image = Image .fromarray (np .asarray (self .buffer_rgba ()))
572
- background = Image .new ("RGB" , image .size , "white" )
573
- background .paste (image , image )
574
575
if pil_kwargs is None :
575
576
pil_kwargs = {}
576
577
for k in ["quality" , "optimize" , "progressive" ]:
577
578
if k in kwargs :
578
579
pil_kwargs .setdefault (k , kwargs [k ])
579
580
pil_kwargs .setdefault ("quality" , rcParams ["savefig.jpeg_quality" ])
580
581
pil_kwargs .setdefault ("dpi" , (self .figure .dpi , self .figure .dpi ))
581
- return background .save (
582
- filename_or_obj , format = 'jpeg' , ** pil_kwargs )
582
+ # Drop alpha channel now.
583
+ return (Image .fromarray (np .asarray (self .buffer_rgba ())[..., :3 ])
584
+ .save (filename_or_obj , format = 'jpeg' , ** pil_kwargs ))
583
585
584
586
print_jpeg = print_jpg
585
587
0 commit comments