多页面调整大小python

时间:2018-06-05 13:59:45

标签: python tiff pillow multipage

首先发布这里,虽然我已经花了几天时间在这里搜索各种查询。 Python 3.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正在被转换。这不是我对这个lib的期望,不过试图挖掘,并找到了一种从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)从几个tiffs建立一个tiff 我只想关注python模块。
THX。

1 个答案:

答案 0 :(得分:0)

看看这个例子。它将是每个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
相关问题