当前位置: 首页 > 知识库问答 >
问题:

检查Java中损坏的JPEG文件

邓季
2023-03-14

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

我试着用几种方法

>

  • 使用javax.imageio库

    public boolean check(File image) throws IOException {
        try {
            BufferedImage bi = ImageIO.read(image);
            bi.flush();
        } catch (IIOException e) {
            return false;
        }
        return true;
    }
    
    public boolean check(File image) throws IOException {
        JpegImageParser parser = new JpegImageParser();
        ByteSourceFile bs = new ByteSourceFile(image);
        try {
            BufferedImage bi = parser.getBufferedImage(bs, null);
            bi.flush();
    
            return true;
        } catch (ImageReadException e) {
            return false;
        }
    }
    

    我正在寻找一个Java替代UNIX程序jpeginfo,它大约快10倍(在我的PC上,大约10个图像/秒)。

  • 共有1个答案

    糜凯泽
    2023-03-14

    我看了一下JPEG格式,根据我的理解,最后一个EOI(图像末尾)段应该是两个字节(FFD9)。

    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] == -23; // FF D9
        }
    }
    
     类似资料:
    • 问题内容: 我们有一段代码可以在我们的系统上生成一个zip文件。一切正常,但是有时该Zip文件在由FilZip或WinZip打开时被视为已损坏。 所以这是我的问题:我们如何以编程方式检查生成的zip文件是否损坏? 这是我们用于生成zip文件的代码: 我们在这里做错了什么吗? 编辑:实际上,上面的代码是绝对可以的。我的问题是我正在为用户重定向WRONG流。因此,与其打开一个zip文件,不如打开一个完

    • 在DICOM规范中,传输语法之一是,定义为。 是否可以在Python中读或写这种格式?查看文件中的枕头,我不清楚是否支持这种格式。 这个帖子有点相关。

    • 问题内容: 我使用Eclipse在Windows 7中创建了一个jar文件。当我尝试打开jar文件时,它说jar文件无效或损坏。谁能建议我为什么jar文件无效? 问题答案: 当您在Windows资源管理器中双击一个JAR文件时,会发生这种情况,但是JAR本身实际上不是 可执行的 JAR。真正的可执行JAR至少应具有带有方法的类,并在中引用它。 在Eclispe中,您需要将项目导出为 Runnabl

    • 问题内容: 我正在编写一个模块,该模块从json获取文章数据,并在文章文本上显示大图像,这就是他们所说的英雄模块。 我已经有了数据并进行了设置,因此,如果有图像,它将显示该图像,如果数据中没有图像,则将显示默认图像。问题在于此方法不会替换断开的链接以显示默认图像。 我还是刚开始反应并使用状态…问题是,我应该使用状态来检查断开的链接,我该怎么做? 这就是我如何在模块中作为道具获取数据的方式: 我以这

    • 问题内容: 一些背景: 在使用Macports的Mac OS X 10.6上,我已经DYLD_LIBRARY_PATH在.bash_profile中进行了设置。 问题: 运行时出现java -version此错误: VM初始化期间发生错误 无法加载本机库:libjava.jnilib 通过一个有用的论坛线程,我发现问题是由于设置了’/ opt / local / lib’目录中的某些文件而导致了麻

    • 问题内容: 我想为Java中的多线程实现延迟初始化。 我有一些这样的代码: 我得到了“双重检查锁定已损坏”声明。 我该如何解决? 问题答案: 以下是第71项中建议的惯用语:明智地使用 Effective Java: 如果你需要使用延迟初始化来提高实例字段的性能,请使用double-check idiom。这种习惯用法避免了在初始化字段后访问字段时发生锁定的费用(项67)。习惯用法的想法是检查字段的