Skip to content

Commit d687c21

Browse files
authored
Merge pull request #15434 from anntzer/imsave-priority
MNT: In imsave, let pnginfo have precedence over metadata.
2 parents 89df184 + 9e9c5d1 commit d687c21

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

lib/matplotlib/backends/backend_agg.py

+9-6
Original file line numberDiff line numberDiff line change
@@ -509,10 +509,9 @@ def print_png(self, filename_or_obj, *args,
509509

510510
if metadata is None:
511511
metadata = {}
512-
metadata = {
512+
default_metadata = {
513513
"Software":
514514
f"matplotlib version{__version__}, http://matplotlib.org/",
515-
**metadata,
516515
}
517516

518517
FigureCanvasAgg.draw(self)
@@ -521,9 +520,13 @@ def print_png(self, filename_or_obj, *args,
521520
from PIL.PngImagePlugin import PngInfo
522521
# Only use the metadata kwarg if pnginfo is not set, because the
523522
# semantics of duplicate keys in pnginfo is unclear.
524-
if "pnginfo" not in pil_kwargs:
523+
if "pnginfo" in pil_kwargs:
524+
if metadata:
525+
cbook._warn_external("'metadata' is overridden by the "
526+
"'pnginfo' entry in 'pil_kwargs'.")
527+
else:
525528
pnginfo = PngInfo()
526-
for k, v in metadata.items():
529+
for k, v in {**default_metadata, **metadata}.items():
527530
pnginfo.add_text(k, v)
528531
pil_kwargs["pnginfo"] = pnginfo
529532
pil_kwargs.setdefault("dpi", (self.figure.dpi, self.figure.dpi))
@@ -533,8 +536,8 @@ def print_png(self, filename_or_obj, *args,
533536
else:
534537
renderer = self.get_renderer()
535538
with cbook.open_file_cm(filename_or_obj, "wb") as fh:
536-
_png.write_png(renderer._renderer, fh,
537-
self.figure.dpi, metadata=metadata)
539+
_png.write_png(renderer._renderer, fh, self.figure.dpi,
540+
metadata={**default_metadata, **metadata})
538541

539542
def print_to_buffer(self):
540543
FigureCanvasAgg.draw(self)

lib/matplotlib/image.py

+9-5
Original file line numberDiff line numberDiff line change
@@ -1539,12 +1539,16 @@ def imsave(fname, arr, vmin=None, vmax=None, cmap=None, format=None,
15391539
pil_shape = (rgba.shape[1], rgba.shape[0])
15401540
image = Image.frombuffer(
15411541
"RGBA", pil_shape, rgba, "raw", "RGBA", 0, 1)
1542-
if format == "png" and metadata is not None:
1542+
if format == "png" and metadata:
15431543
# cf. backend_agg's print_png.
1544-
pnginfo = PngInfo()
1545-
for k, v in metadata.items():
1546-
pnginfo.add_text(k, v)
1547-
pil_kwargs["pnginfo"] = pnginfo
1544+
if "pnginfo" in pil_kwargs:
1545+
cbook._warn_external("'metadata' is overridden by the "
1546+
"'pnginfo' entry in 'pil_kwargs'.")
1547+
else:
1548+
pnginfo = PngInfo()
1549+
for k, v in metadata.items():
1550+
pnginfo.add_text(k, v)
1551+
pil_kwargs["pnginfo"] = pnginfo
15481552
if format in ["jpg", "jpeg"]:
15491553
format = "jpeg" # Pillow doesn't recognize "jpg".
15501554
color = tuple(

0 commit comments

Comments
 (0)