Java识别简单的验证码
作者:网络转载 发布时间:[ 2015/9/15 13:50:08 ] 推荐标签:测试开发技术 开发语言
1.老规矩,先上图
要破解类似这样的验证码:
拆分后结果:
然后去匹配,得到结果。
2.拆分图片
拿到图片后,首先把图片中我们需要的部分截取出来。
具体的做法是,创建一个的和图片像素相同的一个代表权重的二维数组,遍历图片的每个像素点,如果接近白色,标记为1,否则标记为0;
然后遍历这个二维数据,如果一个竖排都1,说明是空白列,直到第一次遇到不全为1一列,记住列的下标作为起始值,再次遇到全为1的,记住下标作为结束值,然后从起始列到结束列截取图片,依次类推。
1 //分割图片
2 private java.util.List<BufferedImage> splitImage(BufferedImage originImg)
3 throws Exception {
4 java.util.List<BufferedImage> subImgList = new ArrayList<>();
5 int height = originImg.getHeight();
6 int[][] weight = getImgWeight(originImg);
7 int start = 0;
8 int end = 0;
9 boolean isStartReady = false;
10 boolean isEndReady = false;
11 for (int i = 0; i < weight.length; i++) {
12 boolean isBlank = isBlankArr(weight[i]);
13 if (isBlank) {
14 if (isStartReady && !isEndReady) {
15 end = i;
16 isEndReady = true;
17 }
18 } else {
19 if (!isStartReady) {
20 start = i;
21 isStartReady = true;
22 }
23 }
24 if (isStartReady && isEndReady) {
25 subImgList.add(originImg.getSubimage(start, 0, end - start, height));
26 isStartReady = false;
27 isEndReady = false;
28 }
29 }
30 return subImgList;
31 }
32
33 //颜色是否为空白
34 private boolean isBlank(int colorInt) {
35 Color color = new Color(colorInt);
36 return color.getRed() + color.getGreen() + color.getBlue() > 600;
37 }
38
39 //数组是不是全空白
40 private boolean isBlankArr(int[] arr) {
41 boolean isBlank = true;
42 for (int value : arr) {
43 if (value == 0) {
44 isBlank = false;
45 break;
46 }
47 }
48 return isBlank;
49 }
50
51 //获取图片权重数据
52 private int[][] getImgWeight(BufferedImage img) {
53 int width = img.getWidth();
54 int height = img.getHeight();
55 int[][] weight = new int[width][height];
56 for (int x = 0; x < width; ++x) {
57 for (int y = 0; y < height; ++y) {
58 if (isBlank(img.getRGB(x, y))) {
59 weight[x][y] = 1;
60 }
61 }
62 }
63 return weight;
64 }
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11