一开始我是用的是下面这种方法,测试了几个图片都没有问题,然后随便去网上下载了个图片测试,竟然报了空指针,获取不到高度和宽度,于是我右键查看图片属性,详细信息竟然都是空的
这是一个jpg格式的图片,然后我用WPS看图打开他,WPS看图显示此图片的详细信息都有尺寸,还有图片类型是webp类型。
InputStream murl = new URL(user1.getFileurl()).openStream(); BufferedImage sourceImg =ImageIO.read(murl); System.out.println(sourceImg.getWidth()); // 源图宽度 System.out.println(sourceImg.getHeight()); // 源图高度 if(Math.abs(sourceImg.getWidth()-sourceImg.getHeight())>30 || sourceImg.getWidth()>800 || sourceImg.getHeight()>800) { return ResponseBaseData.responseJsonToString(307, 14, "error", 1114445, null); }
既然这种方法不好用,那就找第三方jar包。
依赖:
<dependency> <groupId>com.drewnoakes</groupId> <artifactId>metadata-extractor</artifactId> <version>2.11.0</version> </dependency>
代码实现:
Metadata metadata = ImageMetadataReader.readMetadata(new File(图片路径)); int width = 0; int height = 0; for (Directory directory : metadata.getDirectories()) { for (Tag tag : directory.getTags()) { //格式化输出[directory.getName()] - tag.getTagName() = tag.getDescription() //System.out.format("[%s] - %s = %s\n", //directory.getName(), tag.getTagName(), tag.getDescription()); if(tag.getTagName().equals("Image Width")) { width = Integer.parseInt(tag.getDescription()); } if(tag.getTagName().equals("Image Height")) { height = Integer.parseInt(tag.getDescription()); } } }
格式化输出的结果: