我有一个 TIF,里面有多个页面(都是旧式 JPEG 编码的)。我想做的是从 TIF 中删除一些页面。
我尝试了 FreeDirectory 方法,但似乎完全没有效果。
我有一个 TIF,里面有多个页面(都是旧式 JPEG 编码的)。我想做的是从 TIF 中删除一些页面。
我尝试了 FreeDirectory 方法,但似乎完全没有效果。
由于 libTiff.Net 是基于 libTiff 的,因此显然可以执行此任务,但用于执行此任务的 API 并没有以合理的格式存在。在大多数情况下,我相信 libTiff.Net 在宇宙中的作用是为 BitMiracle(嗨!)提供一种将 TIFF 转换为 PDF 的方法,这是一项非常常见的任务。
问题是您需要为文档中的页面找到合适的 IFD 并将其删除。这是直截了当的,但这会将所有图像数据抛在脑后。如果您将经过它的数据从图像数据中合并到孔中,那么您必须找到所有与移动数据相关的内容并对其进行调整,这意味着最终您需要完全了解 TIFF 规范才能做到这一点。欢迎来到地狱,这是你的手风琴。
如果您正在寻找替代方案,我在我的上一家公司 Atalasoft 为 dotImage 产品编写了代码,将 TIFF 操作的所有细节封装到一个不错的小 API中。它不是免费的,当我上次检查时,看起来他们抬高了价格。尽管如此,如果这是一次性的,您仍然可以获得 30 天的免费试用期,否则,请拿出支票簿。
以下是您在 dotImage 中的操作方式:
TiffDocument doc = new TiffDocument(sourceStream);
// obviously, in a loop you should remove the pages in descending order
doc.Pages.RemoveAt(zeroBasedPageIndex);
doc.Save(destinationStream);
仅供参考,所有繁重的工作都发生在 doc.Save() 中。其余的重量相当轻。
使用库没有简单的方法可以做到这一点。
您可以尝试使用 UnlinkDirectory 但这不会减小文件大小。并且数据仍将驻留在文件中。行为良好的观看者将无法访问该框架。
另一种方法是将相关帧复制到新图像。您可以从使用 TiffCP 实用程序开始。然后您可以查看该实用程序的源代码。
请注意,仅在只读模式下支持 OJPEG 压缩。如果不解压缩并重新压缩,您将无法复制图像数据。这个过程可以是有损或无损的。无损过程可能会产生更大的文件。