【问题标题】:Can I modify the total number of pages in multi-page tiff?我可以修改多页 tiff 中的总页数吗?
【发布时间】:2020-02-06 17:33:49
【问题描述】:

我正在从相机接收数据并将每个图像保存为多页 tiff 中的一个页面。我可以设置每个文件都有例如100 页,我正在打电话:

TIFFSetField(out, TIFFTAG_PAGENUMBER, page_number, total_pages);

但是,如果我无法以足够快的速度将数据写入磁盘,我将停止采集。在这一点上,我可能已经将 100 页中的 50 页写入了多页 tiff。现在多页 tiff 文件报告总页数为 100,但实际只写入了 50 页。一些应用程序会报告 100 页,但对于第 51-100 页,将没有数据并且图像将显示为黑色。

因此,当我结束磁盘写入到最后写入页面的值时,我需要更新total_pages 数字。 这完全可以做到吗? total_pages 值是一次写入一个公共标头,我可以通过这种方式更新和修复文件,还是这个值写入每个页面,这意味着我必须编辑已经写入磁盘的每个页面?或者有没有更好的方法来处理这个问题?

【问题讨论】:

    标签: tiff libtiff


    【解决方案1】:

    其实解决方法很简单。 一旦您的图像流结束并且在您关闭文件之前,您必须遍历所有目录(多页 tiff 中的图像)并将TIFFTAG_PAGENUMBER 更新为写入的总页数。 问题是您必须在通过调用TIFFClose 关闭 tiff 之前执行此操作。一旦 TIFF 关闭,其 TAGS 将无法再编辑。 (见http://www.libtiff.org/libtiff.html):

    请注意,与 stdio 库不同,TIFF 图像文件可能无法同时打开以进行读写;不支持更改 TIFF 文件的内容。

    if (pagesTotal - pagesWritten > 0)
    {
        for (int i = 0; i < pagesWritten; i++)
        {
             int retVal = TIFFSetDirectory(out, i);
             retVal = TIFFSetField(out, TIFFTAG_PAGENUMBER, i, pagesWritten);
             retVal = TIFFWriteDirectory(out);
         }
    }
    TIFFClose(out);
    

    pagesTotal 是我们打算写入这个多页文件的页数

    pagesWritten 是我们实际写入文件的页数

    【讨论】:

      猜你喜欢
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多