Skip to content

Commit f0901bc

Browse files
committed
update:生成验证码的文档
1 parent 5566cd9 commit f0901bc

File tree

6 files changed

+62
-6
lines changed

6 files changed

+62
-6
lines changed

doc/manual/img/advanced.man

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,62 @@
7979

8080
<a2.jpg>
8181

82+
------------------------------------------------------------------------
83+
生成验证码
84+
85+
将指定的文字内容生成验证码。验证码的生成步骤如下:
86+
87+
1. 随机选择颜色与字体
88+
2. 文字写入
89+
3. 添加干扰线
90+
4. 图像整体进行扭曲
91+
92+
对于验证码内容,可以使用Nutz中Lang包提供的R.captchaNumber或R.captchaChar,也可以填入任意内容。
93+
94+
95+
比如生成6位数字验证码:
96+
97+
{{{<JAVA>
98+
img = Images.createCaptcha(R.captchaNumber(6));
99+
}}}
100+
101+
效果如下:
102+
103+
<cpn6.jpg>
104+
105+
106+
比如生成6位字符+数字验证码:
107+
108+
{{{<JAVA>
109+
img = Images.createCaptcha(R.captchaChar(6));
110+
}}}
111+
112+
效果如下:
113+
114+
<cpc6.jpg>
115+
116+
117+
如果要生成其他字符的,比如中文,则需要手动指定字体名称,否者容易产生乱码:
118+
119+
{{{<JAVA>
120+
img = Images.Images.createCaptcha("胖五是好人", 0, 0, null, "#FFF", "微软雅黑");
121+
}}}
122+
123+
效果如下:
124+
125+
<cpchinese.jpg>
126+
127+
128+
也可以指定前后背景颜色,这样不会显得那么花哨了:
129+
130+
{{{<JAVA>
131+
img = Images.createCaptcha(R.captchaChar(10), 0, 0, "#000", "#FFF", null);
132+
}}}
133+
134+
效果如下:
135+
136+
<cphb.jpg>
137+
82138
------------------------------------------------------------------------
83139
灰度图
84140

doc/manual/img/cpc6.jpg

1.78 KB
Loading

doc/manual/img/cpchinese.jpg

1.96 KB
Loading

doc/manual/img/cphb.jpg

1.99 KB
Loading

doc/manual/img/cpn6.jpg

1.81 KB
Loading

src/org/nutz/img/Images.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -589,7 +589,7 @@ public static BufferedImage twist(Object srcIm, double twistRank, String bgColor
589589
twistRank = 1;
590590
}
591591
BufferedImage bufImg = read(srcIm);
592-
double period = R.random(0, 10) + 3;// 波形的幅度倍数,越大扭曲的程序越高,一般为3
592+
double period = R.random(0, 7) + 3;// 波形的幅度倍数,越大扭曲的程序越高,一般为3
593593
double phase = R.random(0, 6);// 波形的起始相位,取值区间(0-2*PI)
594594
int width = bufImg.getWidth();
595595
int height = bufImg.getHeight();
@@ -613,17 +613,17 @@ public static BufferedImage twist(Object srcIm, double twistRank, String bgColor
613613
}
614614

615615
// 扭曲相关计算, 后面的参数有两种组合
616-
// 1. width, x, y
617-
// 2. height, y, x
616+
// 1. height, x, y
617+
// 2. width, y, x
618618
private static int pos4twist(double rank,
619619
double phase,
620620
double period,
621-
int wOrH,
621+
int hOrW,
622622
int xOrY,
623623
int yOrX) {
624-
double dyOrX = Math.PI * rank * xOrY / wOrH + phase;
624+
double dyOrX = Math.PI * rank * yOrX / hOrW + phase;
625625
double dxOrY = Math.sin(dyOrX);
626-
return yOrX + (int) (dxOrY * period);
626+
return xOrY + (int) (dxOrY * period);
627627
}
628628

629629
public static final int WATERMARK_TOP_LEFT = 1;

0 commit comments

Comments
 (0)