Sun
是选择你爱的人还是爱你的人?
posts - 8,comments - 14,trackbacks - 0
以前公司业务人员手动操作,一天也只能获取1000来条数据,通过程序获得了非常大的改观。程序目的是自动验证登录并查询获取相关信息,对验证码上每个字显示的宽度有要求,需要事先预设好,因为需要将验证码图片上的字分别裁剪单独分析。当然一般一个网站的验证码宽度都相对固定。




  1package com.xiaohang.readcode;
  2
  3import java.awt.*;
  4import java.awt.image.BufferedImage;
  5import java.io.*;
  6import java.net.URL;
  7import javax.imageio.*;
  8
  9public class ImageCode {
 10    BufferedImage imd; // 待识别图像
 11
 12    private int iw, ih; // 图像宽和高
 13
 14    //public final static String path = "E:\\codeimages\\1.bmp";
 15
 16    public  static void main(String []args){
 17        
 18        try{
 19            
 20            ImageCode app = new ImageCode();
 21            
 22            //String s = app.getImageNum("http://*****.cjn.cn/gcode.act");
 23            String s = app.getImageNum("E:\\codeimages\\1.bmp");
 24            System.out.println("result is : " + s);
 25            
 26        }
catch(Exception ex)
 27        {
 28            ex.printStackTrace();
 29        }

 30    }

 31    
 32    public String getImageNum(String file) {
 33
 34        StringBuffer sb = new StringBuffer("");
 35        try {
 36        //    imd = ImageIO.read(new URL(file)); // 用ImageIO的静态方法读取图像
 37            imd = ImageIO.read(new File(file));
 38            BufferedImage newim[] = new BufferedImage[4];
 39            int[] x = new int[4];
 40            // 将图像分成4块,因为要处理的文件都有四个数字
 41            newim[0] = imd.getSubimage(5, 0, 10, 15);
 42            newim[1] = imd.getSubimage(18, 0, 10, 15);
 43            newim[2] = imd.getSubimage(31, 0, 10, 15);
 44            newim[3] = imd.getSubimage(44, 0, 10, 15);
 45        
 46                 for (int k = 0; k < 4; k++) {
 47                x[k] = 0;
 48            //    ImageIO.write(newim[k], "JPEG", new File("E:\\codeimages\\"+k+".jpeg"));
 49                this.iw = newim[k].getWidth(null);
 50                this.ih = newim[k].getHeight(null);
 51                int[] pix = new int[iw * ih];
 52                // 二进制图像,将像数读取出来,转换成0、1图像数组
 53            
 54                for (int i = 0; i < ih; i++) {
 55                    for (int j = 0; j < iw; j++) {
 56                        pix[i * (iw) + j] = newim[k].getRGB(j, i);
 57                        String code = String.valueOf(pix[i * (iw) + j]);
 58                        if (code.length() >= 8)
 59                            pix[i * (iw) + j] = 1;
 60                        else
 61                            pix[i * (iw) + j] = 0;
 62
 63                        x[k] = x[k] + pix[i * (iw) + j];
 64                    }

 65                }

 66
 67                // 得到匹配的数字
 68                int r = this.getMatchNum(pix);
 69                sb.append(r);
 70            //    System.out.println("x=" + x[k]);
 71            }

 72
 73        }
 catch (Exception ex) {
 74            ex.printStackTrace();
 75        }

 76        return sb.toString();
 77    }

 78    
 79    static int[][] value = {
 80             // 0
 81                   {
 82                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 83                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 84                    0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
 85                    0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
 86                    0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
 87                    0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
 88                    0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
 89                    0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
 90                    0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
 91                    0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
 92                    0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
 93                    0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
 94                    0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
 95                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
 96                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0
 97                    }
,
 98            // 1
 99                  { 
100                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
101                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
102                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
103                    0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
104                    0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
105                    0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
106                    0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
107                    0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
108                    0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
109                    0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
110                    0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
111                    0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
112                    0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
113                    0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
114                    0, 0, 0, 0, 0, 0, 0, 0, 0, 0
115                    }
,
116            // 2
117                    { 
118                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
119                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
120                        0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
121                        0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
122                        0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
123                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
124                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
125                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
126                        0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
127                        0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
128                        0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
129                        0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
130                        0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
131                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
132                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
133                    }
,
134                    
135                    
136            // 3
137                    { 
138                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
139                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
140                        0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
141                        0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
142                        0, 0, 1, 0, 0, 0, 1, 1, 0, 0,
143                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
144                        0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
145                        0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
146                        0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
147                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
148                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
149                        0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
150                        0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
151                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
152                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
153                    }
,
154            // 4
155                    { 
156                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
157                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
158                        0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
159                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
160                        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
161                        0, 0, 0, 0, 1, 1, 1, 0, 0, 0,
162                        0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
163                        0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
164                        0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
165                        0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
166                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
167                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
168                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
169                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
170                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
171                    }
,
172            // 5
173                    { 
174                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
175                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
176                        0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
177                        0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
178                        0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
179                        0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
180                        0, 0, 1, 0, 1, 1, 1, 0, 0, 0,
181                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
182                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
183                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
184                        0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
185                        0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
186                        0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
187                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
188                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
189                    }
,
190            // 6
191                    { 
192                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
193                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
194                        0, 0, 0, 1, 1, 1, 1, 1, 0, 0,
195                        0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
196                        0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
197                        0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
198                        0, 0, 1, 1, 1, 1, 0, 0, 0, 0,
199                        0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
200                        0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
201                        0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
202                        0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
203                        0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
204                        0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
205                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
206                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
207                    }
,
208            // 7
209                    { 
210                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
211                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
212                        0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
213                        0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
214                        0, 1, 0, 0, 0, 0, 1, 1, 0, 0,
215                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
216                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
217                        0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
218                        0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
219                        0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
220                        0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
221                        0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
222                        0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
223                        0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
224                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
225                    }
,
226            // 8
227                    { 
228                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
229                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
230                        0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
231                        0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
232                        0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
233                        0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
234                        0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
235                        0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
236                        0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
237                        0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
238                        0, 0, 1, 1, 0, 0, 1, 1, 0, 0,
239                        0, 0, 1, 1, 1, 1, 1, 1, 0, 0,
240                        0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
241                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
242                        0, 0, 0, 0, 0, 0, 0, 0, 0, 0
243                        }
,
244            // 9
245                        { 
246                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
247                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
248                            0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
249                            0, 0, 0, 1, 0, 0, 1, 0, 0, 0,
250                            0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
251                            0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
252                            0, 0, 1, 0, 0, 0, 0, 1, 0, 0,
253                            0, 0, 0, 1, 0, 0, 1, 1, 0, 0,
254                            0, 0, 0, 0, 1, 1, 0, 1, 0, 0,
255                            0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
256                            0, 0, 0, 0, 0, 0, 1, 0, 0, 0,
257                            0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
258                            0, 0, 1, 1, 0, 0, 0, 0, 0, 0,
259                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
260                            0, 0, 0, 0, 0, 0, 0, 0, 0, 0
261                            }
 }
;
262    
263    // 图像像素相减去最小绝对值得到最接近结果
264    public int getMatchNum(int[] pix){
265        
266        int result = -1;
267        int temp = 100;
268        int x;
269        for(int k = 0 ; k < 10 ; k++){
270            
271            x = 0 ; 
272            for(int i = 0 ; i < 150 ; i++){   // lenght=120
273                x = x+Math.abs(pix[i] - value[k][i]);    // 取绝对值            
274            }

275            
276        if(x < temp){
277            temp = x;
278            result = k;
279        }

280        }

281        return result;
282    }

283    
284
285}

286

原创文章,转载请注明出处。
http://www.blogjava.net/beijing2008/articles/285556.html



posted on 2009-07-05 15:28 .Sun 阅读(871) 评论(1)  编辑  收藏

FeedBack:
# re: 读取图片验证码
2009-08-19 16:35 | 陌路人
受益匪浅。
  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: