生成验证码图片一般返回InputStream类型,不管什么情况下都能使用,只需要将InputStream这个返回的值在写到文件里就能动态生成
代码如下:
- packagecom.yxfei.tool;
- importjava.awt.Color;
- importjava.awt.Font;
- importjava.awt.Graphics;
- importjava.awt.Graphics2D;
- importjava.awt.geom.AffineTransform;
- importjava.awt.image.BufferedImage;
- importjava.io.ByteArrayInputStream;
- importjava.io.ByteArrayOutputStream;
- importjava.io.InputStream;
- importjava.util.Random;
- importjavax.imageio.ImageIO;
- importjavax.imageio.stream.ImageOutputStream;
- importjavax.servlet.http.HttpServletRequest;
- publicclassVerifycode{
- staticRandomr=newRandom();
- publicstaticColorgetRandColor(intmin,intmax){
- if(min>255)
- min=255;
- if(max>255)
- max=255;
- intred=r.nextInt(max-min)+min;
- intgreen=r.nextInt(max-min)+min;
- intblue=r.nextInt(max-min)+min;
- returnnewColor(red,green,blue);
- }
- publicstaticInputStreamgetVerifycode(intwidth,intheight,HttpServletRequestrequest)throwsException{
- //TODOAuto-generatedmethodstub
- ByteArrayInputStreaminputStream=null;
- BufferedImageimage=newBufferedImage(width,height,
- BufferedImage.TYPE_INT_RGB);
- Graphicsg=image.getGraphics();
- Graphics2Dg2d=(Graphics2D)g;
- g.setColor(getRandColor(200,250));
- g.fillRect(0,0,width,height);
- g.setColor(getRandColor(180,200));
- g.drawRect(0,0,width-1,height-1);
- for(inti=0;i<200;i++){
- intx=r.nextInt(width-1);
- inty=r.nextInt(height-1);
- intx1=r.nextInt(width-10)+10;
- inty1=r.nextInt(height-4)+4;
- g.setColor(getRandColor(180,200));
- g.drawLine(x,y,x1,y1);
- }
- for(inti=0;i<300;i++)
- {
- intx=r.nextInt(width);
- inty=r.nextInt(height);
- g.setColor(getRandColor(150,180));
- g.drawRect(x,y,0,0);
- }
- StringsRand="",s="";
- intdigital=0;
- intitmp=0;
- for(inti=0;i<4;i++){
- switch(r.nextInt(4)){
- case0:
- case1:
- digital=r.nextInt(26)+65;
- s=String.valueOf((char)digital);
- break;
- case2:
- digital=r.nextInt(26)+97;
- s=String.valueOf((char)digital);
- break;
- default:s=String.valueOf(r.nextInt(9));
- }
- sRand+=s;
- FontmFont=newFont("Arial",Font.BOLD|Font.ITALIC,25);
- g.setFont(mFont);
- booleanb=r.nextBoolean();
- Stringa=b?"":"-";
- intsin=Integer.parseInt(a+r.nextInt(20));
- g.setColor(getRandColor(20,130));
- AffineTransformtr=newAffineTransform();
- tr.rotate(sin*3.14/180,15*i+6,b?5:(0));
- g2d.setTransform(tr);
- g.drawString(s,16*i+10,23);
- }
- System.out.println(sRand);
- request.getSession(true).setAttribute("verifycode",sRand);
- g.dispose();
- ByteArrayInputStreaminput=null;
- ByteArrayOutputStreamoutput=newByteArrayOutputStream();
- try{
- ImageOutputStreamimageOut=ImageIO
- .createImageOutputStream(output);
- ImageIO.write(image,"JPEG",imageOut);
- imageOut.close();
- inputStream=newByteArrayInputStream(output.toByteArray());
- }catch(Exceptione){
- System.out.println("验证码生成失败"+e.toString());
- }
- returninputStream;
- }
- }