ImageWriter用于写图片,ImageWriteParam用于指定写图片的一些参数,包括质量,每位的像素等。
ImageReader 用于读图片, ImageReadParam用于指定读的方法.
这是向输出流写图片的代码:
protected ImageWriter imgWrier;
protected ImageWriteParam imgWriteParams;
public WriteImage() {
this( (float) 0.2 );
}
public WriteImage( float qality ) {
imgWrier = ImageIO.getImageWritersByFormatName("jpg").next();
// 指定写图片的方式为 jpg
imgWriteParams = new javax.imageio.plugins.jpeg.JPEGImageWriteParam(null);
// 使用jpg的写图片的方式,
imgWriteParams.setCompressionMode( imgWriteParams.MODE_EXPLICIT );
// 要使用压缩,必须指定压缩方式为MODE_EXPLICIT,
imgWriteParams.setCompressionQuality( qality );
// 这里指定压缩的程度,参数qality是取值0~1范围内,
imgWriteParams.setProgressiveMode( imgWriteParams.MODE_DISABLED );
ColorModel colorModel = ColorModel.getRGBdefault();
// 指定压缩时使用的色彩模式
imgWriteParams.setDestinationType(
new javax.imageio.ImageTypeSpecifier(
colorModel,
colorModel.createCompatibleSampleModel(16, 16)) );
}
public void compress( RenderedImage image, ImageOutputStream out) throws IOException {
if( image == null ) return ;
imgWrier.reset();
imgWrier.setOutput( out );
// 必须先指定 out值,才能调用write方法, ImageOutputStream可以通过任何 OutputStream构造
imgWrier.write( null, new IIOImage(image, null, null), imgWriteParams );
// 调用write方法,就可以向输入流写图片
}
再看从输入流读图片的代码:
protected ImageReader reader;
protected ImageReadParam imgReadParams;
public ReadImage() {
reader = ImageIO.getImageReadersByFormatName("jpg").next();
// 取得jpg的读图片的reader
imgReadParams = new javax.imageio.plugins.jpeg.JPEGImageReadParam();
// 读的参数格式是jpg的
}
public BufferedImage read(javax.imageio.stream.ImageInputStream in) throws IOException {
// ImageInputStream 可构造自任何的InputStream,
reader.reset();
reader.setInput( in ); // 在read前必须指定输入流
return reader.read( 0, imgReadParams );
// 从输入流中读取一张图片, imgReadParams的格式读取
}




















