使用libtiff.net从TIFF图像中删除帧

时间:2017-01-25 14:16:45

标签: .net image tiff libtiff.net

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

我尝试过FreeDirectory方法,但似乎没有效果。

2 个答案:

答案 0 :(得分:1)

由于libTiff.Net基于libTiff,显然可以执行此任务,但用于执行此操作的API并不是以合理的格式存在的。在大多数情况下,我认为libTiff.Net在宇宙中的作用是为BitMiracle(hi!)提供一种将TIFF转换为PDF的方法,这是一项非常常见的任务。

问题是您需要为文档中的页面找到适当的IFD并将其删除。这是直截了当的,但这会留下所有的图像数据。如果您将数据从图像数据合并到孔中,那么您必须找到引用移动数据的所有内容并进行调整,这意味着您最终需要完全了解TIFF规范。欢迎来到地狱,这是你的手风琴。

如果您正在寻找替代方案,我会编写代码将TIFF操作的所有细节包含在我的上一家公司a nice little API中,用于dotImage产品的Atalasoft。这不是免费的,当我上次检查时,看起来他们已经抬高了价格。如果这是一次性的话,你仍然可以获得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()中。其余的相当轻便。

答案 1 :(得分:0)

使用该库没有简单的方法。

您可以尝试使用UnlinkDirectory,但这不会减小文件大小。并且数据仍将驻留在文件中。对于表现良好的观看者来说,这个框架是不可访问的。

另一种方法是将相关帧复制到新图像。您可以先使用TiffCP实用程序进行操作。然后,您可以查看该实用程序的源代码。

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