Java ImageIO Чтение и запись сжатых TIFF-файлов в цветовом пространстве лаборатории CIE
Я на самом деле пытаюсь читать и записывать сжатые tif-файлы с помощью цветового пространства CIE Lab.
К сожалению, если я попытаюсь просто прочитать и после этого записать TIF обратно на жесткий диск, цвет отличается от soure TIF.
Может ли библиотека ImageIO читать и записывать сжатые tif-файлы с цветовым пространством лаборатории CIE?
Если это возможно, я боюсь, что с кодом что-то не так. В списке singleTiffs есть по крайней мере один tiff-ImageInputStream, который создается следующим образом: ImageIO.createImageInputStream(testTiff)
Было бы здорово, если бы кто-то мог мне помочь. Большое спасибо!
// Get iterator for input images
Iterator<ImageInputStream> iterator = singleTiffs.iterator();
// Get tif writer and set output to file
Iterator writers = ImageIO.getImageWritersByFormatName("tiff");
ImageWriter writer = (ImageWriter) writers.next();
ImageOutputStream ios = ImageIO.createImageOutputStream(newMultiPageTIFF);
writer.setOutput(ios);
// Write each image out to the new file
boolean firstImage = true;
while(iterator.hasNext())
{
ImageInputStream iis = iterator.next();
// Get a reader for the stream
Iterator readers = ImageIO.getImageReaders(iis);
ImageReader reader = (ImageReader) readers.next();
reader.setInput(iis);
// Read the stream metadata
// IIOMetadata streamMetadata = reader.getStreamMetadata();
// Read the image metadata - we are assuming there is only one image
// in the tiff
IIOMetadata imageMetadata = reader.getImageMetadata(0);
// Set up the writeParam
TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.US);
tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_COPY_FROM_METADATA);
BufferedImage bi = reader.read(0, null);
IIOImage image = new IIOImage(bi, null, imageMetadata);
if(firstImage == false)
writer.writeInsert(-1, image, tiffWriteParam);
else
{
writer.write(null, image, tiffWriteParam);
firstImage = false;
}
// Done writing all images for this image
reader.dispose();
}
// End writing of all files
writer.dispose();