我已经为TIFF ImageIO插件进行了研究,据我了解,Photoshop在TIFF中存储图层信息的方式是完全专有的,并且没有使用标准的TIFF机制,例如利用链接或嵌套的IFD(
330/SubIFD)或文件的多页文档类型(
254/NewSubFileType)等。
而是将图层信息 以及图层图像数据存储 在Photoshop专用的TIFF标签中;
37724/ImageSourceData,具有类型
UNDEFINED(或“仅字节”)。幸运的是,此标签的内容记录在AdobePhotoshop®TIFF技术说明中。
该标记的内容将始终以0终止的string开头
"Adobe Photoshop document DataBlock"。其余内容是各种Photoshop资源,由Photoshop
4字节资源标识符标识
8BIM,后跟4字节资源密钥和4字节长(每个单独的资源)。
关于Photoshop图层,此块中有趣的资源是用资源密钥标识的资源
Layr。这与Photoshop文件格式的“
图层和蒙版信息”部分中记录的结构相同。
还有一个不同的标记,
34377/Photoshop其中包含Photoshop读取和写入的其他图像资源。它也记录在上述文档的“
图像资源”部分中。它确实包含一些有关图层的有趣信息,但是我不确定您需要编写多少信息。您可能需要安装Photoshop并使用“真实对象”进行测试。
我确实有代码可以 读取 PSD ImageIO插件中的这两种结构,这可能值得一看,但尚不支持编写。
当您可以写内容Photoshop
TIFF标签时,您应该能够将其
TIFFImageWriter作为TIFF的
IIOmetadata一部分传递给,编写器将把它与传递的任何其他元数据和像素数据一起写出。
因此,正如您所看到的,所有这些(大部分)都已记录在文档中,并且可以肯定在Java中是可行的,但仍然不完全是琐碎的。



