【发布时间】:2013-10-28 21:46:10
【问题描述】:
我正在完成一个可以压缩多页 tiff 图像的 java 应用程序。问题是,如果我将它作为 .jar 文件运行,它在我的 IDE 内部以及在同一台计算机上的本地环境中都可以正常工作,但是如果我尝试在另一台也安装了 java 的计算机上运行它,它会压缩 tiff 文件,但这些图像不再可见。单击它们会为 Windows 图像查看器显示“无可用预览”。这可能是什么原因造成的?我压缩多页tiff的具体方法如下:
public synchronized void compress() throws IOException
{
System.out.println("NUMpAGES: " + numPages);
if(this.getSrcImageFile().length()<SIZE_THRESHOLD){
this.closeAllStreams();
return;
}
this.initOutStreams();
this.setImageEncoder(ImageCodec.createImageEncoder("tiff", this.getOutputStream(), null));
int compressionAlgorithm;
if(bitDepth == 1 || bitDepth == 8)
{
/*Cant use JPEG_TTN2 with images that have less than 8-bit samples/only have a bit-depth of 1.*/
compressionAlgorithm = TIFFEncodeParam.COMPRESSION_DEFLATE;
encodeParams.setCompression(compressionAlgorithm); //redundant with line above
}
else
{
System.out.println("Attempting to compress using JPEG_TTN2 with bit depth: " + bitDepth);
compressionAlgorithm = TIFFEncodeParam.COMPRESSION_JPEG_TTN2;
encodeParams.setCompression(compressionAlgorithm); //redundant with line above
}
this.setImageEncoder(ImageCodec.createImageEncoder("tiff", this.getOutputStream(), encodeParams));
Vector vector = new Vector();
if(numPages == 1){
for(int i = 0; i < numPages - 1; i ++) //i < bufferedImages.length OLD
{
System.out.println(i);
vector.add((bufferedImages[i]));
}
}else{
System.out.println("Using second case");
for(int i = 0; i < numPages; i ++)
{
System.out.println("Adding to vector image for file " + this.getSrcImagePath() + " " + i);
vector.add((bufferedImages[i]));
}
}
System.out.println("Buffered Images size: " + bufferedImages.length);
Iterator vecIter = vector.iterator();
if(numPages > 1){
vecIter.next();
}
encodeParams.setExtraImages(vecIter);
this.getImageEncoder().encode(bufferedImages[0]);
closeAllStreams();
}
【问题讨论】:
-
那些非本地安装有 ImageIO 的副本吗? JAI 不附带 JDK AFAIK。
-
首先,检查它是否真的与你的代码有关。另一台计算机是否显示其他 TIFF 文件的预览,例如在您的计算机上工作的那些?您的计算机是否显示另一台计算机上生成的图像的预览?
-
@mabi: ImageIO 显然是安装在另一个JRE中的,否则它不会产生任何文件。
-
@Holger 在我对它进行任何操作之前,另一台计算机会显示 TIFF 的预览。在我的代码运行后,它显示“没有可用的预览”。在我的主机上,它会在之前和之后显示 tiff 预览。我已经在另一台机器上安装了用于 CLASSPATH 的 ImageIO 和用于 JRE 的 ImageIO,并且在运行时从命令提示符处没有抛出异常,所以我不知道是什么原因造成的。
-
很难诊断。这不再是一个 Java 问题了……
标签: java javax.imageio