A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李啸 中级黑马   /  2012-5-9 22:16  /  1225 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class Imagetest extends HttpServlet {
//将要添加进图片的字符当然这些字符是被随机进去的
public static final char[] CHARS={'a','b','c','d','e','f','g','h','i','j','k','m','n','o','q','r','s','t','u','v','w','x','y','z','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','J','K','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
//创建随机对象Random对象
public static Random random=new Random();
//获取随机字符的方法返回字符串
public static String getRandomString(){
  StringBuilder builder=new StringBuilder();
  for (int i = 0; i < 6; i++) {//每次要六个字符
   builder.append(CHARS[random.nextInt(CHARS.length)]);
  }
  return builder.toString();
}
//图片背景的颜色
public static Color getColor(){
  return new Color(random.nextInt(255),random.nextInt(255),random.nextInt(255));
}

//获取当前图片的反色为了让图片颜色和图片的颜色形成鲜明的对比
public static Color getReverseColor(Color c){
  return new Color(255-c.getRed(),255-c.getBlue(),255-c.getGreen());
}

public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  System.out.println("00000000000000000000000000000000");
   response.setContentType("imae/jpeg");
   String randomString=getRandomString();//获取在之前随机出来的数字
   //将之前的随机字符转放到session中一边在前端调用
   request.getSession(true).setAttribute("randomString", randomString);
   //从现在开始画图片
   //第一步设置图片的高度和宽度
   int width=100;
   int height=30;
   //获取图片的颜色
   Color color=getColor();
   //获取图片的反色
   Color reveserColor=getReverseColor(color);
   //创建一个以红蓝绿为基色的图片
   BufferedImage bi=new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
   Graphics2D g=bi.createGraphics();//用之前的图片来创建一个画图对象
   //设置在图片上的字体
   g.setFont(new Font(Font.SANS_SERIF,Font.BOLD,18));//Font构造中的参数:字体的样式,字体加粗,字体大小
   //设置颜色
   g.setColor(color);
   //绘制背景
   g.fillRect(0, 0, width, height);//以浏览器的左上角为原点,以width为宽度,以height为高度
   //设置颜色(这里是给字体设置颜色,所以取的是反色)
   g.setColor(reveserColor);
   //在已经画好的图片上写入随机好的字符
   g.drawString(randomString, 18, 20);
   //下面的工作是为了效果更加明显为图片加入噪音点
   for (int i = 0,n=random.nextInt(100); i <n; i++) {
    g.drawRect(random.nextInt(width), random.nextInt(height), 1, 1);//在一定范围内画噪音点
   }
   //利用字节流将图片转成JPEG格式
   ServletOutputStream out=response.getOutputStream();
   JPEGImageEncoder encoder=JPEGCodec.createJPEGEncoder(out);//编码器
   encoder.encode(bi);//对刚刚画好的图片进行编码
   out.flush();//输出到客户端
}

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  this.doGet(request, response);//这样写的目的大家一目了然
}

}
//web.xml的配置情况
<servlet>
       <servlet-name>Imagetest</servlet-name>
       <servlet-class>Imagetest</servlet-class>
</servlet>
<servlet-mapping>
       <servlet-name>Imagetest</servlet-name>
       <url-pattern>/servlet/Imagetest</url-pattern>
</servlet-mapping>
//前台JSP代码部分
<img src="servlet/Imagetest"></img>

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 这个可以有··一会实验下·

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马