一开始我是用的是下面这种方法,测试了几个图片都没有问题,然后随便去网上下载了个图片测试,竟然报了空指针,获取不到高度和宽度,于是我右键查看图片属性,详细信息竟然都是空的
这是一个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());
}
}
}
格式化输出的结果: