Image processing Java ImageIO使用CIE lab colorspace读取和写入压缩的Tiff文件

Image processing Java ImageIO使用CIE lab colorspace读取和写入压缩的Tiff文件,image-processing,tiff,javax.imageio,cielab,Image Processing,Tiff,Javax.imageio,Cielab,实际上,我尝试使用CIE Lab colorspace读取和写入压缩的tif文件 不幸的是,如果我只是尝试读取,然后将tif写回HDD,则颜色与soure tif不同 ImageIO库是否能够使用CIE lab颜色空间读取和写入压缩的tif文件 如果可能的话,我担心代码有问题。SingleTIFF列表中至少有一个tiff ImageInputStream,其创建方式如下: createImageInputStream(testTiff) 如果有人能帮我就好了。非常感谢 // Get iterat

实际上,我尝试使用CIE Lab colorspace读取和写入压缩的tif文件

不幸的是,如果我只是尝试读取,然后将tif写回HDD,则颜色与soure tif不同

ImageIO库是否能够使用CIE lab颜色空间读取和写入压缩的tif文件

如果可能的话,我担心代码有问题。SingleTIFF列表中至少有一个tiff ImageInputStream,其创建方式如下: 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();
//获取输入图像的迭代器
迭代器迭代器=singleTIFF.Iterator();
//获取tif编写器并将输出设置为文件
迭代器编写器=ImageIO.getImageWritersByFormatName(“tiff”);
ImageWriter writer=(ImageWriter)writers.next();
ImageOutputStream ios=ImageIO.createImageOutputStream(NewMultiputIFF);
writer.setOutput(ios);
//将每个图像写入新文件
布尔值firstImage=true;
while(iterator.hasNext())
{
ImageInputStream iis=iterator.next();
//获取流的读取器
迭代器阅读器=ImageIO.getImageReaders(iis);
ImageReader=(ImageReader)readers.next();
reader.setInput(iis);
//读取流元数据
//IIOMetadata streamMetadata=reader.getStreamMetadata();
//读取图像元数据-我们假设只有一个图像
//争吵中
IIOMetadata imageMetadata=reader.getImageMetadata(0);
//设置writeParam
TIFFImageWriteParam tiffWriteParam=新的TIFFImageWriteParam(Locale.US);
tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_从_元数据复制_);
BuffereImage bi=reader.read(0,null);
IIOImage image=新IIOImage(bi,null,imageMetadata);
if(firstImage==false)
writer.writeInsert(-1,image,tiffWriteParam);
其他的
{
writer.write(null、image、tiffWriteParam);
firstImage=false;
}
//已完成为此图像写入所有图像
reader.dispose();
}
//结束所有文件的写入
writer.dispose();

请每个帖子只问一个问题对不起,我认为这两个问题都是相互关联的,因为如果问题1的答案是“否”,那么问题2就过时了。下一次我将为几个问题创建几个帖子。好吧,很抱歉,我没有彻底阅读你的问题就复习了。我想你可以很容易地重新表述“第一个问题”-“第二个问题”的措辞,社区不喜欢看到这些短语;)