如何用Python和PILLOW为现有TIFF图像添加WANG注释?
如何正确给TIFF文件添加Wang Annotation标签(解决Pillow操作无效果问题)
我来帮你排查下问题,以及给出能成功实现的操作步骤:
你的操作为什么没生效?
直接修改im.tag字典的方式并不靠谱——Pillow的ImageTag对象虽然看起来像普通字典,但直接赋值的改动不会被保存流程正确识别和序列化到输出的TIFF文件里。另外,保存时也没明确告诉Pillow要保留这个自定义标签,导致最终的文件里并没有带上你添加的注释。
正确的实现步骤
Wang Annotation对应的TAG ID是32932(十六进制0x80A4),我们需要用Pillow专门的TIFF标签传递机制来添加它,具体代码如下:
from PIL import Image # 打开原始TIFF和包含注释的ANN对应文件 source_im = Image.open("test.tif") annotation_im = Image.open("test2.tif") # 提取Wang Annotation的二进制数据 wang_data = annotation_im.tag.get(32932) if not wang_data: print("没有找到Wang Annotation标签") exit() # 准备TIFF自定义标签:键是TAG ID,值是(数据类型代码, 数据) # Wang Annotation的数据类型是BYTE,对应代码1 custom_tags = { 32932: (1, wang_data) } # 保存时通过tiffinfo参数传入自定义标签 source_im.save("test_with_stamp.tif", tiffinfo=custom_tags) # 验证标签是否成功添加 saved_im = Image.open("test_with_stamp.tif") print("Wang Annotation标签已添加:", 32932 in saved_im.tag)
关键细节说明
- 用
tiffinfo传递标签:这是Pillow官方推荐的添加TIFF自定义标签的方式,它能确保标签被正确编码写入文件,而直接修改im.tag的操作会绕过这个序列化流程。 - 指定数据类型:TIFF标签需要明确数据类型,Wang Annotation属于BYTE类型(代码1),必须在元组里指定,否则Pillow不知道如何正确存储二进制数据。
- 验证方式:有些图像查看器不会直观显示Wang Annotation(也就是你说的"大黑框印章"),可以用
exiftool这类工具验证标签是否存在,比如执行exiftool -WangAnnotation test_with_stamp.tif查看内容。
另外建议确保你的Pillow版本是较新的(比如9.x以上),旧版本对TIFF自定义标签的支持可能有缺陷。
内容的提问来源于stack exchange,提问作者Benjamin Schollnick
相关产品推荐
相关产品推荐

