我有一个扫描的多页TIFF图像,需要将每个页面拆分成单个文件。
这很容易通过利用.NET框架和C#来实现,但由于我没有在我使用的机器上安装所有开发工具,我反而选择使用IronPython(通过ipy.exe)来快速脚本处理逻辑。
使用Stack Overflow作为“博客”引擎,我将回答我自己的问题。欢迎提出意见,建议,备选方案等!
答案 0 :(得分: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)
答案 1 :(得分:1)
这样做的一个缺点是图像数据被解压缩,然后在保存时重新压缩。如果您的压缩是无损的(只是时间和内存),这不是问题,但如果您对TIFF内的图像使用JPEG压缩,则会丢失质量。
有很多方法可以直接使用libtiff - 我不知道有任何其他非商业工具可以做到这一点。基本上,您需要在文件中找到与图像数据相关的TIFF目录条目,并将它们直接复制到新的TIFF中,而不对其进行解码和重新编码。根据您想要做多少,您可能需要修复条目中的偏移量(例如,如果您还要带来元数据)
如果您有兴趣能够分割,合并,删除页面或重新排序TIFF文档而不会降低质量(并且速度更快,使用更少的内存),请查看我公司的产品DotImage和看看TiffDocument
课程。 This CodeProject article shows how to do it