话不多说 直接上代码 里面有详细的注释,新手可以进来看看,有不对的或者可以改进的地方 希望您指正!
package checkCode;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
public class CheckCode extends HttpServlet{
/**
* @author zx
*/
private static final long serialVersionUID = 1L;
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
int width = 100;
int height = 40;
BufferedImage bfi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = bfi.getGraphics();//获得画笔
g.setColor(Color.WHITE);//设置背景颜色
g.fillRect(0, 0, width, height);//画矩形框
String str = "";//保存随机数
Random r = new Random();
g.setFont(new Font("a",Font.BOLD,20));//设置字体
for(int i=0;i<4;i++){
int num = r.nextInt(10);//生成十以内的随机数
g.setColor(new Color(r.nextInt(255),r.nextInt(255) ,r.nextInt(255) ));
g.drawString(""+num, 20+i, 20+r.nextInt(10));//20+r 表示 每一位数字之间的间隔,自己调试出位置
//nextInt(10) 数字离中心位置的上下波动距离
}
//画干扰线
for(int i=0;i<10;i++){
g.setColor(new Color(r.nextInt(255),r.nextInt(255),r.nextInt(255) ));//设置颜色
g.drawLine(r.nextInt(100), r.nextInt(40), r.nextInt(100), r.nextInt(40));
}
g.dispose();//这是最重要的 ,不愕然显示不出来哦
ImageIO.write(bfi, "jpeg", response.getOutputStream());//图片用字节流,直接得到
}
}