ImageIO 读取图片

ImageIO提供了直接读取图片到内存的方式,同样,我们可以使用ImageReader读取文件到内存中进行使用;我们对两种方式进行介绍。

ImageReader读取

// 创建随机访问文件对象
RandomAccessFile randomAccessFile = new RandomAccessFile("/home/mointor/mobile.png", "r");
// 创建图片输入流
ImageInputStream imageInputStream = ImageIO.createImageInputStream(randomAccessFile);
// 获取图片读取器
Iterator<ImageReader> imageReaderIterator = ImageIO.getImageReaders(imageInputStream);
if(!imageReaderIterator.hasNext()) {
    // 未找到适合的图片读取器"
} else {
    ImageReader imageReader = imageReaderIterator.next();
    // 设置读取的图片
    imageReader.setInput(imageInputStream, true, true);
    // 读取图片到内存中
    BufferedImage bufferedImage = imageReader.read(0, imageReader.getDefaultReadParam());
    System.out.println("width: " + bufferedImage.getWidth());
    System.out.println("height: " + bufferedImage.getHeight());
}

我们是先获取到ImageReader对象,然后调用对象的read方法读取文件到内存中的,其中提供了两个参数,第一个参数指的是图片的索引(文件中的第几张图片),第二个参数指的是图片的读取参数(此时使用的是读取器默认的读取参数)

ImageIO读取

// 读取图片文件
BufferedImage bufferedImage = ImageIO.read(new File("/home/mointor/mobile.png"));
System.out.println("width: " + bufferedImage.getWidth());
System.out.println("height: " + bufferedImage.getHeight());

ImageIO提供了read方法用于直接将图片读取到内存中;read方法提供了多个重载,以满足从File,InputStream,URL,ImageInputStream中读取图片到内存中

其实ImageIO读取图片到内存中也是使用了ImageReader进行实现的,我们来看一下具体实现:

public static BufferedImage read(File input) throws IOException {
    if (input == null) {
        throw new IllegalArgumentException("input == null!");
    }
    // 判读是否可读
    if (!input.canRead()) {
        throw new IIOException("Can't read input file!");
    }

    // 创建图片输入流
    ImageInputStream stream = createImageInputStream(input);
    if (stream == null) {
        throw new IIOException("Can't create an ImageInputStream!");
    }
    // 读取图片到内存
    BufferedImage bi = read(stream);
    if (bi == null) {
        stream.close();
    }
    return bi;
}

public static BufferedImage read(ImageInputStream stream)
    throws IOException {
    if (stream == null) {
        throw new IllegalArgumentException("stream == null!");
    }

    // 获取图片读取器
    Iterator iter = getImageReaders(stream);
    if (!iter.hasNext()) {
        return null;
    }

    ImageReader reader = (ImageReader)iter.next();
    // 使用默认的图片读取参数
    ImageReadParam param = reader.getDefaultReadParam();
    // 设置读取的图片
    reader.setInput(stream, true, true);
    BufferedImage bi;
    try {
        // 读取图片到内存
        bi = reader.read(0, param);
    } finally {
        reader.dispose();
        stream.close();
    }
    return bi;
}

总结

ImageIO中提供的read方法,提供了多个重载目的是能够读取图片到内存中;其实现原理是使用ImageReader把图片读取到内存中。

  • 6
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值