2017-09-18 232 views
0

我试图读取并保存一些tiff文件与一些额外的标签,当我做出一个新的图像,运行良好,但当我打开图像,然后试图写一些元标签回来没有工作(图像可以被写入,但它会保持原始标签没有任何改变)。如何为tiff文件添加额外的标签

我附上我的测试代码,非常感谢您的帮助!

from PIL import Image, TiffImagePlugin 
def test_custom_metadata(): 

    img = Image.open('myimage.tif') 

    info = TiffImagePlugin.ImageFileDirectory() 
    CustomTagId = 37000 

    info[CustomTagId] = 6 
    info.tagtype[CustomTagId] = 3 # 'short' TYPE 

    Image.DEBUG=True 
    TiffImagePlugin.WRITE_LIBTIFF = False # Set to True to see it break. 
    img.save('./temp2.tiff', tiffinfo = info) 

test_custom_metadata() 
+0

什么是 “不工作” 是什么意思?是否有错误,如果是这样,请将堆栈跟踪添加到帖子中。或者是图像写入,但你看不到你的自定义tiff标签? – Bernhard

+0

@伯恩哈德我说得很清楚,谢谢! – MMzztx

+0

您的代码在我的机器上运行时没有错误。 –

回答

1

我下面的作品与枕头2.3版本:

from PIL import Image 

image_1 = Image.open('input.tiff') 
image_1.tag[37000] = 'my special tiff tag' 
image_1.save('output.tiff', tiffinfo=image_1.tag) 

image_2 = Image.open('output.tiff') 
print image_2.tag[37000] 

在当前文件夹中的input.tiff运行时,这将打印my special tiff tag

我的理解是,这只有当你不使用libtiff写入文件时才有效。使用libtiff时,自定义标记被忽略。

+0

谢谢您的回应!在我将枕头从4.1更换为2.3之后,它可能会因为版本问题而出现问题。 – MMzztx

+0

还有一件事,是你的枕头2.3 img.save()能正常工作吗?当我保存图像时,它无法正确显示。 img.show()是正确的,但在保存之后,其中一些变为空白。谢谢你的耐心!另存为'.png'。 2.3是否支持'.tiff'... – MMzztx

+0

我认为差异在于,2.3默认使用它自己的TIFF编写器和新版本,默认情况下是在后台使用libtiff。在新版本中,你应该可以用libtiff来写作,就像你在'TiffImagePlugin.WRITE_LIBTIFF = False'中做的那样。保存的TIFF文件的问题很可能是由于PIL TIFF编写器实现中的某些不受支持的功能(至少在旧版本中)。 – Bernhard

相关问题