Java获取图片文件格式(后缀)

今天做一个爬虫,使用正则匹配到<img>标签以后,直接用InputStream流进行下载到内存,然后再使用FileOutputStream保存到硬盘,但是要获取图片文件格式再进行保存。

一开始使用了正则截取,比如<img src="/book/en/v2/images/basic-branching-1.png" />,就直接用字符串截取.png的内容

        String imgSrc = "/book/en/v2/images/basic-branching-1.png";
        String formatName = imgSrc.split("\\.")[1];

但是后来突然想到如果URL的path里就带有 . 那怎么办(虽然我没见到过)

假设一个图片标签 <img src="/book/en/v2/.hahaha/basic-branching-1.png" />,那这样就不能保证是截取到后缀。

想到PHP和Python都有直接处理图片的库,很方便,Java应该也有这种操作吧。

经过去StackOverflow查找一番,发现确实Java这种操作很麻烦,所以自己实现了一个工具方法。

    public static List<String> getImageFormat(InputStream srcInputStream) throws IOException {
        List<String> formatNameList = new ArrayList<>();

        // 获取ImageInputStream 对象
        ImageInputStream imageInputStream = ImageIO.createImageInputStream(srcInputStream);
        // 获取ImageReader对象的迭代器
        Iterator<ImageReader> iterator = ImageIO.getImageReaders(imageInputStream);

        // 如果能获得ImageReader对象则说明流中含有图片文件
        while(iterator.hasNext()) {
            // ImageReader对象的getFormatName()方法可以获得图片格式
            formatNameList.add(iterator.next().getFormatName());
        }
        return formatNameList;
    }

这样我们就能从连续的图片文件流中获取多个图片文件,实现获取文件真实格式到的后缀。

猜你喜欢

转载自blog.csdn.net/cringkong/article/details/79759545