📄 imagecode.java
字号:
package cn.sh.web.vcode;
import java.awt.image.*;
import java.io.*;
import java.awt.*;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.*;
import javax.servlet.http.*;
public class ImageCode extends HttpServlet {
private static String code_str[]={"0","1","2","3","4","5","6","7","8","9", "a","b","c","d","e","f","g","h","i","j","k","m","n","o","p","q","r","s","t","u","v","w","x","y","z", "A","B","C","D","E","F","G","H","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
public static String getOneStr(){
Random random=new Random();
int i = random.nextInt(60);
while((i<0)||(i>60)) i = random.nextInt(60);
return code_str[i];
}
public static Color getColor(int fc,int bc){ //需要将fc和bc设置在0~255之间
Random random=new Random(); int nextint = 9;
if(fc>bc){nextint=fc-bc;} else if(bc>fc){nextint=bc-fc;}
int r=fc+random.nextInt(nextint);
int g=fc+random.nextInt(nextint);
int b=fc+random.nextInt(nextint);
//// /因为Color对象的r g b只能在0到255之间,所以进行此处理.
if(r>=255){r=200;} else if(r<=0){r=201;}
if(g>=255){g=190;} else if(g<=0){g=191;}
if(b>=255){b=180;} else if(b<0){b=181;}
return new Color(r,g,b);
}
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String session_str=""; //////用于取得验证码的值,以便设置验证码
String str="";//////辅助取得验证码的值
ServletOutputStream out = response.getOutputStream();//////用于图像输出.
BufferedImage image = new BufferedImage(60,25,BufferedImage.TYPE_INT_BGR);
Graphics g = image.getGraphics();
g.setColor(getColor(187,221)); /////设置图像的背景颜色范围
g.fillRect(0,0,120,25); /////使用已经设置的颜色填充图像
g.setFont(new Font("",Font.PLAIN,18)); //////设置字体
for(int i=0;i<4;i++) {
str=getOneStr();
g.setColor(getColor(50,121)); ////////设计颜色
g.drawString(str,15*i+2,20);///////使用上下文颜色绘制字符
session_str=session_str+str; //////取得验证码
}
request.getSession().setAttribute("longin_image_vcode",session_str);
//g.dispose();撤消该图形的上下文并释放它所使用的任何系统资源,在此不能使用此,
//否则刷新页面会导致session_str值在变化,而图像上的文字不随之相应变化.
ImageIO.write(image,"JPEG",out);
}
public static void main(String args[]) throws FileNotFoundException, IOException{
for(int j=0;j<20;j++){
String session_str=""; //////用于取得验证码的值,以便设置验证码
String str=""; //////辅助取得验证码的值
BufferedImage image = new BufferedImage(60,25,BufferedImage.TYPE_INT_BGR);
Graphics g = image.getGraphics();
g.setColor(getColor(187,221)); /////设置图像的背景颜色范围
g.fillRect(0,0,120,25); /////使用已经设置的颜色填充图像
g.setFont(new Font("",Font.PLAIN,18)); //////设置字体
for(int i=0;i<4;i++) {
str=getOneStr();
g.setColor(getColor(50,121)); ////////设计颜色
g.drawString(str,15*i+2,20);///////使用上下文颜色绘制字符
session_str=session_str+str; //////取得验证码
}
FileOutputStream out = new FileOutputStream("g:\\"+session_str+".jpg"); //用于直接将图片写入磁盘
ImageIO.write(image,"JPEG",out);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -