Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不支持在TIFF数据中解码旧式JPEG_Java_Tiff - Fatal编程技术网

Java 不支持在TIFF数据中解码旧式JPEG

Java 不支持在TIFF数据中解码旧式JPEG,java,tiff,Java,Tiff,我需要显示扫描的tiff文件的第3页。我用了密码 TIFFReader reader = new TIFFReader(new File(pathOfFile)); RenderedImage image = reader.getPage(2); 它有时起作用。和显示错误:不支持在TIFF数据中解码旧式JPEG。 我使用了aspriseTIFF.jar 那我怎么解决这个问题呢。 请回复。 提前感谢您遇到的问题是“旧样式”(压缩==6)在您使用的库中不受支持 我想这是很常见的,因

我需要显示扫描的tiff文件的第3页。我用了密码

TIFFReader reader = new TIFFReader(new File(pathOfFile));    
RenderedImage image = reader.getPage(2);    
它有时起作用。和显示错误:不支持在TIFF数据中解码旧式JPEG。 我使用了aspriseTIFF.jar

那我怎么解决这个问题呢。 请回复。
提前感谢

您遇到的问题是“旧样式”(
压缩==6
)在您使用的库中不受支持

我想这是很常见的,因为“旧式”JPEG压缩在TIFF中不受欢迎,因为它从未完全指定过。由于这种不符合规范,不同的供应商以不同的、不兼容的方式实现了它。对TIFF compression 7,
JPEG
的支持被放弃

不幸的是,使用此压缩的旧TIFF文件仍然存在,因此您需要找到另一个库。好消息是您可以使用ImageIO和适当的插件

使用TIFF
ImageReader
插件,如我的开源项目中的插件,您应该能够做到:

// Create input stream
try (ImageInputStream input = ImageIO.createImageInputStream(file)) {
    // Get the reader
    ImageReader reader = ImageIO.getImageReaders(input).next();

    try {
        reader.setInput(input);

        // Read page 2 of the TIFF file
        BufferedImage image = reader.read(2, null);
    }
    finally {
        reader.dispose();
    }
}

(很抱歉出现了try/finally锅炉板,但避免资源/内存泄漏很重要)。

您遇到的问题是您使用的库不支持“旧样式”(
压缩==6

我想这是很常见的,因为“旧式”JPEG压缩在TIFF中不受欢迎,因为它从未完全指定过。由于这种不符合规范,不同的供应商以不同的、不兼容的方式实现了它。对TIFF compression 7,
JPEG
的支持被放弃

不幸的是,使用此压缩的旧TIFF文件仍然存在,因此您需要找到另一个库。好消息是您可以使用ImageIO和适当的插件

使用TIFF
ImageReader
插件,如我的开源项目中的插件,您应该能够做到:

// Create input stream
try (ImageInputStream input = ImageIO.createImageInputStream(file)) {
    // Get the reader
    ImageReader reader = ImageIO.getImageReaders(input).next();

    try {
        reader.setInput(input);

        // Read page 2 of the TIFF file
        BufferedImage image = reader.read(2, null);
    }
    finally {
        reader.dispose();
    }
}

(很抱歉出现了
try/finally
锅炉板,但重要的是要避免资源/内存泄漏)。

“新文件(f1.getAbsolutePath())”只是一种复杂的写入“f1”的方式。您不需要像这样毫无意义的复杂操作。您使用的是什么
TIFFReader
类?您可以尝试使用my
TIFFImageReader
ImageIO插件,可在此处找到:它支持(某些)版本的TIFF格式的“旧式”JPEG。如果您附加了一些不受支持的图像,我可以为您测试它们。@EJP除非
f1
是一个带有
getAbsolutePath()
方法的类似文件的对象,但不是
file
file
子类的实例。@EJP,JAB,我编辑了这个问题,这样你就可以专注于这个问题了…@user3437103当编辑被证明是正确的时候,你不应该回滚这些编辑。“新建文件(f1.getAbsolutePath())”只是一种复杂的“f1”写法。您不需要像这样毫无意义的复杂操作。您使用的是什么
TIFFReader
类?您可以尝试使用my
TIFFImageReader
ImageIO插件,可在此处找到:它支持(某些)版本的TIFF格式的“旧式”JPEG。如果您附加了一些不受支持的图像,我可以为您测试它们。@EJP除非
f1
是一个带有
getAbsolutePath()
方法的类似文件的对象,但不是
file
file
子类的实例。@EJP,JAB,我编辑了这个问题,这样你就可以专注于这个问题…@user3437103当编辑被证明是正确的时候,你不应该回滚编辑。你怎么知道TIFF文件有多少页?我找不到任何TwelveMonkeys库从多页tif文件中将单个页面提取为JPEG或PNG格式的示例。请不要使用注释来回答问题。但是这是标准的ImageIO功能,适用于任何
ImageReader
,只需使用即可。使用Java7的资源进行尝试+
try(ImageInputStream输入=ImageIO.createImageInputStream(文件)){…}
将保存一个
try{}
(但不是
reader.dispose()
)你怎么知道TIFF文件有多少页?我找不到任何TwelveMonkeys库从多页tif文件中将单个页面提取为JPEG或PNG格式的示例。请不要使用注释来回答问题。但是这是标准的ImageIO功能,适用于任何
ImageReader
,只需使用即可。使用Java7的资源进行尝试+
try(ImageInputStream输入=ImageIO.createImageInputStream(文件)){…}
将保存一个
try{}
(但不是
reader.dispose()