精华内容
下载资源
问答
  • java 图片类型判断

    千次阅读 2019-05-08 14:47:29
    方法一:根据图片url中的携带的ContentType信息判断图片类型,如果图片被强制修改了图片的类型会有问题 /** * 根据url中ContentType判断问价格式 * @param imgUrl * @return */ public static String ...

    方法一:根据图片url中的携带的ContentType信息判断图片的类型,如果图片被强制修改了图片的类型会有问题

    /**
     * 根据url中ContentType判断问价格式
     * @param imgUrl
     * @return
     */
    public static String getImageType(String imgUrl) {
        BufferedInputStream bis = null;
        HttpURLConnection urlconnection = null;
        String prefix = "";
        try {
    
            URL url = new URL(imgUrl);
            urlconnection = (HttpURLConnection) url.openConnection();
            urlconnection.connect();
            bis = new BufferedInputStream(urlconnection.getInputStream());
            String imageTypes = HttpURLConnection.guessContentTypeFromStream(bis);
            if (imageTypes.contains("/")) {
                prefix = imageTypes.substring(imageTypes.lastIndexOf("/"));
                prefix = prefix.replaceFirst("/", ".");
                return prefix;
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ".jpg";
    }

    方法二:将图片的信息读成流转16进制,根据文件流判断文件类型(推荐使用)

    public class ImageTypeUtils {
    /**
     常用文件的文件头如下:(以前六位为准)
    JPEG (jpg),文件头:FFD8FF 
    PNG (png),文件头:89504E47 
    GIF (gif),文件头:47494638 
    TIFF (tif),文件头:49492A00 
    Windows Bitmap (bmp),文件头:424D 
    CAD (dwg),文件头:41433130 
    Adobe Photoshop (psd),文件头:38425053 
    Rich Text Format (rtf),文件头:7B5C727466 
    XML (xml),文件头:3C3F786D6C 
    HTML (html),文件头:68746D6C3E 
    Email [thorough only] (eml),文件头:44656C69766572792D646174653A 
    Outlook Express (dbx),文件头:CFAD12FEC5FD746F 
    Outlook (pst),文件头:2142444E 
    MS Word/Excel (xls.or.doc),文件头:D0CF11E0 
    MS Access (mdb),文件头:5374616E64617264204A 
    WordPerfect (wpd),文件头:FF575043 
    Postscript (eps.or.ps),文件头:252150532D41646F6265 
    Adobe Acrobat (pdf),文件头:255044462D312E 
    Quicken (qdf),文件头:AC9EBD8F 
    Windows Password (pwl),文件头:E3828596 
    ZIP Archive (zip),文件头:504B0304 
    RAR Archive (rar),文件头:52617221 
    Wave (wav),文件头:57415645 
    AVI (avi),文件头:41564920 
    Real Audio (ram),文件头:2E7261FD 
    Real Media (rm),文件头:2E524D46 
    MPEG (mpg),文件头:000001BA 
    MPEG (mpg),文件头:000001B3 
    Quicktime (mov),文件头:6D6F6F76 
    Windows Media (asf),文件头:3026B2758E66CF11 
    MIDI (mid),文件头:4D546864 
    
    
    
        public static final String TYPE_JPG = ".jpg";
        public static final String TYPE_GIF = ".gif";
        public static final String TYPE_PNG = ".png";
        public static final String TYPE_BMP = ".bmp";
        public static final String TYPE_WEBP = ".webp";
        public static final String TYPE_TIF = ".tif";
       // public static final String TYPE_UNKNOWN = "unknown";
    
    
        public static void main(String[] args) throws FileNotFoundException {
            File pdfFile = new File("C:\\Users\\Public\\Pictures\\Sample Pictures\\F35245_113_P2.jpg");
    
            //test code
            System.out.println("图片格式1: " + getPicType(new FileInputStream(pdfFile)));
    
        }
        /**
         * byte数组转换成16进制字符串
         * @param src
         * @return
         */
        public static String bytesToHexString(byte[] src){
            StringBuilder stringBuilder = new StringBuilder();
            if (src == null || src.length <= 0) {
                return null;
            }
            for (int i = 0; i < src.length; i++) {
                int v = src[i] & 0xFF;
                String hv = Integer.toHexString(v);
                if (hv.length() < 2) {
                    stringBuilder.append(0);
                }
                stringBuilder.append(hv);
            }
            return stringBuilder.toString();
        }
    
        /**
         * 根据文件流判断图片类型
         * @param fis
         * @return jpg/png/gif/bmp
         */
        public static String getPicType(FileInputStream fis) {
            //读取文件的前几个字节来判断图片格式
            byte[] b = new byte[4];
            try {
                fis.read(b, 0, b.length);
                String type = bytesToHexString(b).toUpperCase();
                if (type.contains("FFD8FF")) {
                    return TYPE_JPG;
                } else if (type.contains("89504E47")) {
                    return TYPE_PNG;
                } else if (type.contains("47494638")) {
                    return TYPE_GIF;
                } else if (type.contains("424D")) {
                    return TYPE_BMP;
                }else if(type.contains("52494646")){
                    return TYPE_WEBP;
                }else if(type.contains("49492A00")){
                    return TYPE_TIF;
                }else{
                    return TYPE_JPG;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(fis != null){
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
        /**
         * 根据文件流判断图片类型
         * @param fis
         * @return jpg/png/gif/bmp
         */
        public static String getPicType2(InputStream fis) {
            //读取文件的前几个字节来判断图片格式
            byte[] b = new byte[4];
            try {
                fis.read(b, 0, b.length);
                String type = bytesToHexString(b).toUpperCase();
                if (type.contains("FFD8FF")) {
                    return TYPE_JPG;
                } else if (type.contains("89504E47")) {
                    return TYPE_PNG;
                } else if (type.contains("47494638")) {
                    return TYPE_GIF;
                } else if (type.contains("424D")) {
                    return TYPE_BMP;
                }else if(type.contains("52494646")){
                    return TYPE_WEBP;
                }else if(type.contains("49492A00")){
                    return TYPE_TIF;
                }else{
                    return null;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                if(fis != null){
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
            return null;
        }
    
    }

    相关问题:webp图片ios手机和ie浏览器显示会有问题(可转换为png图片)

    实例:

    url1:原图片路径

    path:文件临时存储路径

    也可转换为jpg,png等格式

    String imgType = ImageTypeUtils.getPicType(new FileInputStream(url1));
    if (imgType.equals(".webp")) {//图片转化
        ImageReader reader = ImageIO.getImageReadersByMIMEType("image/webp").next();
        WebPReadParam readParam = new WebPReadParam();
        readParam.setBypassFiltering(true);
        reader.setInput(new FileImageInputStream(new File(url)));
        url = path + UUID.randomUUID() + ".png";
        BufferedImage image = reader.read(0, readParam);
        ImageIO.write(image, "png", new File(url));
    }

     

    展开全文
  • Java判断文件是否图片

    千次阅读 2019-07-26 16:30:58
    方法一:切割文件名,根据后缀来判断是否图片(这个比较简单,就不做代码展示了) 方法二: 如果是jdk自带的File类型,可以根据如下代码进行逻辑判断处理,如果是spring中 MultipartFile类型,看代码注释,也...

    方法一:切割文件名,根据后缀来判断是否是图片(这个比较简单,就不做代码展示了)

    方法二:

    如果是jdk自带的File类型,可以根据如下代码进行逻辑判断处理,如果是spring中

    MultipartFile类型,看代码注释,也可以完成逻辑判断。

       /**
         * 判断文件是否是图片
         */
        private boolean isImage(File file) {
            if (!file.exists()) {
                return false;
            }
            BufferedImage image = null;
            try {

                //如果是spring中MultipartFile类型,则代码如下

                // image = ImageIO.read(file.getInputStream());
                image = ImageIO.read(file);
                if (image == null || image.getWidth() <= 0 || image.getHeight() <= 0) {
                    return false;
                }
                 return true;
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
        }

    展开全文
  • JAVA判断图片类型

    千次阅读 2019-07-09 16:17:02
    import java.io.File; import java.io.IOException; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; public...

    代码:

    import java.io.File;
    import java.io.IOException;
    import java.util.Iterator;
    
    import javax.imageio.ImageIO;
    import javax.imageio.ImageReader;
    import javax.imageio.stream.ImageInputStream;
    
    public class DetermineFormatOfAnImage {
    
        public static void main(String[] args) throws IOException {
    
            // get image format in a file
            File file = new File("newimage.jpg");
    
            // create an image input stream from the specified file
            ImageInputStream iis = ImageIO.createImageInputStream(file);
    
            // get all currently registered readers that recognize the image format
            Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
    
            if (!iter.hasNext()) {
                throw new RuntimeException("No readers found!");
            }
    
            // get the first reader
            ImageReader reader = iter.next();
    
            System.out.println("Format: " + reader.getFormatName());
    
            // close stream
            iis.close();
    
        }
    
    }

    输出

    Format: JPEG

    来源:http://outofmemory.cn/code-snippet/1092/java-usage-ImageReader-decide-tupian-type

    展开全文
  • Java判断文件是否图片

    万次阅读 2017-04-21 11:23:45
    Java检查文件类型有几种方法: 1.判断文件后缀名 String extension = &amp;amp;quot;&amp;amp;quot;; int i = fileName.lastIndexOf('.'); if (i &amp;amp;amp;gt; 0) { extension = fileName....

    前言

    在上传图片文件的时候除了需要限制文件的大小,通常还需要对文件类型进行判断。因为用户可能会上传任何东西上来,如果被有心人上传木马到你服务器那就麻烦了。

    Java检查文件类型的方法

    判断文件后缀名

    String extension = "";
    int i = fileName.lastIndexOf('.');
    if (i > 0) {
        extension = fileName.substring(i+1);
    }
    //...
    if("jpg".equals(extension)){
        //your code
    }

    但是这种方法不太靠谱

    判断文件头

    在后缀未知,或者后缀被修改的文件,依然通过文件头来判断该文件究竟是什么文件类型。我们可以使用一个文本编辑工具如UltraEdit打开文件(16进制模式下),然后看文件头是什么字符,以下是常见图片类型的文件头字符(16进制)

    JPEG (jpg),文件头:FFD8FF 
    PNG (png),文件头:89504E47 
    GIF (gif),文件头:47494638 
    TIFF (tif),文件头:49492A00 
    Windows Bitmap (bmp),文件头:424D

    通过MimetypesFileTypeMap来判断

    
    public class ImageCheck {
        private  MimetypesFileTypeMap mtftp;
    
        public ImageCheck(){
            mtftp = new MimetypesFileTypeMap();
            /* 不添加下面的类型会造成误判 详见:http://stackoverflow.com/questions/4855627/java-mimetypesfiletypemap-always-returning-application-octet-stream-on-android-e*/
            mtftp.addMimeTypes("image png tif jpg jpeg bmp");
        }
        public  boolean isImage(File file){
            String mimetype= mtftp.getContentType(file);
            String type = mimetype.split("/")[0];
            return type.equals("image");
        }
    
    }

    该方法貌似是基于文件后缀进行判断的,修改文本文件后缀为jpg,也会返回true。

    通过ImageIO来判断

    try {
        // 通过ImageReader来解码这个file并返回一个BufferedImage对象
        // 如果找不到合适的ImageReader则会返回null,我们可以认为这不是图片文件
        // 或者在解析过程中报错,也返回false
        Image image = ImageIO.read(file);
        return image != null;
    } catch(IOException ex) {
        return false;
    }

    注意: 该方法适用的图片格式为 bmp/gif/jpg/png

    测试

    测试不同的方法

    public class ImageCheckerTest {
        private File imageFile;//真正的图片文件            图片
        private File txt2ImageFile; //将txt后缀改为jpg    txt
        private File image2txt;//将图片文件后缀改为txt      图片
        @Before
        public void init(){
            imageFile = new File("D:\\image.jpg");
            txt2ImageFile = new File("D:\\txt.jpg");
            image2txt = new File("D:\\image.txt");
        }
    
    
        @Test
        public  void test1(){
            MimetypesFileTypeMap mtftp = new MimetypesFileTypeMap();
            mtftp.addMimeTypes("image png tif jpg jpeg bmp");
    
            String mimetype = mtftp.getContentType(imageFile);
            String type = mimetype.split("/")[0];
            assertTrue(type.equals("image"));
    
    
            mimetype = mtftp.getContentType(txt2ImageFile);
            type = mimetype.split("/")[0];
            assertFalse(type.equals("image"));
    
            mimetype = mtftp.getContentType(image2txt);
            type = mimetype.split("/")[0];
            assertTrue(type.equals("image"));
        }
    
        @Test
        public void test2() throws IOException {
            String mimetype = Files.probeContentType(imageFile.toPath());
            String type = mimetype.split("/")[0];
            assertTrue(type.equals("image"));
    
            mimetype = Files.probeContentType(txt2ImageFile.toPath());
            type = mimetype.split("/")[0];
            assertFalse(type.equals("image"));
    
            mimetype = Files.probeContentType(image2txt.toPath());
            type = mimetype.split("/")[0];
            assertTrue(type.equals("image"));
        }
    
        @Test
        public void test3() {
            FileNameMap fileNameMap = URLConnection.getFileNameMap();
            String type = fileNameMap.getContentTypeFor(imageFile.getAbsolutePath()).split("/")[0];
            assertTrue(type.equals("image"));
    
            type = fileNameMap.getContentTypeFor(txt2ImageFile.getAbsolutePath()).split("/")[0];
            assertFalse(type.equals("image"));
    
            type = fileNameMap.getContentTypeFor(image2txt.getAbsolutePath()).split("/")[0];
            assertTrue(type.equals("image"));
        }
    
        @Test
        public void test4() throws IOException {
            assertTrue(check4(imageFile));
            assertFalse(check4(txt2ImageFile));
            assertTrue(check4(image2txt));
        }
    
        public boolean check4(File file){
            try {
                Image image = ImageIO.read(file);
                return image != null;
            } catch(IOException ex) {
                return false;
            }
        }
    
    
    
    
    
    }
    

    我准备了3个文件,第1个是真正的图片文件,第2个是后缀为jpg的文本文件,第3个为后缀是txt的图片文件

    测试结果如下:

    这里写图片描述

    只有第4个测试用例成功的。其他的都死在对第2个文件的判断上了,我把对第2个文件的判断代码都删掉,结果又死在对第3个文件的判断上了。

    测试不同的图片格式

    接下来测试方法4能适用的图片格式:

    这里写图片描述

    通过图片转换器将jpg图片转换为下面的格式:

    这里写图片描述

    public class ImageCheckerTest {
        private File path;
        @Before
        public void init(){
            path = new File("D:\\images");
        }
    
        public boolean check4(File file){
            try {
                Image image = ImageIO.read(file);
                return image != null;
            } catch(IOException ex) {
                return false;
            }
        }
    
        @Test
        public void testImageType() {
            File[] files = path.listFiles();
            for (File file : files){
                System.out.println("Check file:     " + file.getName() +" : " + check4(file));
            }
    
        }
    }

    结果如下:

    Check file:     image.bmp : true
    Check file:     image.dcx : false
    Check file:     image.gif : true
    Check file:     image.ico : false
    Check file:     image.j2k : false
    Check file:     image.jp2 : false
    Check file:     image.jpg : true
    Check file:     image.pcx : false
    Check file:     image.png : true
    Check file:     image.psd : false
    Check file:     image.tga : false
    Check file:     image.tif : false

    该方法适用的图片格式为:bmp/gif/jpg/png

    总结

    如果对安全性和图片格式完整性要求高的话建议使用第三方jar包。

    展开全文
  • java判断文件是否图片

    千次阅读 2018-11-15 08:17:53
    java判断文件是否图片
  • web判断文件的格式的时候,我们一般都是通过扩展名来判断,这个有点不太靠谱和安全,例如,修改文件名的后缀即可绕过判断。一般要判断是利用头文件来判断。下面是利用头文件来判断的代码: package ...
  • java判断file是否是image类型

    千次阅读 2017-03-31 09:09:32
    注意:在微信里使用插件上传图片时,他的格式可能是application if(image.getContentType().indexOf("image") == -1 && image.getContentType().indexOf("application")==-1){ return JsonResultUtil....
  • 主要介绍了Java判断上传图片格式的实例代码,在文中给大家提到了Java使用文件头的类型判断上传的文件是否图片类型,需要的朋友可以参考下
  • JAVA判断文件的真实类型

    千次阅读 2018-07-03 16:45:20
    在文件传输过程中,为了安全验证,对于手工改动文件后缀名产生的伪造...java判断文件真实类型依靠的是文件的头部编码信息,具体代码如下:import java.io.FileInputStream; import java.io.IOException; import ja...
  • java文件的工具类,封装了常用的操作,尤其针对文件的实际类型,通过获取文件的byte,来查看文件起始字节的魔数值,通过魔数值来判断文件的类型,工具集合了常用的文件类型对应的魔数,也封装了文件类型判断方法
  • java判断是否图片还是视频

    千次阅读 2015-05-10 01:13:48
    public static String getMimeType(String fileName) { FileNameMap fileNameMap = URLConnection.getFileNameMap(); String type = fileNameMap.getContentTypeFor(fileName); return type
  • java使用ImageReader判断图片类型

    千次阅读 2016-11-02 13:06:58
    package com.javacodegeeks.snippets.desktop; import java.io.File; import java.io.IOException; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.i
  • java 多种方式判断文件是否图片

    万次阅读 2017-07-11 14:57:56
    在很多时间我们需要判断一个文件是否为图片,再或者我们需要获取一个文件的类型是否为我们需要...方式一:使用ImageIO 判断图片宽高 方式二:判断文件头信息 方式三:获取文件头信息,该方法可以获取所有文件的类型
  • java判断文件类型

    万次阅读 2019-05-28 16:10:59
    判断文件类型 在上传文件,判断文件类型的时候,往往会通过后缀名和头部信息判断,前者大大不靠谱,后者个别类型的文件不太好判断。这里推荐apache的一款tika,可以做文件判断还可以更强大的做内容解析。一下写出两...
  • java判断文件是否图片文件

    千次阅读 2018-04-14 12:08:11
    使用Image读取文件时,如果是非图像文件,则会返回null。 参考代码: try { Image=ImageIO.read(new File(name)); if (image == null) { valid = false; System.out.println("...could not ...
  • Java判断文件类型

    千次阅读 2019-07-08 14:53:51
    java判断文件类型 原文链接:https://www.cnblogs.com/ryelqy/p/10104171.html 通常,在WEB系统中,上传文件时都需要做文件的类型校验,大致有如下几种方法: 通过后缀名,如exe,jpg,bmp,rar,zip等等。 通过读取...
  • 本篇文章主要介绍了java如何实现判断文件的真实类型,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • * 判断文件是否图片 * * @param pInput 文件名 * @param pImgeFlag 判断具体文件类型 * @return 检查后的结果 * @throws Exception */ public static boolean isPicture(String pInput, ...
  • java判断上传图片格式

    千次阅读 2019-06-25 09:29:00
    由于客户上传图片将png的图片的后缀名改为jpg,所以通过后缀名判断不行,用下面这个方法可以 //判断是否是JPG格式 log.info("-1----进入JPG格式判断....."); ImageInputStream iis = ImageIO.createImageInputStream...
  • public static boolean isImag(String type){  String[] imagType={".jpg",".png",".bmp",".gif"};  List imageTyepLists=Arrays.asList(imagType);  if(imagTypeLists.contain
  • import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.net.URL; import java.net.URLConnection; import java.util.Ar
  • 有一个场景的操作,抛出的异常可能是InvalidSelectorException、TimeoutException、NullPointerException,所以我想针对不同的异常做出不同的处理...这样子判断不行,求大神们指点一下,我希望可以判断出异常的类型

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 109,951
精华内容 43,980
关键字:

java判断是否是图片类型

java 订阅