ImageIO.read()是否从流中读取了数据,并生成了缓存图像?
帮帮我吧,

解决方案 »

  1.   

    返回一个BufferedImage。BufferedImage 子类描述具有可访问图像数据缓冲区的 Image。BufferedImage 由图像数据的 ColorModel 和 Raster 组成。Raster 的 SampleModel 中 band 的数量和类型必须与 ColorModel 所要求的数量和类型相匹配,以表示其颜色和 alpha 分量。所有 BufferedImage 对象的左上角坐标都为 (0, 0)。因此,用来构造 BufferedImage 的任何 Raster 都必须满足:minX=0 且 minY=0。
    此类依靠 Raster 的数据获取方法、数据设置方法,以及 ColorModel 的颜色特征化方法。—— 摘自jdk1.6,本人没用过。
      

  2.   

    package com.rand;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics2D;
    import java.awt.image.*;
    import java.awt.image.BufferedImage;import java.util.Random;
    import javax.imageio.ImageIO;/**
     * @date 2008-5-4
     * @author East(张栋芳)
     * @图片验证码
     */
    public class RandomCodeServlet extends HttpServlet{
    private int width = 60;//验证码的宽度
    private int height = 20;//验证码的高度

    protected void service(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
    BufferedImage buffImg = new BufferedImage(width,height,BufferedImage.TYPE_INT_BGR);
    Graphics2D g = buffImg.createGraphics();
    //产生Random
    Random random = new Random();

    g.setColor(Color.WHITE);
    g.fillRect(0,0,width,height);
    //字体
    Font font = new Font("Dialog",Font.PLAIN,18);
    g.setFont(font);
    //边框
    g.setColor(Color.BLACK);
    g.drawRect(0,0,width-1,height-1);

    //产生160条干扰线,图像中的认证码,不被看到
    g.setColor(Color.GRAY);
    for(int i=0;i<160;i++){
    int x = random.nextInt(width);
    int y = random.nextInt(height);
    int x1 = random.nextInt(12);
    int y1 = random.nextInt(12);
    g.drawLine(x,y,x1,y1);

    }

    StringBuffer randomCode = new StringBuffer();//保存验证码
    int red = 0,green = 0,blue = 0;

    for(int i = 0;i < 4;i++){
    String strRand=String.valueOf(random.nextInt(10));
    //Color
    red = random.nextInt(110);
    green = random.nextInt(50);
    blue = random.nextInt(50);
    //set Color
    g.setColor(new Color(red,green,blue));
    g.drawString(strRand,13*i+6,16);
    randomCode.append(strRand);//保存验证码
    }
    //搞验证码 到SESSION中去
    HttpSession session=req.getSession();
    session.setAttribute("randdomCode",randomCode.toString());

    //禁止图像缓存
    resp.setHeader("Pragma","no-cache");
    resp.setHeader("Cache-Control","no-cache");
    resp.setDateHeader("Expires",0);
    resp.setContentType("image/jpeg");
    //将图像输出到Servlet输出 流中
    ServletOutputStream sos=resp.getOutputStream();
    ImageIO.write(buffImg,"jpeg",sos);
    sos.close();
    }
    }看看.对你有点帮助..........
      

  3.   


    是!流中的数据需要采用 ImageIO 支持的文件格式组织(比如 JPEG 格式)!楼主打算怎么用读出的 BufferedImage?
      

  4.   

    OutputStream sos=response.getOutputStream();JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(sos);encoder.encode(image);