java 判断图片损坏_如何在Java中检测损坏的图像(PNG,JPG)
这是我的解决方案,将处理检查损坏的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)相关推荐
- java 判断是否换行_如何在java中检测换行符
是的,我已经阅读了一些关于换行符的其他帖子,但他们没有帮助我.如何在java中检测换行符 我的Java程序应该读取一个.PHP文件,并将源代码分成逐行格式.问题是我似乎无法区分一个换行符和另一个换行符 ...
- java 判断日期连续_如何在Java中检查日期是否大于另一个日期?[重复]
小编典典 从这里拍摄: import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Dat ...
- java adt怎么使用_如何在eclipse中添加android ADT ADT插件的安装图文教程
对于程序开发的学者来说,eclipse并不陌生,它为我们提供了一个非常广阔的平台来开发程序.同样我们也可以用它来开发android程序.但是在eclipse中并不能直接开发android程序,需要我们 ...
- java中转json字符串_如何在Java中转义JSON字符串-Eclipse IDE技巧
java中转json字符串 在Java应用程序中工作或进行JSON解析时,通常很常见的做法是从某些资源(例如RESTful Web服务)中复制粘贴JSON字符串,然后使用Jackson库解析JSON. ...
- java整数的因式分解_如何在Java中找到整数的质数-因式分解
java整数的因式分解 编程课程中的常见家庭作业/任务之一是关于Prime Factorization. 要求您编写一个程序以找到给定整数的素因子 . 一个数字的素数因子是将精确地除以给定数字的所有素 ...
- java swing 列表框_如何在Swing中使用列表框?
下面的示例展示了如何在Java Swing应用程序中使用标准列表框. 使用以下API - JList - 创建标准列表. JList.setSelectedIndex(index); - 选择项目. ...
- Java poi 列移动_如何在java xssf中移動列poi
如何將現有列數據和格式化到Apache POI中的下一列並將下一列移到右側.如何在java xssf中移動列poi 我試過了. 讓說我的代碼是這樣... XSSFCell oldCell = work ...
- java 精确到微妙_如何在Java中以微秒精度测量时间?
我在Internet上看到应该使用System.nanoTime(),但这对我不起作用-它为我提供了毫秒级的时间.我只需要函数执行前后的微秒,就可以知道需要多长时间.我正在使用Windows XP. ...
- java 方法当参数_如何在Java中将函数作为参数传递?
如何在Java中将函数作为参数传递? 这个问题在这里已有答案: Java Pass方法作为参数 14个答案 是否可以将方法作为参 ...
- java 千位分隔符_如何在Java中设置千位分隔符?
问题 如何在Java中设置千位分隔符?我有BigDecimal的String表示,我想设置千位分隔符并返回String. #1 热门回答(180 赞) 你可以使用格式功能","; ...
最新文章
- JUC多线程:线程池的创建及工作原理 和 Executor 框架
- 小白也能看懂的缓存雪崩、穿透、击穿
- Yii中常用路径(转)
- 1、Springboot环境的搭建
- django跳转到其他页面的方式
- linux 命令 单词,linux常用命令的英文单词缩写
- 一个demo学会c++编程
- DataCastle[猜你喜欢]赛事算法分享
- Word中有些空行无法删除,我是这样解决的.............
- 基于STM32f103c8t6的红外接收发送
- Android仿iOS左右滑动开关控件(Android4.0以上适用)
- 领猫SCM完成近亿元A轮融资,服装供应链SaaS赛道前景几何?
- 人工智能细分领域龙头企业排行榜单
- 三年前找工作的我,希望给正在求职的你一些启发
- BootLoader有什么作用?
- 各国通货膨胀率(1961-2019年)
- submit的用法实例
- 图书管理系统 (C语言数据结构)
- java ssl protocol,java – 为HTTPS连接设置https.protocols系统属性的问题
- 适合初学者入门的项目,通过对 Kotlin 的系统运用,实现的一个功能完备符合主流市场标准 App。包含知识点(MVVM 开发架构、单 Activity 多 Fragment 项目设计、暗夜模式、屏幕
热门文章
- python mysql数据库的高级应用_Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy...
- js数组获取index_通过事例重温一下 JS 中 常见的15 种数组操作(备忘清单),收藏...
- 列表界面脚本脚本控制精度_AE脚本编辑
- 看不到图层怎么办_图层管理工具及相关问题
- mac macaca android,Mac使用自动化测试macaca踩坑记
- 7.1 pdo 宝塔面板php_运维干货分享:centos7下源码编译安装php-7.1.5(脚本)
- mysql myflash原理_如何利用 Myflash 解析 binlog ?
- mysql手工注入imformation_mysql 简单手工注入
- 通过jdbc的mysql驱动连接oceanbase mysql模式数据库
- db2 v9.7 tablespace_state -“表空间状态”监视器元素 0x0400