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

Ste*_*ler 5 java tiff image image-processing

我将使用java修改并添加Tiff-Tags到现有的tif文件.JAI imageio崩溃了,因为它无法处理来自Tiff 6.0的某些标签.Apache Commons-Imaging似乎能够处理这些标签.但我不知道,怎么做.我在这里找到了一篇帖子,我用它开始(如何在TiffOutputSet中嵌入ICC_Profile).使用示例代码会创建一个图像,由于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);
Run Code Online (Sandbox Code Playgroud)

使用image_params,如压缩或将输出集定义为params,会导致不同的问题.但是一个是常数,destImage比src图像大,即使源图像像dest图像一样24位.

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

小智 0

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