如何使用 Python 图像库 (PIL) 确定多页 TIFF 的长度?
How can I determine the length of a multi-page TIFF using Python Image Library (PIL)?
我知道 PIL 的 Image.seek()
和 Image.tell()
方法允许我分别转到特定帧和列出当前帧。我想知道总共有多少帧。是否有获取此信息的功能?或者,在 python 中有没有一种方法可以让我循环并捕获没有图像时发生的错误?
from PIL import Image
videopath = '/Volumes/USB20FD/test.tif'
print "Using PIL to open TIFF"
img = Image.open(videopath)
img.seek(0) # .seek() method allows browsing multi-page TIFFs, starting with 0
im_sz = [img.tag[0x101][0], img.tag[0x100][0]]
print "im_sz: ", im_sz
print "current frame: ", img.tell()
print img.size()
在上面的代码中,我打开了一个 TIFF 堆栈,并访问了第一帧。我需要知道 "how deep" 堆栈的运行情况,这样如果不存在图像,我就不会在下游计算中出错。
解决方法是在 TIFF 文件中没有更多图像时检测错误:
n = 1
while True:
try:
img.seek(n)
n = n+1
except EOFError:
print "Got EOF error when I tried to load", n
break;
请随意评论我的 Python 风格 - 对不得不做 n+1 不是很满意 :)
我解决这个问题的方法是转到 Python documentation 8.3(错误和异常)。我通过在 Python 命令行中调试找到了正确的错误代码。
>>> img.seek(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/PIL/TiffImagePlugin.py", line 534, in seek
self._seek(frame)
File "/Library/Python/2.7/site-packages/PIL/TiffImagePlugin.py", line 550, in _seek
raise EOFError, "no more images in TIFF file"
EOFError: no more images in TIFF file
>>>
如果您能等到 2015 年 7 月 1 日,下一个版本的 Pillow(PIL 分支)将允许您使用 n_frames
进行检查。
如果你等不及到那个时候,你可以复制那个实现,给你自己的版本打补丁,或者使用最新的开发版本。
我知道 PIL 的 Image.seek()
和 Image.tell()
方法允许我分别转到特定帧和列出当前帧。我想知道总共有多少帧。是否有获取此信息的功能?或者,在 python 中有没有一种方法可以让我循环并捕获没有图像时发生的错误?
from PIL import Image
videopath = '/Volumes/USB20FD/test.tif'
print "Using PIL to open TIFF"
img = Image.open(videopath)
img.seek(0) # .seek() method allows browsing multi-page TIFFs, starting with 0
im_sz = [img.tag[0x101][0], img.tag[0x100][0]]
print "im_sz: ", im_sz
print "current frame: ", img.tell()
print img.size()
在上面的代码中,我打开了一个 TIFF 堆栈,并访问了第一帧。我需要知道 "how deep" 堆栈的运行情况,这样如果不存在图像,我就不会在下游计算中出错。
解决方法是在 TIFF 文件中没有更多图像时检测错误:
n = 1
while True:
try:
img.seek(n)
n = n+1
except EOFError:
print "Got EOF error when I tried to load", n
break;
请随意评论我的 Python 风格 - 对不得不做 n+1 不是很满意 :)
我解决这个问题的方法是转到 Python documentation 8.3(错误和异常)。我通过在 Python 命令行中调试找到了正确的错误代码。
>>> img.seek(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/PIL/TiffImagePlugin.py", line 534, in seek
self._seek(frame)
File "/Library/Python/2.7/site-packages/PIL/TiffImagePlugin.py", line 550, in _seek
raise EOFError, "no more images in TIFF file"
EOFError: no more images in TIFF file
>>>
如果您能等到 2015 年 7 月 1 日,下一个版本的 Pillow(PIL 分支)将允许您使用 n_frames
进行检查。
如果你等不及到那个时候,你可以复制那个实现,给你自己的版本打补丁,或者使用最新的开发版本。