java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言, 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台 (即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se)) 的总称
这篇文章主要介绍了使用 java 生成字母验证码的相关资料, 具有一定的参考价值, 感兴趣的小伙伴们可以参考一下
- import java.awt.BasicStroke;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics2D;
- import java.awt.image.BufferedImage;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.util.Random;
- import javax.imageio.ImageIO;
- public class VerifyCode {
- // 图片宽高
- private int w = 70;
- private int h = 35;
- private Random r = new Random();
- private String[] fontNames = {
- "宋体",
- "华文楷体",
- "黑体",
- "微软雅黑",
- "楷体_GB2312"
- };
- private String codes = "234567890qwertyuipasdfghjkzxcvbnmQWERTYUIPASDFGHJKZXCVBNM";
- private Color bgColor = new Color(255, 255, 255);
- private String text;
- // 生成随机颜色
- private Color randomColor() {
- int red = r.nextInt(150);
- int green = r.nextInt(150);
- int blue = r.nextInt(150);
- return new Color(red, green, blue);
- }
- // 生成随机字体
- private Font randomFont() {
- int index = r.nextInt(fontNames.length);
- String fontName = fontNames[index];
- int style = r.nextInt(4); //0 无 1 粗体 2 斜体 3 粗 + 斜
- int size = r.nextInt(5) + 24; // 生成随机字号 24~28
- return new Font(fontName, style, size);
- }
- // 干扰线
- private void drowLine(BufferedImage image) {
- // 生成 4 条干扰线
- int num = 4;
- Graphics2D bi = (Graphics2D) image.getGraphics();
- for (int i = 0; i < num; i++) {
- int x1 = r.nextInt(w);
- int x2 = r.nextInt(w);
- int y1 = r.nextInt(h);
- int y2 = r.nextInt(h);
- bi.setStroke(new BasicStroke(1.5F));
- bi.setColor(Color.BLUE); // 干扰线色
- bi.drawLine(x1, y1, x2, y2);
- }
- }
- // 随机生成一个字符
- private char randomChar() {
- int index = r.nextInt(codes.length());
- return codes.charAt(index);
- }
- // 图片缓冲区
- private BufferedImage createImage() {
- BufferedImage image = new BufferedImage(w, h, BufferedImage.TYPE_INT_BGR);
- Graphics2D bi = (Graphics2D) image.getGraphics();
- bi.setColor(this.bgColor);
- bi.fillRect(0, 0, w, h);
- return image;
- }
- // 生成图片
- public BufferedImage getImage() {
- BufferedImage image = createImage();
- Graphics2D bi = (Graphics2D) image.getGraphics();
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < 4; i++) {
- String string = randomChar() + "";
- sb.append(string);
- // 每个字符占图片 1/4 宽
- float x = i * 1.0F * w / 4;
- // 随机字体格式
- bi.setFont(randomFont());
- bi.setColor(randomColor());
- // 把字写在图片适当处(h-6 指图片距底部 6 个高度)
- bi.drawString(string, x, h - 6);
- }
- this.text = sb.toString();
- drowLine(image);
- return image;
- }
- // 返回得到的字体
- public String getText() {
- return text;
- }
- // 把图片写入指定位置
- public static void output(BufferedImage image, OutputStream out) {
- try {
- ImageIO.write(image, "JPG", out);
- } catch(IOException e) {
- e.printStackTrace();
- }
- }
- }
来源: http://www.phperz.com/article/18/0217/359158.html