如何编写 5+ 通道 TIFF?

Posted

技术标签:

【中文标题】如何编写 5+ 通道 TIFF?【英文标题】:How to write a 5+ channel TIFF? 【发布时间】:2014-02-12 17:06:55 【问题描述】:

我正在尝试找到一个库,它允许我创建具有任意数量通道的 tiff,例如 Photoshop 允许它发生的方式。

具体来说,我需要编写一个 6 通道 TIFF(CMYK 带 2 个通道来表示白色),但我发现所有库/可编写脚本的工具都在 RBGA 中找到了最大值。

关于如何编程的任何想法?

我想要什么的详细信息

来自@BitBank 下面的问题。我不想自己实现 adobe tiff 规范。

运行环境 Ubuntu/Windows Server

FOSS/付费?最好是 OSS

语言? C/C++/C#/Golang/Python/Java

【问题讨论】:

你没有提供很多细节:操作环境、语言、FOSS/付费解决方案、编码能力等。写TIFF文件比阅读它们容易得多;你考虑过自己做吗? @BitBank 因您的问题而更新 【参考方案1】:

这可以使用多种工具(包括我自己公司的工具)来完成,但您会遇到的问题是,“正确”的解决方案在 TIFF 领域没有多大意义。例如,您可以将通道数设置为您想要的任何值,并为额外的样本标签设置一个值数组,但您将使用未定义的值。那么有一个问题是光度解释标签应该包含什么?它不是 CMYK,规范中没有任何适合它的东西。

那么 PhotoShop 是做什么的?不知道我的头,但我知道有一个 ICC 配置文件标签可以包含定义频道信息所需的所有信息,所以它可能会这样做吗?这是您在参与创建 TIFF 规范并拥有支持您的自定义扩展的工程时可以做出的决定。你没有那个。这就是将要发生的事情(从我的角度来看):你奇怪的 TIFF 出现在野外,并落入我的一位客户手中,然后他说,“嘿!-你的软件给了我有趣的颜色/没有图像我打开这个 TIFF。我以为你支持 TIFF?这通常来自一个客户,他不知道 TIFF 不是一种文件格式,而是一堆不同的格式/压缩组合在一起,当你有一些大学项目制作了一组未标准化的灰色 TIFF通道值的浮点数据,并使用完全自定义的、未发布的、未记录的标签集来描述最小值和最大值,因此我浪费了几天时间试图追踪文件的来源并为客户编写示例应用程序标准化通道值并标准化文件。呸。

非常重要的建议:不要这样做。

如果您选择忽略我的非常重要的建议并执行此操作,您应该执行以下操作:

    记录您如何自定义 TIFF 内容 公开发布该规范 发布生成和使用它的代码 设置一个software tag 来识别您和您的软件并指向您的文档,这样当我不得不支持您的扩展程序时,我至少可以对您的出身进行诽谤,并且最好有一个路线图“修复”您的文件。

如果我是你,我会这样做 - 将通道拆分为 n 个不同的灰色文件,并将它们与一个 XML 文件捆绑在一起,该文件记录如何将它们放在一起,或者将 CMYK 文件与多个单独的 TIFF 中的额外通道捆绑在一起文件。

【讨论】:

在 TIFF v6 规范的第 16 节中,PhotometricInterpretation 没有 CMYK 值,但值 5 表示“分离 - 通常是 CMYK”。连同 2 的 InkSet(“非 CMYK”)、等于通道数的 NumberOfInks 和相应的 InkNames 数组(每个通道一个项目),我认为你应该很好(根据规范)。然而,规范也非常明确,这些类型的文件是特定于设备的,“不应用于一般图像数据交换”

以上是关于如何编写 5+ 通道 TIFF?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写将 0xFF 置于匹配通道中的 SWAR 比较?

如何在golang中为包含通道、filewalk和api调用的程序编写单元测试?

Python读取TIFF多通道图像

使用平台通道编写平台特定的代码

Python:读写 TIFF 16 位,三通道,彩色图像

如何更改 ImageIO 写入字节序