Cha*_*lla 2 .net c# tiff metadata image-processing
我正在开发一个程序,该程序需要 8BIM 配置文件信息出现在 tiff 文件中才能继续处理。
在 Adobe Photoshop 中打开和保存的示例 tiff 文件(不包含 8BIM 配置文件信息)会获取此元数据信息。
我对如何解决这个问题一无所知。目标框架是 .net 2.0。
任何与此相关的信息都会有所帮助。
不知道为什么您需要 8BIM 出现在您的 TIFF 文件中。我只会给出一些关于 8BIM 的一般信息和结构。
8BIM 是 Photoshop 图像资源块 (IRB) 的签名。此类信息可以在 TIFF、JPEG、Photoshop 原生图像格式等图像中找到,也可以在 PDF 等非图像文档中找到。
IRB的结构如下:
每个 IRB 块以 4 个字节的签名开始,转换为字符串“8BIM”。之后是一个 2 字节的唯一标识符,表示该 IRB 的资源类型。例如:0x040c 为缩略图;0x041a 用于切片;0x0408 用于网格信息;0x040f 用于 ICC 配置文件等。
在标识符之后是一个可变长度的名称字符串。字符串的第一个字节告诉字符串的长度(不包括第一个长度字节)。在第一个字节之后是字符串本身。有一个要求是整个字符串的长度(包括长度字节)应该是偶数。否则,在字符串后多填充一个字节。
接下来的 4 个字节指定此资源块的实际数据大小,后跟具有指定长度的数据。数据的总长度也应该是偶数。因此,如果数据大小为奇数,则再填充一个字节。这样就完成了一个完整的8BIM。
可能有多个 IRB,但它们都符合上述相同的结构。如何解释数据取决于唯一标识符。
现在让我们看看 IRB 是如何包含在图像中的。对于 JPEG 图像,元数据可以作为应用程序 (APPn) 段之一出现。由于不同的应用程序可以使用相同的 APPn 段来存储自己的元数据,因此必须有某种标识符来让图像阅读器知道 APPn 中包含什么样的信息。Photoshop 使用 APP13 作为它的 IRB 容器,而 APP13 包含“Photoshop 3.0”作为它的标识符。
对于基于标签并排列在目录结构中的 TIFF 图像。有一个名为“PHOTOSHOP”的私有标签 0x8649 用于插入 IRB 信息。
让我们来看看TIFF图像格式(转引自该源):
TIFF 文件的基本结构如下:
前 8 个字节形成标题。其中前两个字节要么是“II”(表示小端字节顺序),要么是“MM”(表示大端字节顺序)。在接下来的内容中,我们将假设大端排序。注意:任何真正的 TIFF 阅读软件都应该处理这两种类型。标头的下两个字节应该是 0 和 42dec (2ahex)。头的剩余 4 个字节是从文件开头到第一个“图像文件目录”(IFD)的偏移量,这通常跟在它适用的图像数据之后。在下面的示例中,只有一张图像和一个 IFD。
IFD 由两个字节组成,指示条目数,后面是条目本身。IFD 以到下一个 IFD 的 4 字节偏移量终止,如果没有,则为 0。一个 TIFF 文件必须至少包含一个 IFD!
每个 IFD 条目由 12 个字节组成。前两个字节标识标记类型(如标记图像文件格式)。接下来的两个字节是字段类型(字节、ASCII、短整型、长整型、...)。接下来的四个字节表示值的数量。最后四个字节是值本身或值的偏移量。考虑以下 gievn 示例中的第一个 IFD 条目:
0100 0003 0000 0001 0064 0000
| | | |
tag --+ | | |
short int -+ | |
one value ------+ |
value of 100 -------------+
Run Code Online (Sandbox Code Playgroud)
为了能够读取 TIFF IFD,必须先做两件事:
现在让我们假设每个 12 字节的 IFD 条目都有一个称为 Entry 的结构。我们读取前两个字节(这里不应用字节序,因为它是 MM 或 II)来确定字节序。现在我们可以读取剩余的 IFD 数据并根据我们已经知道的字节顺序来解释它们。
现在我们有一个条目列表。在列表中插入一个新条目并不难——在我们的例子中,它是一个“Photoshop”条目。困难的部分是如何将数据写回以创建新的 TIFF。您不能直接将条目写回输出流,这会破坏
TIFF的整体结构。必须注意跟踪您写入数据的位置并相应地更新数据的指针。
从上面的描述中我们可以看出,将新条目插入到 TIFF 格式中并不是那么容易。考虑到每个 JPEG 段都是独立的,JPEG 格式将使它更容易。
我没有相关的 C# 代码,但这里有一个 Java 库,它可以操作 JPEG 和 TIFF 图像的元数据,如插入 EXIF、IPTC、缩略图等,如 8BIM。在您的情况下,如果文件大小不是一个大问题,上述库可以将一个小缩略图作为一个 8BIM 插入到 Photoshop 标签中。
归档时间: |
|
查看次数: |
2269 次 |
最近记录: |