一開始我是用的是下面這種方法,測試了幾個圖片都沒有問題,然後隨便去網上下載了個圖片測試,竟然報了空指針,獲取不到高度和寬度,於是我右鍵查看圖片屬性,詳細信息竟然都是空的
這是一個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());
}
}
}
格式化輸出的結果: