【发布时间】:2013-07-27 03:35:40
【问题描述】:
好的,这是我们的问题:
我们正在尝试使用 imageio 将一系列黑白 .tiff 文件转换为 jpeg2000 .jpf 文件。我们总是获得可查看的 .jpf 文件,但它们通常没有指定的层数或用于缩放的分解级别。
这是我们的代码:
//Get the tiff reader
Iterator<ImageReader> readerIterator = ImageIO.getImageReadersByFormatName("tiff");
ImageReader tiffreader = readerIterator.next();
//make an ImageInputStream from our tiff file and have the tiff reader read it
ImageInputStream iis = ImageIO.createImageInputStream(itemFile);
tiffreader.setInput(iis);
//just pass empty params to the tiff reader
ImageReadParam tparam;
tparam = new TIFFImageReadParam();
IIOImage img = tiffreader.readAll(0, tparam);
//set up target file
File f = new File(itemTargetDirectory.getAbsolutePath() + "/" + destFileName);
//we have tried FILTER_97 as well as different ProgressionTypes and compression settings
J2KImageWriteParam param;
param = new J2KImageWriteParam();
param.setProgressionType("layer");
param.setFilter(J2KImageWriteParam.FILTER_53);
//Our problem is that this param is not always respected in the resulting .jpf
param.setNumDecompositionLevels(5);
//get the JPEG 2000 writer
Iterator<ImageWriter> writerIterator = ImageIO.getImageWritersByFormatName("JPEG 2000");
J2KImageWriter jp2kwriter = null;
jp2kwriter = (J2KImageWriter) writerIterator.next();
//write the jpf file
ImageOutputStream ios = ImageIO.createImageOutputStream(f);
jp2kwriter.setOutput(ios);
jp2kwriter.write(null, img, param);
这是一种奇怪的体验,因为相同的代码在随后的运行中表现不同。 任何见解将不胜感激!
【问题讨论】:
-
有多少读者返回 ImageIO.getImageReadersByFormatName("tiff");方法?有多少作者返回 ImageIO.getImageWritersByFormatName("JPEG 2000");方法?您是否有可能为每次执行获得不同的读者或作家?
-
@Fedy2 ImageIO 返回的读取器/写入器的顺序应该是稳定的。不过,最好确认一下是否确实如此。
-
任何地方的示例文件?
-
//我们的问题是这个参数(numDecompositionLevels)在生成的.jpf中并不总是得到尊重。当不考虑分解级别 5 时,您在生成的图像中获得了多少级别?
标签: java javax.imageio jpeg2000