这是我的解决方案,将处理检查损坏的GIF,JPG和PNG。它检查使用截断JPEG的JPEG EOF标记,GIF使用索引越界异常检查,并使用EOFException类

public static ImageAnalysisResult analyzeImage(final Path file)

throws NoSuchAlgorithmException, IOException {

final ImageAnalysisResult result = new ImageAnalysisResult();

final InputStream digestInputStream = Files.newInputStream(file);

try {

final ImageInputStream imageInputStream = ImageIO

.createImageInputStream(digestInputStream);

final Iterator imageReaders = ImageIO

.getImageReaders(imageInputStream);

if (!imageReaders.hasNext()) {

result.setImage(false);

return result;

}

final ImageReader imageReader = imageReaders.next();

imageReader.setInput(imageInputStream);

final BufferedImage image = imageReader.read(0);

if (image == null) {

return result;

}

image.flush();

if (imageReader.getFormatName().equals("JPEG")) {

imageInputStream.seek(imageInputStream.getStreamPosition() - 2);

final byte[] lastTwoBytes = new byte[2];

imageInputStream.read(lastTwoBytes);

if (lastTwoBytes[0] != (byte)0xff || lastTwoBytes[1] != (byte)0xd9) {

result.setTruncated(true);

} else {

result.setTruncated(false);

}

}

result.setImage(true);

} catch (final IndexOutOfBoundsException e) {

result.setTruncated(true);

} catch (final IIOException e) {

if (e.getCause() instanceof EOFException) {

result.setTruncated(true);

}

} finally {

digestInputStream.close();

}

return result;

}

public class ImageAnalysisResult {

boolean image;

boolean truncated;

public void setImage(boolean image) {

this.image = image;

}

public void setTruncated(boolean truncated) {

this.truncated = truncated;

}

}

}

java 判断图片损坏_如何在Java中检测损坏的图像(PNG,JPG)相关推荐

  1. java 判断是否换行_如何在java中检测换行符

    是的,我已经阅读了一些关于换行符的其他帖子,但他们没有帮助我.如何在java中检测换行符 我的Java程序应该读取一个.PHP文件,并将源代码分成逐行格式.问题是我似乎无法区分一个换行符和另一个换行符 ...

  2. java 判断日期连续_如何在Java中检查日期是否大于另一个日期?[重复]

    小编典典 从这里拍摄: import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Dat ...

  3. java adt怎么使用_如何在eclipse中添加android ADT ADT插件的安装图文教程

    对于程序开发的学者来说,eclipse并不陌生,它为我们提供了一个非常广阔的平台来开发程序.同样我们也可以用它来开发android程序.但是在eclipse中并不能直接开发android程序,需要我们 ...

  4. java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧

    java中转json字符串 在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON. ...

  5. java整数的因式分解_如何在Java中找到整数的质数-因式分解

    java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...

  6. java swing 列表框_如何在Swing中使用列表框?

    下面的示例展示了如何在Java Swing应用程序中使用标准列表框. 使用以下API - JList - 创建标准列表. JList.setSelectedIndex(index); - 选择项目. ...

  7. Java poi 列移动_如何在java xssf中移動列poi

    如何將現有列數據和格式化到Apache POI中的下一列並將下一列移到右側.如何在java xssf中移動列poi 我試過了. 讓說我的代碼是這樣... XSSFCell oldCell = work ...

  8. java 精确到微妙_如何在Java中以微秒精度测量时间?

    我在Internet上看到应该使用System.nanoTime(),但这对我不起作用-它为我提供了毫秒级的时间.我只需要函数执行前后的微秒,就可以知道需要多长时间.我正在使用Windows XP. ...

  9. java 方法当参数_如何在Java中将函数作为参数传递?

    如何在Java中将函数作为参数传递? 这个问题在这里已有答案: Java Pass方法作为参数                                     14个答案 是否可以将方法作为参 ...

  10. java 千位分隔符_如何在Java中设置千位分隔符?

    问题 如何在Java中设置千位分隔符?我有BigDecimal的String表示,我想设置千位分隔符并返回String. #1 热门回答(180 赞) 你可以使用格式功能","; ...

最新文章

  1. JUC多线程:线程池的创建及工作原理 和 Executor 框架
  2. 小白也能看懂的缓存雪崩、穿透、击穿
  3. Yii中常用路径(转)
  4. 1、Springboot环境的搭建
  5. django跳转到其他页面的方式
  6. linux 命令 单词,linux常用命令的英文单词缩写
  7. 一个demo学会c++编程
  8. DataCastle[猜你喜欢]赛事算法分享
  9. Word中有些空行无法删除,我是这样解决的.............
  10. 基于STM32f103c8t6的红外接收发送
  11. Android仿iOS左右滑动开关控件(Android4.0以上适用)
  12. 领猫SCM完成近亿元A轮融资,服装供应链SaaS赛道前景几何?
  13. 人工智能细分领域龙头企业排行榜单
  14. 三年前找工作的我,希望给正在求职的你一些启发
  15. BootLoader有什么作用?
  16. 各国通货膨胀率(1961-2019年)
  17. submit的用法实例
  18. 图书管理系统 (C语言数据结构)
  19. java ssl protocol,java – 为HTTPS连接设置https.protocols系统属性的问题
  20. 适合初学者入门的项目,通过对 Kotlin 的系统运用,实现的一个功能完备符合主流市场标准 App。包含知识点(MVVM 开发架构、单 Activity 多 Fragment 项目设计、暗夜模式、屏幕

热门文章

  1. python mysql数据库的高级应用_Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy...
  2. js数组获取index_通过事例重温一下 JS 中 常见的15 种数组操作(备忘清单),收藏...
  3. 列表界面脚本脚本控制精度_AE脚本编辑
  4. 看不到图层怎么办_图层管理工具及相关问题
  5. mac macaca android,Mac使用自动化测试macaca踩坑记
  6. 7.1 pdo 宝塔面板php_运维干货分享:centos7下源码编译安装php-7.1.5(脚本)
  7. mysql myflash原理_如何利用 Myflash 解析 binlog ?
  8. mysql手工注入imformation_mysql 简单手工注入
  9. 通过jdbc的mysql驱动连接oceanbase mysql模式数据库
  10. db2 v9.7 tablespace_state -“表空间状态”监视器元素 0x0400