java verifycode_JavaWeb基础—VerifyCode源码

java verifycode_JavaWeb基础—VerifyCode源码1packagecom.jiangbei.verifycodeutils;23importjava.awt.BasicStroke;4importjava.awt.Color;5importjava.awt.Font;6importjava.awt.Graphics2D;7importjava.awt.image.BufferedImage;8importjava.io.IOExce…

大家好,又见面了,我是你们的朋友全栈君。

1 packagecom.jiangbei.verifycodeutils;2

3 importjava.awt.BasicStroke;4 importjava.awt.Color;5 importjava.awt.Font;6 importjava.awt.Graphics2D;7 importjava.awt.image.BufferedImage;8 importjava.io.IOException;9 importjava.io.OutputStream;10 importjava.util.Random;11

12 importjavax.imageio.ImageIO;13

14 public classVerifyCode {15

16 private int w = 70;17

18 private int h = 35;19

20 private Random r = newRandom();21

22 //{“宋体”, “华文楷体”, “黑体”, “华文新魏”, “华文隶书”, “微软雅黑”, “楷体_GB2312”}

23

24 private String[] fontNames = {“宋体”, “华文楷体”, “黑体”, “微软雅黑”, “楷体_GB2312”};25

26 //可选字符

27

28 private String codes = “23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ”;29

30 //背景色

31

32 private Color bgColor = new Color(255, 255, 255);33

34 //验证码上的文本

35

36 privateString text ;37

38 //生成随机的颜色

39

40 privateColor randomColor () {41

42 int red = r.nextInt(150);43

44 int green = r.nextInt(150);45

46 int blue = r.nextInt(150);47

48 return newColor(red, green, blue);49

50 }51

52 //生成随机的字体

53

54 privateFont randomFont () {55

56 int index =r.nextInt(fontNames.length);57

58 String fontName = fontNames[index];//生成随机的字体名称

59

60 int style = r.nextInt(4);//生成随机的样式, 0(无样式), 1(粗体), 2(斜体), 3(粗体+斜体)

61

62 int size = r.nextInt(5) + 24; //生成随机字号, 24 ~ 28

63

64 return newFont(fontName, style, size);65

66 }67

68 //画干扰线

69

70 private voiddrawLine (BufferedImage image) {71

72 int num = 3;//一共画3条

73

74 Graphics2D g2 =(Graphics2D)image.getGraphics();75

76 for(int i = 0; i < num; i++) {//生成两个点的坐标,即4个值

77

78 int x1 =r.nextInt(w);79

80 int y1 =r.nextInt(h);81

82 int x2 =r.nextInt(w);83

84 int y2 =r.nextInt(h);85

86 g2.setStroke(new BasicStroke(1.5F));87

88 g2.setColor(Color.BLUE); //干扰线是蓝色

89

90 g2.drawLine(x1, y1, x2, y2);//画线

91

92 }93

94 }95

96 //随机生成一个字符

97

98 private charrandomChar () {99

100 int index =r.nextInt(codes.length());101

102 returncodes.charAt(index);103

104 }105

106 //创建BufferedImage

107

108 privateBufferedImage createImage () {109

110 BufferedImage image = newBufferedImage(w, h, BufferedImage.TYPE_INT_RGB);111

112 Graphics2D g2 =(Graphics2D)image.getGraphics();113

114 g2.setColor(this.bgColor);115

116 g2.fillRect(0, 0, w, h);117

118 returnimage;119

120 }121

122 //调用这个方法得到验证码

123

124 publicBufferedImage getImage () {125

126 BufferedImage image = createImage();//创建图片缓冲区

127

128 Graphics2D g2 = (Graphics2D)image.getGraphics();//得到绘制环境

129

130 StringBuilder sb = new StringBuilder();//用来装载生成的验证码文本131

132 //向图片中画4个字符

133

134 for(int i = 0; i < 4; i++) {//循环四次,每次生成一个字符

135

136 String s = randomChar() + “”;//随机生成一个字母

137

138 sb.append(s); //把字母添加到sb中

139

140 float x = i * 1.0F * w / 4; //设置当前字符的x轴坐标

141

142 g2.setFont(randomFont()); //设置随机字体

143

144 g2.setColor(randomColor()); //设置随机颜色

145

146 g2.drawString(s, x, h-5); //画图

147

148 }149

150 this.text = sb.toString(); //把生成的字符串赋给了this.text

151

152 drawLine(image); //添加干扰线

153

154 returnimage;155

156 }157

158 //返回验证码图片上的文本

159

160 publicString getText () {161

162 returntext;163

164 }165

166 //保存图片到指定的输出流

167

168 public static voidoutput (BufferedImage image, OutputStream out)169

170 throwsIOException {171

172 ImageIO.write(image, “JPEG”, out);173

174 }175

176 }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159575.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月15日 下午5:00
下一篇 2022年7月15日 下午5:00


相关推荐

  • eureka集群搭建[通俗易懂]

    eureka集群搭建[通俗易懂]1.分布式和集群有啥区别?可能有很多人对分布式和集群这两个概念有点混淆。我先用通俗易懂的话给大家解释下:分布式:一个业务分拆多个子业务,部署在不同的服务器上集群:同一个业务,分别部署在不同的服务器上所以分布式的每一个节点,完成的是不同的业务,一个节点挂了,那么这个业务功能就无法访问了,甚至可能会影响到其他业务。而集群是一个比较有组织的架构,正因为有组织性,一个服务节点挂了,其…

    2022年6月10日
    23
  • Neokylin-Server离线环境、跨主机、使用Docker部署PXC集群

    Neokylin-Server离线环境、跨主机、使用Docker部署PXC集群Neokylin-Server离线环境、跨主机、使用Docker部署PXC集群Neokylin-Server离线环境、跨主机、使用Docker部署PXC集群一、说明二、部署过程:1.切换root账号或所有语句加sudo;2.关闭6个节点防火墙(或打开端口);3.6个节点导入rpm包后安装基础环境:4.设置所有节点;5.启动docker并导入images;6.时间同步;7.etcd集群配置;8.部署flannel网络;9.n1-n3部署pxc;10.m1-m3部署Haproxy+Keepa

    2022年8月10日
    12
  • 使用 CountDownLatch 控制多个线程执行顺序

    使用 CountDownLatch 控制多个线程执行顺序

    2022年3月11日
    36
  • 几款国产FPGA系列器件参数汇总

    几款国产FPGA系列器件参数汇总以下是和厂商确认以及个人在各公司官网上获取的产品参数 部分产品价格可用作参考 价格实时变动 只能作参考 1 高云半导体 FPGA 器件型号 逻辑查找表 RAM 资源 I O 资源 pll 触发器资源 嵌入式内核 易失性 价格 晨熙系列 GW2A 18 2073

    2026年3月26日
    2
  • Rsyslogd 配置[通俗易懂]

    Rsyslogd 配置[通俗易懂]Rsyslogd配置一般的,Rsyslogd的配置文件在/etc/rsyslog.conf。配置文件格式有3种格式的配置文件basic基础配置格式,兼容syslog.conf格式advanced以前叫RainerScript格式,在rsyslogv6开始使用obsoletelegacy传统的格式,仅为确保旧有配置不会出错需要用哪种格式强烈建议不要使用传统格式,应在基…

    2022年8月15日
    7
  • JTAG接口与引脚定义

    JTAG接口与引脚定义标准的 JTAG 当然是 20Pin 但 JATG 实际使用的只有 4 根信号线 再配合电源 地 故又有了很多不同的接口形式 而且现在也渐成标准 归纳如下

    2026年3月17日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号