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();

0 ответов

Другие вопросы по тегам