我需要一种快速的Java方法来检查JPEG文件是否有效,或者它是否是被截断/损坏的图像。
我试着用几种方法:
我正在寻找一种Java替代UNIX程序https://github.com/tjko/jpeginfo,它的速度大约快10倍(在我的PC上大约是每秒10张图像)。
发布于 2015-04-13 18:18:29
我看了一下JPEG格式,据我理解,两个字节(FF D9)的最后一个EOI (图像结束)段应该是最后一个。
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)
}
}发布于 2015-04-13 17:58:32
也许不是最好的答案但是..。
您提到的jpeginfo程序是用C语言编写的,所以这会使人想起我想在我正在开发的一个Java应用程序中使用海军编写的代码(即用C++编写的代码)。
我有两个选择:
选项1对我来说是很困难的,因为我需要将一个对象传递到库中,并从库中获取对象(S),这迫使我执行选项2(也是因为截止时间安排)。
因此,在您的情况下,因为我不知道Java中有任何其他库可以满足您的要求,所以我会建议这两个选项,或者可能构建您自己的解析器。
发布于 2016-10-19 10:54:07
它不是一种本地Java方法,但是您总是可以使用像jpeginfo或[医]意象鉴定这样的程序-- shell的开销可能小于Java库所花费的时间。
我不得不做一些类似的事情,我发现我可以使用Runtime.exec从一个字节数组调用identify -regard-warnings -verbose -,在2013年macbook上使用大约200 mp3 (我正在检查mp3艺术品,所以图像大小大约是300x300px)。不是很好,但比每秒一张图像还要快!
(请注意,对于我的图像,我必须为imagemagick指定-verbose以获取一些错误)
https://stackoverflow.com/questions/29609736
复制相似问题