Java——獲取圖片尺寸和大小

gary-liu發表於2017-04-30

包括獲取本地圖片和遠端伺服器上的圖片的尺寸和大小,這裡分別使用 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);
        }
    }

參考資料

java開發_比較使用ImageReader和BufferedImage獲取圖片尺寸總結

相關文章