发布网友 发布时间:2022-04-25 16:03
共1个回答
热心网友 时间:2023-10-15 18:58
先要用Graphics将验证码图片画出来,然后用ImageIO将图片转成流输入到ByteArrayOutputStream中,然后在想获取的地方获取即可追问可以写段代码我看下吗?
追答//1设置应答类型 application/pdf text/html
response.setContentType("image/jpeg");
//清空浏览器缓存
response.setHeader("progma", "no-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires", 0);
//2 获得输出流
OutputStream os=response.getOutputStream();
//3 输出流 输出一张图片
//创建画板对象
BufferedImage bi=new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
//拿到画笔
Graphics g=bi.getGraphics();
//画背景,先背景颜色,再创建背景形状
drawBackground(g);
//创建随机数字符数组
char[] c=getRandom();
//将生成的验证码通过Session传递
request.getSession().setAttribute("check",new String(c));
//画数字 ,指定数字颜色
drawNum(g,c);
//结束画图
g.dispose();
//4 图片是在内存中的,Servlet通过输出流获得
ByteArrayOutputStream bo=new ByteArrayOutputStream();
/*
* 通过ImageIO把画面bi中的内存画生成一张JPEG图片,
* 把这样的图片传给输出流 由Servlet获得,输出流就可以给servlet
*/
ImageIO.write(bi, "JPEG", bo);
//5servlet获得图片输出流--->再通过Servlet中的OutputStream输出给客户端
byte[] b=bo.toByteArray();
os.write(b);
//6流关闭
bo.close();
os.flush();