2

我有一个 TIF,里面有多个页面(都是旧式 JPEG 编码的)。我想做的是从 TIF 中删除一些页面。

我尝试了 FreeDirectory 方法,但似乎完全没有效果。

4

2 回答 2

1

由于 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() 中。其余的重量相当轻。

于 2017-01-25T15:50:32.600 回答
0

使用库没有简单的方法可以做到这一点。

您可以尝试使用 UnlinkDirectory 但这不会减小文件大小。并且数据仍将驻留在文件中。行为良好的观看者将无法访问该框架。

另一种方法是将相关帧复制到新图像。您可以从使用 TiffCP 实用程序开始。然后您可以查看该实用程序的源代码。

请注意,仅在只读模式下支持 OJPEG 压缩。如果不解压缩并重新压缩,您将无法复制图像数据。这个过程可以是有损或无损的。无损过程可能会产生更大的文件。

于 2017-01-25T20:45:36.353 回答