diff --git a/modules/extras.py b/modules/extras.py index 596cd172..cb083544 100644 --- a/modules/extras.py +++ b/modules/extras.py @@ -6,6 +6,8 @@ from modules.shared import opts import modules.gfpgan_model from modules.ui import plaintext_to_html import modules.codeformer_model +import piexif + cached_images = {} @@ -73,8 +75,20 @@ def run_extras(image, gfpgan_visibility, codeformer_visibility, codeformer_weigh def run_pnginfo(image): + items = image.info + + if "exif" in image.info: + exif = piexif.load(image.info["exif"]) + exif_comment = (exif or {}).get("Exif", {}).get(piexif.ExifIFD.UserComment, b'') + exif_comment = exif_comment.decode("utf8", 'ignore') + items['exif comment'] = exif_comment + + for field in ['jfif', 'jfif_version', 'jfif_unit', 'jfif_density', 'dpi', 'exif']: + del items[field] + + info = '' - for key, text in image.info.items(): + for key, text in items.items(): info += f"""

{plaintext_to_html(str(key))}

diff --git a/modules/images.py b/modules/images.py index 2e8eb335..9d730a93 100644 --- a/modules/images.py +++ b/modules/images.py @@ -325,14 +325,16 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i if not os.path.exists(fullfn): break - if extension == "png": - image.save(fullfn, quality=opts.jpeg_quality, pnginfo=pnginfo) + if extension.lower() in ("jpg", "jpeg"): + exif_bytes = piexif.dump({ + "Exif": { + piexif.ExifIFD.UserComment: info.encode("utf8"), + } + }) else: - exif_dict = { "Exif" : dict() } - exif_dict["Exif"][piexif.ExifIFD.UserComment] = piexif.helper.UserComment.dump( - info, encoding="unicode") - exif_bytes = piexif.dump(exif_dict) - image.save(fullfn, quality=opts.jpeg_quality, exif=exif_bytes) + exif_bytes = None + + image.save(fullfn, quality=opts.jpeg_quality, pnginfo=pnginfo, exif=exif_bytes) target_side_length = 4000 oversize = image.width > target_side_length or image.height > target_side_length