多页 tiff 调整大小 python

Multi-Page tiff resizing python

首先 post 这里,虽然我已经花了几天时间在这里搜索各种查询。 Python3.6、Pillow和tiff处理
我想通过将一些图像从非常大调整为匹配 A4 格式来自动执行我们的一项手动任务。我们使用的是 tiff 格式,有时(经常)包含不止一页。所以我写道:

from PIL import Image,
...
def image_resize(path, dcinput, file):
    dcfake = read_config(configlocation)["resize"]["dcfake"]
    try:
        imagehandler = Image.open(path+file)
        imagehandler = imagehandler.resize((2496, 3495), Image.ANTIALIAS)
        imagehandler.save(dcinput+file, optimize=True, quality=95)
    except Exception:

但是非常(不)明显的是只有 tiff 的第一页被转换。这不完全是我对这个库的期望,但是我试图挖掘,并找到了一种从 tiff 中枚举每个页面并将其保存为单独文件的方法。

 imagehandler = Image.open(path+file)
        for i, page in enumerate(ImageSequence.Iterator(imagehandler)):
            page = page.resize((2496, 3495), Image.ANTIALIAS)
            page.save(dcinput + "proces%i.tif" %i, optimize=True, quality=95, save_all=True)

现在我可以使用 imagemagick 或一些内部命令将多个页面转换为一个页面,但这不是我想要做的,因为它会导致代码复杂化。

我的问题是,有没有独角兽可以帮助我:
1) 动态调整给定多页 tiff 的所有页面大小
2) 从几个争吵中建立一个争吵
我只想关注 python 模块。
谢谢

看看这个例子。它将使 TIF 文件的每一页缩小四倍(通过将每页的宽度和高度减半):

from PIL import Image
from PIL import ImageSequence
from PIL import TiffImagePlugin

INFILE  = 'multipage_tif_example.tif'
OUTFILE = 'multipage_tif_resized.tif'

print ('Resizing TIF pages')
pages = []
imagehandler = Image.open(INFILE)
for page in ImageSequence.Iterator(imagehandler):
    new_size = (page.size[0]/2, page.size[1]/2)
    page = page.resize(new_size, Image.ANTIALIAS)
    pages.append(page)

print ('Writing multipage TIF')
with TiffImagePlugin.AppendingTiffWriter(OUTFILE) as tf:
    for page in pages:
        page.save(tf)
        tf.newFrame()

它应该从 Pillow 3 后期开始工作。4.x 版本(在我的机器上使用版本 5.1.0)。

资源:

  • AppendingTiffWriter 讨论 here
  • 可以下载示例 TIF 文件here