判断文件是否为图片格式

原理:1、使用JDK类库解析文件数据,如果能解析成功,获得图片长宽,即为正确的图片格式

2、解析文件头信息,判断图片类型

工具代码

    /*** 判断文件后缀是否为图片文件格式,bmp|gif|jpg|jpeg|png 返回true* @param imageFileSuffix 图片文件后缀名* @return*/public static boolean isImageBySuffix(String imageFileSuffix) {if (StringUtils.isNotEmpty(imageFileSuffix)) {//[JPG, jpg, bmp, BMP, gif, GIF, WBMP, png, PNG, wbmp, jpeg, JPEG]String[] formatNames = ImageIO.getReaderFormatNames();if (ArrayUtils.isNotEmpty(formatNames)) {for (String formatName : formatNames) {if (imageFileSuffix.toLowerCase().equals(formatName)) {return true;}}}}return false;}/*** 判断文件是否为图片文件格式, bmp|gif|jpg|jpeg|png 后缀的图片文件返回true* @param imageName 图片文件名* @return*/public static boolean isImageByFileName(String imageName) {if (StringUtils.isNotEmpty(imageName)) {String[] imageNames = imageName.split(FILE_CONNECTOR_POINT);return isImageBySuffix(imageNames[imageNames.length - 1]);}return false;}/*** 判断文件是否为合法图片* @param srcPath 图片文件绝对路径* @param checkImageName 是否校验图片文件名* @return*/public static boolean isImage(String srcPath, boolean checkImageName) {if (checkImageName) {return isImageByFileName(srcPath);} else {if (StringUtils.isNotEmpty(srcPath)) {File imageFile = new File(srcPath);if (imageFile.isFile() && imageFile.length() > 0) {return isImage(imageFile);}}}return false;}/*** 判断文件流是否为合法图片* @param file 图片文件* @return*/public static boolean isImage(File file) {return isImage((Object)file);}/*** 判断文件流是否为合法图片* @param srcInputStream 图片文件的流* @return*/public static boolean isImage(InputStream srcInputStream) {return isImage((Object)srcInputStream);}/*** 判断文件流是否为合法图片* @param srcInputStream 图片文件的流* @return*/public static boolean isImage(URL url) {return isImage((Object)url);}/*** 图片文件读取* @param obj (URL|InputStream|File)* @return*/private static boolean isImage(Object obj) {Image image = null;if (obj != null) {try {if (obj instanceof URL) {image = ImageIO.read((URL)obj);} else if (obj instanceof InputStream) {image = ImageIO.read((InputStream)obj);} else if (obj instanceof File) {image = ImageIO.read((File)obj);} else {throw new IllegalArgumentException("不支持这种类型["+obj.getClass().getCanonicalName()+"]");}} catch (IOException e) {e.printStackTrace();}if (image != null && image.getWidth(null) > 0 && image.getHeight(null) > 0) {return true;}}return false;}/*** 获取图片类型* JPG图片头信息:FFD8FF* PNG图片头信息:89504E47* GIF图片头信息:47494638* BMP图片头信息:424D* * @param is 图片文件流* @return 图片类型:jpg|png|gif|bmp*/public static String getImageType(InputStream is) {String type = null;if (is != null) {byte[] b = new byte[4];try {is.read(b, 0, b.length);} catch (IOException e) {e.printStackTrace();}String hexStr = HexConverter.byteArrayToHexString(b, true);//图片文件流前4个字节的头信息(子文字母)if (hexStr != null) {if (hexStr.startsWith(JPG_HEX)) {type = JPG;} else if (hexStr.startsWith(PNG_HEX)) {type = PNG;} else if (hexStr.startsWith(GIF_HEX)) {type = GIF;} else if (hexStr.startsWith(BMP_HEX)) {type = BMP;}}}return type;}/*** 获取图片类型* JPG图片头信息:FFD8FF* PNG图片头信息:89504E47* GIF图片头信息:47494638* BMP图片头信息:424D* * @param file 图片文件* @return 图片类型:jpg|png|gif|bmp* @throws FileNotFoundException 未找到文件*/public static String getImageType(File file) throws FileNotFoundException {return getImageType(new FileInputStream(file));}/*** 根据文件头,判断文件流是否为合法图片* @param is 文件流* @return*/public static boolean isImageByHeader(InputStream is) {return isImageBySuffix(getImageType(is));}/*** 根据文件头,判断文件流是否为合法图片* @param file 图片文件* @return* @throws FileNotFoundException */public static boolean isImageByHeader(File file) throws FileNotFoundException {return isImageBySuffix(getImageType(file));}

测试代码

    /*** 测试文件是否为图片* @throws FileNotFoundException * @throws MalformedURLException */@SuppressWarnings("resource")@Testpublic void testIsImage() throws FileNotFoundException, MalformedURLException {String imageName = "simple.jpg";String srcPath = IMAGE_PATH + imageName;Assert.assertTrue(ImageUtil.isImage(srcPath, true));Assert.assertTrue(ImageUtil.isImage(new File(srcPath)));Assert.assertTrue(ImageUtil.isImage(new FileInputStream(srcPath)));String baiduLogoUrl = "https://www.baidu.com/img/bd_logo1.png";//百度logo图片Assert.assertTrue(ImageUtil.isImage(new URL(baiduLogoUrl)));String textName = "text.txt";String txtPath = FILE_PATH + textName;Assert.assertFalse(ImageUtil.isImage(txtPath, true));}@SuppressWarnings("resource")@Testpublic void testIsImageByHeader() throws FileNotFoundException {String imageName = "simple.jpg";String srcPath = IMAGE_PATH + imageName;Assert.assertTrue(ImageUtil.isImageByHeader(new FileInputStream(srcPath)));imageName = "bd_logo1.png";srcPath = IMAGE_PATH + imageName;Assert.assertTrue(ImageUtil.isImageByHeader(new File(srcPath)));imageName = "simple.bmp";srcPath = IMAGE_PATH + imageName;Assert.assertTrue(ImageUtil.isImageByHeader(new File(srcPath)));imageName = "simple.gif";srcPath = IMAGE_PATH + imageName;Assert.assertTrue(ImageUtil.isImageByHeader(new File(srcPath)));}

完整源码:https://github.com/ConstXiong/xtools


【Java面试题与答案】整理推荐

  • 基础与语法
  • 集合
  • 网络编程
  • 并发编程
  • Web
  • 安全
  • 设计模式
  • 框架
  • 算法与数据结构
  • 异常
  • 文件解析与生成
  • Linux
  • MySQL
  • Oracle
  • Redis
  • Dubbo

判断文件是否为图片格式相关推荐

  1. android 判断图片的格式的,android判断文件是否是图片文件的方法

    判断一个文件是否是图片文件的方法,采用BitmapFactory去decode然后根据返回的Options参数来确定: public static boolean isImageFile(String ...

  2. PHP判断文章是否有图片,利用PHP判断文件是否为图片的方法总结

    前言 在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名.仅仅通过文件名是无法判断该文件是否是一个图片文件的.或许有的人以为通过后缀名就可以判断,别忘了文件的后缀名是可以随便改动的.更何况, ...

  3. php 判断是否文件,利用PHP判断文件是否为图片的方法总结

    前言 在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名.仅仅通过文件名是无法判断该文件是否是一个图片文件的.或许有的人以为通过后缀名就可以判断,别忘了文件的后缀名是可以随便改动的.更何况, ...

  4. php判断是否是文件_PHP判断文件是否为图片文件的方法总结

    近日在做图片处理方面的开发,看着这一片不错的文章,分享给大家.在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名.仅仅通过文件名是无法判断该文件是否是一个图片文件的.或许有的人以为通过后缀名 ...

  5. android判断某文件下是否you_android判断图片类型 判断文件是否为图片文件 - 电脑常识 - 服务器之家...

    android判断图片类型 判断文件是否为图片文件 发布时间:2017-03-15 来源:服务器之家 判断文件是否为图片,仅通过后缀名判断很不全面,如果把一个txt文件后缀改成gif都会被认为是图片, ...

  6. java判断文件是否图片_java怎么判断文件是否是图片

    java判断文件是否是图片的方法: 1.通过判断文件后缀名String extension = ""; int i = fileName.lastIndexOf('.'); if ...

  7. java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...

    我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况. 根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件 ...

  8. Java判断文件是否为图片文件(GIF,PNG,JPG)

    查看源代码: 1 /** 2 * 判断文件是否为图片文件(GIF,PNG,JPG) 3 * @param srcFileName 4 * @return 5 */ 6 public static bo ...

  9. PHP简单方法判断文件是否是图片 PHP best way to check if file is an image

    (PHP 4 >= 4.3.0, PHP 5, PHP 7) exif_imagetype - 判断一个图像的类型 图像类型常量 值 常量 1 IMAGETYPE_GIF 2 IMAGETYPE ...

  10. java验证xml格式是否正确的是_java判断文件是否为xml格式的方法

    java判断文件是否为xml格式的方法 发布时间:2020-06-25 14:59:53 来源:亿速云 阅读:195 作者:Leah 本篇文章为大家展示了java判断文件是否为xml格式的方法,代码简 ...

最新文章

  1. __GLOBAL__I_a in libUPPayPlugin.a(UPPasswordTool.o)
  2. 【bzoj3224】 Tyvj1728—普通平衡树
  3. 2011.12.15 linux基本命令
  4. Python语言学习:三种随机函数random.seed()、numpy.random.seed()、set_random_seed()及random_normal的简介、使用方法(固定种子)详细攻略
  5. 分别是什么意思_美国FBA头程:空派/海派分别是什么意思?
  6. swoole安装基本配置
  7. 【MySQL】性能优化之 straight_join
  8. 文档对象模型dom_什么是文档对象模型,以及为什么应该知道如何使用它。
  9. 师弟走了,以我们都想不到的方式
  10. vuex commit 模块_Vuex详细介绍
  11. 【JZOJ4910】【NOIP2017模拟12.3】子串
  12. 如何解决CPU过热100度自动关机
  13. Manjaro安装deb包
  14. 基金销售:基金转换与超级转换
  15. Linux CPU使用率超过100%的原因
  16. 高斯——拉盖尔积分法和高斯——勒让德积分法求积分
  17. java项目开发案例 报销_java19134企业员工出差报销预算管理系统-SSH-Mysql
  18. UR机器人PolyScope使用入门教程
  19. java的Map接口
  20. 【Allegro_SPB_16.6安装详细教程】手把手搭建到Win10

热门文章

  1. req.getParameterValues 输出前端乱码
  2. 圣诞节flash卡通短片
  3. 开源旅游网站系统排名
  4. 究竟哪个天气预报APP最准确?我从原理进行了一番深入研究
  5. port access vlan
  6. php条形码宽度,PHP条形码生成封装类
  7. 搜索摄像头/录像机IP地址工具是什么
  8. 忠实履行职责,成就辉煌人生 ——读《西点军校的经典法则》有感
  9. 测试PHP连接MYSQL成功与否的代码
  10. 提供淘宝进销存管理软件