Java生成验证码图片
网络上存在的两种生成验证码的方法:
1. ImageIO.write();
ImageIO.write(image4, "PNG", out);
缺点:太慢,生成很小的图片,需要800-2000毫秒;
2. JPEGImageEncoder encoder.encode();
// JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(response.getOutputStream());
// JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(image4);
// param.setQuality(1.0f, false);
// encoder.setJPEGEncodeParam(param);
// encoder.encode(image4);
或者
// OutputStream outStream = response.getOutputStream();
// JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream);
// encoder.encode(image4);
// outStream.close();
缺点:很快,但属于Sun内部包,可能对于非Sun的JDK支持不一致;
其他方式:
1. jimi
try{
com.sun.jimi.core.Jimi.putImage("image/jpeg", image4, out);
}catch(Exception e){
e.printStackTrace();
}
速度快,需要使用Sun提供的包,独立;
这个做法,比一般的IMageIO快10-60倍;推荐推荐;
2. jai
由于目前jai为Sun社区工程;目前暂无下载;
3. Acme开发包
ACME实现了GIF的生成等,但未实现JPEG的实现;不太完整;但对于GIF效率,略低于JIMI;
4. PhotoServlet
网上搜索到的开源工程,主要是做Photo部分;
但同时提供了ImageWriter类,并提供了相应JPEG处理;
缺点:太慢;可以和ImageIO有的一拼;
最后决定:
JIMI使用;
参考文章
JSP生成验证码:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=14022&start=0&tstart=0
JSP生成验证码:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=81&threadID=44288&tstart=0
验证码图片生成问题:
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=25103
JIMI下载:
http://java.sun.com/products/jimi/
ACME下载:
Java操作图片大集合:
http://www.blogjava.net/security/archive/2006/05/23/java_image_library.html
JAI下载: