我将使用 java 修改 Tiff 标签并将其添加到现有的 tif 文件中。 JAI imageio 崩溃了,因为它无法处理来自 Tiff 6.0 的某些标签。 Apache Commons-Imaging 似乎能够处理这些标签。但我不知道如何做到这一点。我在这里找到了一个帖子,我用于开始( How to embed ICC_Profile in TiffOutputSet )。
使用示例代码创建了一个图像,由于 LZW 错误,我无法打开该图像。如果我使用 Imaging.writeImage(...) 方法,它会将颜色模型从 8Bit 更改为 24Bit,并且 Exif 元数据已经消失。
我所做的是:
bufferedImage = Imaging.getBufferedImage(srcTiff);
byte[] imageBytes = Imaging.writeImageToBytes(tifFile, imageFormat, optional_params)
exifDirectory = tiffOutputSet.getOrCreateRootDirectory();
...
TiffImageWriterLossLess lossLessWriter = new TiffImageWriterLossless(imageBytes);
os = new FileOutputStream(tmpFile);
os = new BufferedOutputStream(os);
lossLessWriter.writeImage(bufferedImage, os, image_params);
使用 image_params,例如压缩或将输出集定义为参数,会导致不同的问题。但一个是常数,destImage 比 src 图像大,即使源图像与 dest 图像一样是 24 位。
我怎样才能让 Commons-Imaging 为我工作?
最佳答案
我可以回复 destImage 比大源 ,这是因为 TIFF 图像具有在图像读入内存时不会进行的压缩。在将图像写回存储时,您必须显式应用压缩。
关于java - 使用 Apache Commons-Imaging/Sanselan 更新 Tiff-Metadata,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23280548/