From 565da148829ce8ad951baf5190b2b718d6ee35c0 Mon Sep 17 00:00:00 2001 From: James Zern Date: Fri, 28 Feb 2025 12:53:41 -0800 Subject: [PATCH] pngdec.c: add support for 'eXIf' tag Test file created with exiftool 12.76: ``` exiftool test_app1_exif.png -exif:all \ -exif:DocumentName=test_multi_exif.png -o test_multi_exif.png ``` Bug: webp:398066379 Change-Id: I1437390a70f5708421683eb69c588624bb376baa --- imageio/pngdec.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/imageio/pngdec.c b/imageio/pngdec.c index 8dc3c6c7..049acd7c 100644 --- a/imageio/pngdec.c +++ b/imageio/pngdec.c @@ -161,6 +161,20 @@ static int ExtractMetadataFromPNG(png_structp png, png_textp text = NULL; const png_uint_32 num = png_get_text(png, info, &text, NULL); png_uint_32 i; + +#ifdef PNG_eXIf_SUPPORTED + // Look for an 'eXIf' tag. Preference is given to this tag as it's newer + // than the TextualData tags. + { + png_bytep exif; + png_uint_32 len; + + if (png_get_eXIf_1(png, info, &len, &exif) == PNG_INFO_eXIf) { + if (!MetadataCopy((const char*)exif, len, &metadata->exif)) return 0; + } + } +#endif // PNG_eXIf_SUPPORTED + // Look for EXIF / XMP metadata. for (i = 0; i < num; ++i, ++text) { int j;