使用PIL拆分.TIF文件

8
我查看了有关使用Python拆分多页TIFF文件的Split multi-page tiff with python文件,但说实话,我并没有完全理解答案,希望能得到一些澄清说明。
我正在尝试将包含多张发票的.Tif文件拆分为每个页面,然后将其压缩并上传到数据库。计算机上已安装PIL库,因此我想使用PIL库。我知道在打开图像后可以使用PIL查看每个图像的大小等信息,但是当我尝试保存每个图像时会出现问题。(示例代码如下)
def Split_Images(img,numFiles):
    ImageFile = Image.open(img)
    print ImageFile.size[0]
    print ImageFile.size[1]
    ImageFile.save('InvoiceTest1.tif')[0]
    ImageFile.save('InvoiceTest2.tif')[1]

然而,当我运行这段代码时,我会得到以下错误:
TypeError: 'NoneType' object has no attribute '__getitem__'

有什么建议吗?

提前感谢您的帮助。


你出现这个错误是因为 ImageFile.save() 返回的是 None,而你正在尝试访问 None 的第 01 个元素。你有试过将最后两行 save() 之后的所有内容删除吗? - sundance
我这样做了,它会保存第一页或发票号码1,但由于有多个发票(例如第1页是发票1,第2页是发票2),我试图将第1页保存为一个文件名,将第2页保存为一个不同的文件名。 - FurryAlchemist
但是你为什么要尝试访问ImageFile.save()返回的值呢? - sundance
看,这是个奇怪的事情,这个文件已经是两张分开的图片了,我可以在Windows照片查看器中来回翻转这些页面。 - FurryAlchemist
你能提供一个多页.TIF文件的链接吗? - martineau
显示剩余3条评论
1个回答

9

您需要使用PIL图像的"seek"方法来访问不同的页面。

from PIL import Image

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

for i in range(4):
    try:
        img.seek(i)
        img.save('page_%s.tif'%(i,))
    except EOFError:
        break

你如何查找一个Tiff堆栈中的帧数? img.info 没有任何输出。 - MostafaMV
2
对于帧数,请使用此处描述的 n_frames:https://dev59.com/9ITba4cB1Zd3GeqP-b9y - David C

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接