今天做一个爬虫,使用正则匹配到<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;}
这样我们就能从连续的图片文件流中获取多个图片文件,实现获取文件真实格式到的后缀。
如果觉得《Java获取图片文件格式(后缀)》对你有帮助,请点赞、收藏,并留下你的观点哦!