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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • TS助手 v3.52 视频网站下载工具,网页视频下载神器

    TS助手 v3.52 视频网站下载工具,网页视频下载神器TS的全称则是TransportStream,即传输流,DVD节目中的MPEG2格式,是MPEG2-PS,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的,m3u8是一个TS切片列表文件,它记录视频的每个切片的时长与顺序。现主流视频网站都采用这种模式。正因为如此,很多网友遇到这种TS传输流的视频,就有点束手无策了,今天给大家带来的这款TS助手可以轻松帮大家解决视频…

    2022年7月18日
    15
  • 介绍篇 决策引擎环节

    介绍篇 决策引擎环节决策引擎概念简述在我理解上决策引擎类似是一个管道、运输系统,连通整个风控流程,所有的规则和评分卡以及流程都覆盖其中,分配到每一个环节(比如人工),将结果返回给决策引擎,走入下一个流程决策引擎的使用规则决策引擎的分流效果评分卡是内置在决策引擎当中,基于评分卡的分段,评分卡的使用具体参见:评分卡在策略中的使用,进行分流,分流决策的目的是为让好客户以及有借款欲望客户进一步走入下一流程决策引擎…

    2022年6月22日
    34
  • vue项目中关闭eslint的方法

    vue项目中关闭eslint的方法一群胡说八道的,说注释这个rule,那个rule,全tm球用没有。还有说在webpack.config.js等文件里操作的,但vue-cli创建出来的项目中根本没有这些玩意。方法在项目根目录下增加vue.config.js文件。内容如下://vue.config.jsmodule.exports={lintOnSave:false}完事。转载链接:添加链…

    2022年4月27日
    34
  • qt 5.12.1 下载安装详细教程

    qt 5.12.1 下载安装详细教程前言:Qt是一个跨平台的C++图形界面应用程序框架。它提供给开发者建立图形用户界面所需的功能,广泛用于开发GUI程序,也可用于开发非GUI程序。Qt很容易扩展,并且允许真正地组件编程。基本上,Qt同XWindow上的Motif,Openwin,GTK等图形界面库以及Windows平台上的MFC、OWL、VCL、ATL是同类型的东西。一:下载地址http://download.qt.io/of…

    2022年5月13日
    53
  • 性能测试相关书籍

    性能测试相关书籍

    2021年8月8日
    69
  • DeviceIoControl解读

    DeviceIoControl解读设备驱动程序可以被当作内核模式函数包来看待,I/O控制代码就是用来指定访问其中的哪个函数的。DeviceIoControl函数的dwIoControlCode参数就是这个代码,它指出了我们需要进行的操作,以及如何进行操作。 控制代码是32位数字型常量,可以CTL_CODE宏来定义,它们定义在winioctl.inc和ntddk.inc文件中。 控制代码中各数据位字段的含义如下: ◎

    2022年9月6日
    2

发表回复

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

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