首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查Java中损坏的JPEG文件

检查Java中损坏的JPEG文件
EN

Stack Overflow用户
提问于 2015-04-13 15:54:17
回答 3查看 4.3K关注 0票数 5

我需要一种快速的Java方法来检查JPEG文件是否有效,或者它是否是被截断/损坏的图像。

我试着用几种方法:

  • 使用javax.ImageIO库 公共布尔检查(文件图像)抛出IOException { BufferedImage bi =ImageIO.read(图像);bi.flush();} catch (IIOException e) {返回false;}返回真;} 但是它只能检测到我测试过的文件中很少有损坏的文件,而且速度非常慢(在我的PC上大约每秒1张图像)。
  • Apache共用成像库 公共布尔检查(文件图像)抛出IOException { JpegImageParser解析器=新JpegImageParser();ByteSourceFile bs =新ByteSourceFile(图像);尝试{ BufferedImage bi = parser.getBufferedImage(bs,null);bi.flush();返回真;} catch (ImageReadException e) {返回假;}} 这段代码可以检测到我测试过的所有损坏的图像,但是性能非常差(在我的PC上不到1张图像/秒)。

我正在寻找一种Java替代UNIX程序https://github.com/tjko/jpeginfo,它的速度大约快10倍(在我的PC上大约是每秒10张图像)。

EN

回答 3

Stack Overflow用户

发布于 2015-04-13 18:18:29

我看了一下JPEG格式,据我理解,两个字节(FF D9)的最后一个EOI (图像结束)段应该是最后一个。

代码语言:javascript
复制
boolean jpegEnded(String path) throws IOException {
    try (RandomAccessFile fh = new RandomAccessFile(path, "r")) {
        long length = fh.length();
        if (length < 10L) { // Or whatever
            return false;
        }
        fh.seek(length - 2);
        byte[] eoi = new byte[2];
        fh.readFully(eoi);
        return eoi[0] == -1 && eoi[1] == -39; // FF D9 (first falsely -23)
    }
}
票数 5
EN

Stack Overflow用户

发布于 2015-04-13 17:58:32

也许不是最好的答案但是..。

您提到的jpeginfo程序是用C语言编写的,所以这会使人想起我想在我正在开发的一个Java应用程序中使用海军编写的代码(即用C++编写的代码)。

我有两个选择:

  1. 使用JNI ()将我的java代码链接到C++ (在您的例子中是C)库。
  2. 将C++库转换为java代码。

选项1对我来说是很困难的,因为我需要将一个对象传递到库中,并从库中获取对象(S),这迫使我执行选项2(也是因为截止时间安排)。

因此,在您的情况下,因为我不知道Java中有任何其他库可以满足您的要求,所以我会建议这两个选项,或者可能构建您自己的解析器。

票数 2
EN

Stack Overflow用户

发布于 2016-10-19 10:54:07

它不是一种本地Java方法,但是您总是可以使用像jpeginfo或[医]意象鉴定这样的程序-- shell的开销可能小于Java库所花费的时间。

我不得不做一些类似的事情,我发现我可以使用Runtime.exec从一个字节数组调用identify -regard-warnings -verbose -,在2013年macbook上使用大约200 mp3 (我正在检查mp3艺术品,所以图像大小大约是300x300px)。不是很好,但比每秒一张图像还要快!

(请注意,对于我的图像,我必须为imagemagick指定-verbose以获取一些错误)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29609736

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档