在解析验证码的时候,可能会遇到字符不太规整,或者同一字符颜色深度不太一样,最后导致识别的时候不容易识别,那么我在这里再次向大家推荐一个算法,这个算法就是把验证码缩小到8x8大小,这样下来真正的做到了只保留验证码细节部分,提高了验证码的识别率。
//把图片缩小成指定大小,b=true 按比例缩放。
public BufferedImage thumb(BufferedImage source, int width,
int height, boolean b) {
// targetW,targetH分别表示目标长和宽
int type = source.getType();
BufferedImage target = null;
double sx = (double) width / source.getWidth();
double sy = (double) height / source.getHeight();
if (b) {
if (sx > sy) {
sx = sy;
width = (int) (sx * source.getWidth());
} else {
sy = sx;
height = (int) (sy * source.getHeight());
}
}
if (type == BufferedImage.TYPE_CUSTOM) { // handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.createCompatibleWritableRaster(width,
height);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(width, height, type);
Graphics2D g = target.createGraphics();
// smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}
}
原图片
经过缩小之后的图片
这里是缩小到12x12大小的,一共有144个像素,但是网上推荐说缩小到8x8大小,我也试了8x8大小的,但是缩小之后肉眼有点难分辨了,做验证码对比库的时候有点困难,所以就缩小到了12x12的。
如果感觉写的对您有所帮助的,请动动小鼠标,点个赞。有哪些需要改进的可以在下面留言,我定会吸取。有志同道合的小伙伴可以上车的哦!