Java——获取图片尺寸和大小

包括获取本地图片和远程服务器上的图片的尺寸和大小,这里分别使用 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获取图片尺寸总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值