移除TIFF图片损坏EXIF警告时,如何保留所有页面?
保留多页TIFF所有页面并移除EXIF的解决方案
你的问题出在原代码仅处理了TIFF文件的第一页,没有遍历所有页面进行处理,最终保存时自然只剩单页。要保留所有页面,需要遍历TIFF的每一帧,逐个移除EXIF后再批量保存。
以下是修改后的代码:
from PIL import Image def remove_exif_from_multipage_tiff(image_name): # 打开TIFF文件 with Image.open(image_name) as img: processed_pages = [] # 遍历所有页面 try: while True: # 复制当前页面的像素数据(不携带EXIF) page_data = list(img.getdata()) page_without_exif = Image.new(img.mode, img.size) page_without_exif.putdata(page_data) processed_pages.append(page_without_exif) # 切换到下一页 img.seek(img.tell() + 1) except EOFError: # 遍历完所有页面 pass if not processed_pages: return print(f'removing EXIF from {len(processed_pages)} pages of {image_name}...') # 保存所有处理后的页面,save_all=True 启用多页保存 processed_pages[0].save( image_name, format='TIFF', save_all=True, append_images=processed_pages[1:] ) remove_exif_from_multipage_tiff('ggg.tiff') print('Done')
关键说明:
- 遍历页面:通过
seek()和tell()方法切换TIFF的帧,直到触发EOFError(表示所有页面遍历完成)。 - 批量保存:调用
save()时指定save_all=True,并通过append_images参数传入剩余页面,实现多页TIFF的保存。 - EXIF移除逻辑:保留了你原有的方式——创建新图片并复制像素数据,这样新图片不会携带原有的EXIF信息。
内容的提问来源于stack exchange,提问作者YasserKhalil
相关产品推荐
相关产品推荐

