判断文件是否为图片格式
判断文件是否为图片格式
原理: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
判断文件是否为图片格式相关推荐
- android 判断图片的格式的,android判断文件是否是图片文件的方法
判断一个文件是否是图片文件的方法,采用BitmapFactory去decode然后根据返回的Options参数来确定: public static boolean isImageFile(String ...
- PHP判断文章是否有图片,利用PHP判断文件是否为图片的方法总结
前言 在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名.仅仅通过文件名是无法判断该文件是否是一个图片文件的.或许有的人以为通过后缀名就可以判断,别忘了文件的后缀名是可以随便改动的.更何况, ...
- php 判断是否文件,利用PHP判断文件是否为图片的方法总结
前言 在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名.仅仅通过文件名是无法判断该文件是否是一个图片文件的.或许有的人以为通过后缀名就可以判断,别忘了文件的后缀名是可以随便改动的.更何况, ...
- php判断是否是文件_PHP判断文件是否为图片文件的方法总结
近日在做图片处理方面的开发,看着这一片不错的文章,分享给大家.在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名.仅仅通过文件名是无法判断该文件是否是一个图片文件的.或许有的人以为通过后缀名 ...
- android判断某文件下是否you_android判断图片类型 判断文件是否为图片文件 - 电脑常识 - 服务器之家...
android判断图片类型 判断文件是否为图片文件 发布时间:2017-03-15 来源:服务器之家 判断文件是否为图片,仅通过后缀名判断很不全面,如果把一个txt文件后缀改成gif都会被认为是图片, ...
- java判断文件是否图片_java怎么判断文件是否是图片
java判断文件是否是图片的方法: 1.通过判断文件后缀名String extension = ""; int i = fileName.lastIndexOf('.'); if ...
- java校验文件格式_Java 判断文件是否为文本格式,并获取文件编码格式,读取内容!...
我们经常会遇到读取文件内容的情况,就需要判断文件是否为文本文件,及文件编码格式,防止无法读取内容或乱码出现情况. 根据文件扩展名判定不太准确,可能会遇到未知扩展名或被修改了扩展名,下面的测试类使用文件 ...
- Java判断文件是否为图片文件(GIF,PNG,JPG)
查看源代码: 1 /** 2 * 判断文件是否为图片文件(GIF,PNG,JPG) 3 * @param srcFileName 4 * @return 5 */ 6 public static bo ...
- 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 ...
- java验证xml格式是否正确的是_java判断文件是否为xml格式的方法
java判断文件是否为xml格式的方法 发布时间:2020-06-25 14:59:53 来源:亿速云 阅读:195 作者:Leah 本篇文章为大家展示了java判断文件是否为xml格式的方法,代码简 ...
最新文章
- __GLOBAL__I_a in libUPPayPlugin.a(UPPasswordTool.o)
- 【bzoj3224】 Tyvj1728—普通平衡树
- 2011.12.15 linux基本命令
- Python语言学习:三种随机函数random.seed()、numpy.random.seed()、set_random_seed()及random_normal的简介、使用方法(固定种子)详细攻略
- 分别是什么意思_美国FBA头程:空派/海派分别是什么意思?
- swoole安装基本配置
- 【MySQL】性能优化之 straight_join
- 文档对象模型dom_什么是文档对象模型,以及为什么应该知道如何使用它。
- 师弟走了,以我们都想不到的方式
- vuex commit 模块_Vuex详细介绍
- 【JZOJ4910】【NOIP2017模拟12.3】子串
- 如何解决CPU过热100度自动关机
- Manjaro安装deb包
- 基金销售:基金转换与超级转换
- Linux CPU使用率超过100%的原因
- 高斯——拉盖尔积分法和高斯——勒让德积分法求积分
- java项目开发案例 报销_java19134企业员工出差报销预算管理系统-SSH-Mysql
- UR机器人PolyScope使用入门教程
- java的Map接口
- 【Allegro_SPB_16.6安装详细教程】手把手搭建到Win10