首先发布这里,虽然我已经花了几天时间在这里搜索各种查询。 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。
答案 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)。
资源: