包括获取本地图片和远程服务器上的图片的尺寸和大小,这里分别使用 BufferedImage 和 ImageReader 来获取图片信息,ImageReader 是通过从图片源信息中获取图片信息,所以速度会更快。
获取本地图片信息
BufferedImage
public static Map<String, Object> getImageInfo(String filePath) {
long startTime = System.currentTimeMillis();
Map<String, Object> imageInfoMap = new HashMap<>();
InputStream is = null;
try {
File file = new File(filePath);
is = new FileInputStream(file);
BufferedImage image = ImageIO.read(is);
imageInfoMap.put(IMAGE_SIZE, file.length());
imageInfoMap.put(IMAGE_WIDTH, image.getWidth());
imageInfoMap.put(IMAGE_HEIGHT, image.getHeight());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (is != null) {
try {
is.close(); // 关闭流
} catch (IOException e) {
logger.error("getImageInfo I/O exception " + e.getMessage(), e);
}
}
}
long endTime = System.currentTimeMillis();
logger.info("take time: " + (endTime-startTime));
return imageInfoMap;
}
ImageReader
public static void getImageInfoByImageReader(String filePath) {
long beginTime = new Date().getTime();
File file = new File(filePath);
try {
ImageReader reader = readers.next();
ImageInputStream iis = ImageIO.createImageInputStream(file);
reader.setInput(iis, true);
System.out.println("width:" + reader.getWidth(0));
System.out.println("height:" + reader.getHeight(0));
} catch (IOException e) {
e.printStackTrace();
}
long endTime = new Date().getTime();
logger.info("使用[ImageReader]获取图片尺寸耗时:[" + (endTime - beginTime) + "]ms");
}
通过URL获取图片信息
BufferedImage
public static void getImageInfoByUrl(String urlStr){
try{
URL url = new URL(urlStr);
URLConnection urlConnection = url.openConnection();
int length = urlConnection.getContentLength();
System.out.print("length: " + length);
if(length == -1){
System.out.print("image not exist");
}else{
BufferedImage sourceImg = ImageIO.read(url);
System.out.print("image width:" + sourceImg.getWidth());
System.out.print("image height:" + sourceImg.getHeight());
}
}catch (MalformedURLException e){
logger.info("url not right " + e.getMessage(), e);
}catch (IOException e){
logger.info("IOException " + e.getMessage(), e);
}
}
ImageReader
public static void getImageInfoByUrl(String urlStr){
try{
URL url = new URL(urlStr);
URLConnection urlConnection = url.openConnection();
int length = urlConnection.getContentLength();
System.out.print("length: " + length);
if(length == -1){
System.out.print("image not exist");
}else{
try(ImageInputStream in = ImageIO.createImageInputStream(urlConnection.getInputStream())){
final Iterator<ImageReader> readers = ImageIO.getImageReaders(in);
if (readers.hasNext()) {
ImageReader reader = readers.next();
try {
reader.setInput(in);
System.out.print(reader.getWidth(0) + "," + reader.getHeight(0));
} finally {
reader.dispose();
}
}
}
}
}catch (MalformedURLException e){
logger.info("url not right " + e.getMessage(), e);
}catch (IOException e){
logger.info("IOException " + e.getMessage(), e);
}
}