Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit39d84d7

Browse files
committed
Reuse png metadata handling of imsave() in FigureCanvasAgg.print_png().
This avoids duplicating the conversion of metadata to PngInfo andrevealed a bug in the priority between `metadata` and `pil_kwargs` inimsave().Note that because `np.asarray(self.buffer_rgba())` is already a RGBAuint8 array, there is no colormapping step happening in imsave().Ideally mplcairo should also be able to use imsave() for saving to png.
1 parentce334d4 commit39d84d7

File tree

2 files changed

+9
-15
lines changed

2 files changed

+9
-15
lines changed

‎lib/matplotlib/backends/backend_agg.py

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@
3131

3232
importnumpyasnp
3333
fromPILimportImage
34-
fromPIL.PngImagePluginimportPngInfo
3534

35+
importmatplotlibasmpl
3636
frommatplotlibimportcbook,rcParams,__version__
3737
frommatplotlib.backend_basesimport (
3838
_Backend,FigureCanvasBase,FigureManagerBase,RendererBase)
@@ -503,24 +503,16 @@ def print_png(self, filename_or_obj, *args,
503503

504504
ifmetadataisNone:
505505
metadata= {}
506-
ifpil_kwargsisNone:
507-
pil_kwargs= {}
508506
metadata= {
509507
"Software":
510508
f"matplotlib version{__version__}, http://matplotlib.org/",
511509
**metadata,
512510
}
513511
FigureCanvasAgg.draw(self)
514-
# Only use the metadata kwarg if pnginfo is not set, because the
515-
# semantics of duplicate keys in pnginfo is unclear.
516-
if"pnginfo"notinpil_kwargs:
517-
pnginfo=PngInfo()
518-
fork,vinmetadata.items():
519-
pnginfo.add_text(k,v)
520-
pil_kwargs["pnginfo"]=pnginfo
521-
pil_kwargs.setdefault("dpi", (self.figure.dpi,self.figure.dpi))
522-
(Image.fromarray(np.asarray(self.buffer_rgba()))
523-
.save(filename_or_obj,format="png",**pil_kwargs))
512+
mpl.image.imsave(
513+
filename_or_obj,np.asarray(self.buffer_rgba()),format="png",
514+
origin="upper",dpi=self.figure.dpi,
515+
metadata=metadata,pil_kwargs=pil_kwargs)
524516

525517
defprint_to_buffer(self):
526518
FigureCanvasAgg.draw(self)

‎lib/matplotlib/image.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1509,8 +1509,10 @@ def imsave(fname, arr, vmin=None, vmax=None, cmap=None, format=None,
15091509
pil_shape= (rgba.shape[1],rgba.shape[0])
15101510
image=PIL.Image.frombuffer(
15111511
"RGBA",pil_shape,rgba,"raw","RGBA",0,1)
1512-
ifformat=="png"andmetadataisnotNone:
1513-
# cf. backend_agg's print_png.
1512+
if (format=="png"
1513+
andmetadataisnotNoneand"pnginfo"notinpil_kwargs):
1514+
# Only use the metadata kwarg if pnginfo is not set, because the
1515+
# semantics of duplicate keys in pnginfo is unclear.
15141516
pnginfo=PIL.PngImagePlugin.PngInfo()
15151517
fork,vinmetadata.items():
15161518
pnginfo.add_text(k,v)

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp