使用Apache Commons-Imaging / Sanselan更新Tiff元数据

时间:2014-04-24 21:51:19

标签: java image image-processing tiff

我将使用java修改并添加Tiff-Tags到现有的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,如压缩或将输出集定义为params,会导致不同的问题。但是一个是常数,destImage比src图像大,即使源图像像dest图像一样24位。

我怎样才能让Commons-Imaging为我工作?

1 个答案:

答案 0 :(得分:0)

我可以对大于 src destImage 做出响应,这是因为TIFF图像具有压缩功能,当压缩图像被读入内存时,该压缩不会保留下来。将映像写回存储时,必须显式应用压缩。