提交 37468e3b 编写于 作者: dong.an's avatar dong.an

图形验证码

上级 788c2c41
流水线 #13092 已失败 于阶段
package com.pica.cloud.account.account.server.util.captcha; package com.pica.cloud.account.account.server.util.captcha;
import org.apache.commons.io.IOUtils;
import java.awt.*; import java.awt.*;
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.util.Random; import java.util.Random;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
...@@ -25,13 +29,29 @@ public class CaptchaContext { ...@@ -25,13 +29,29 @@ public class CaptchaContext {
public Font font; public Font font;
static byte[][] fontDatas = new byte[4][];
static {
try {
InputStream fontStream = CaptchaGenerator.class.getClassLoader().getResourceAsStream("1.ttf");
fontDatas[0] = IOUtils.toByteArray(fontStream);
fontStream = CaptchaGenerator.class.getClassLoader().getResourceAsStream("2.ttf");
fontDatas[1] = IOUtils.toByteArray(fontStream);
fontStream = CaptchaGenerator.class.getClassLoader().getResourceAsStream("3.ttf");
fontDatas[2] = IOUtils.toByteArray(fontStream);
fontStream = CaptchaGenerator.class.getClassLoader().getResourceAsStream("4.ttf");
fontDatas[3] = IOUtils.toByteArray(fontStream);
} catch (IOException ex) {
}
}
public CaptchaContext(int width, int height, int fontSize, boolean showGrid) throws FontFormatException, IOException { public CaptchaContext(int width, int height, int fontSize, boolean showGrid) throws FontFormatException, IOException {
this.width = width; this.width = width;
this.height = height; this.height = height;
this.fontSize = fontSize; this.fontSize = fontSize;
this.showGrid = showGrid; this.showGrid = showGrid;
String name = "/" + (ThreadLocalRandom.current().nextInt(0, fontCount) + 1) + ".ttf"; int index = ThreadLocalRandom.current().nextInt(0, fontCount);
this.font = Font.createFont(Font.TRUETYPE_FONT, CaptchaGenerator.class.getResourceAsStream(name)); this.font = Font.createFont(Font.TRUETYPE_FONT, new ByteArrayInputStream(fontDatas[index]));
} }
public int rndGridSize() { public int rndGridSize() {
......
package com.pica.cloud.account.account.server.util.captcha; package com.pica.cloud.account.account.server.util.captcha;
import org.apache.commons.io.IOUtils;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.*; import java.awt.*;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.net.URL; import java.io.InputStream;
import java.util.UUID; import java.util.UUID;
import java.util.concurrent.ThreadLocalRandom; import java.util.concurrent.ThreadLocalRandom;
...@@ -16,6 +18,15 @@ import java.util.concurrent.ThreadLocalRandom; ...@@ -16,6 +18,15 @@ import java.util.concurrent.ThreadLocalRandom;
public class CaptchaUtil { public class CaptchaUtil {
final static int MAXSIZE = UUID.randomUUID().toString().replace("_", "").length(); final static int MAXSIZE = UUID.randomUUID().toString().replace("_", "").length();
static byte[] imageData;
static {
try {
InputStream imageStream = CaptchaUtil.class.getClassLoader().getResourceAsStream("1.png");
imageData = IOUtils.toByteArray(imageStream);
} catch (IOException ex) {
}
}
public static String generateUUIDText(int count) { public static String generateUUIDText(int count) {
int pos = count < MAXSIZE ? count : MAXSIZE; int pos = count < MAXSIZE ? count : MAXSIZE;
...@@ -45,8 +56,7 @@ public class CaptchaUtil { ...@@ -45,8 +56,7 @@ public class CaptchaUtil {
} }
//BufferedImage image = new BufferedImage(ctx.width, ctx.height, BufferedImage.TYPE_INT_RGB); //BufferedImage image = new BufferedImage(ctx.width, ctx.height, BufferedImage.TYPE_INT_RGB);
URL url = CaptchaUtil.class.getClassLoader().getResource("1.png"); BufferedImage image = ImageIO.read(new ByteArrayInputStream(imageData));
BufferedImage image = ImageIO.read(url);
Graphics2D g2d = image.createGraphics(); Graphics2D g2d = image.createGraphics();
//g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); //g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//g2d.setBackground(Color.WHITE); //g2d.setBackground(Color.WHITE);
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册