3

我有一张扫描的多页 TIFF 图像,需要将每一页拆分成单独的文件。

这很容易通过利用 .NET 框架和 C# 来实现,但由于我没有在我使用的机器上安装所有开发工具,我转而选择使用 IronPython(通过 ipy.exe)来快速编写处理脚本逻辑。

使用 Stack Overflow 作为“博客”引擎,我将为我自己的问题提供答案。欢迎提出意见、建议、替代方案等!

4

2 回答 2

3

这是执行此操作的一种方法 - 根据需要进行调整。


import clr
clr.AddReference("System.Drawing")

from System.Drawing import Image
from System.Drawing.Imaging import FrameDimension
from System.IO import Path

# sourceFilePath - The full path to the tif image on disk (e.g path = r"C:\files\multipage.tif")
# outputDir - The directory to store the individual files.  Each output file is suffixed with its page number.
def splitImage(sourceFilePath, outputDir):
     img = Image.FromFile(sourceFilePath)

     for i in range(0, img.GetFrameCount(FrameDimension.Page)):

         name = Path.GetFileNameWithoutExtension(sourceFilePath)
         ext = Path.GetExtension(sourceFilePath)
         outputFilePath = Path.Combine(outputDir, name + "_" + str(i+1) + ext)

         frameDimensionId = img.FrameDimensionsList[0]
         frameDimension = FrameDimension(frameDimensionId)

         img.SelectActiveFrame(frameDimension, i)
         img.Save(outputFilePath, ImageFormat.Tiff)
于 2009-12-09T22:48:20.143 回答
1

这样做的一个缺点是图像数据被解压缩,然后在保存时重新压缩。如果您的压缩是无损的(只是时间和内存),这不是问题,但如果您对 TIFF 内的图像使用 JPEG 压缩,您将失去质量。

有一些方法可以直接使用 libtiff 来做到这一点——我不知道有任何其他非商业工具可以做到这一点。基本上,您需要在文件中找到与图像数据相关的 TIFF 目录条目,并将它们直接复制到新的 TIFF 中,而无需对其进行解码和重新编码。根据您想做的程度,您可能需要修复条目中的偏移量(例如,如果您还带入元数据)

如果您有兴趣在不损失质量的情况下拆分、合并、删除页面或重新排序 TIFF 文档(而且速度更快且使用更少的内存),请查看我公司的产品DotImage并查看TiffDocument课程。这篇 CodeProject 文章展示了如何做到这一点

于 2009-12-14T16:01:56.427 回答