我正在为我的java应用程序使用simpleCatcha插件。生成的验证码图像无法读取,因此我想更改图像样式。有没有办法自定义或更改图像的样式。 HTML是:
<img id="captcha" src="<c:url value="simpleCaptcha.jpg" />" width="150">
web.xml是:
<display-name>captcha</display-name>
<servlet>
<servlet-name>SimpleCaptcha</servlet-name>
<servlet-class>nl.captcha.servlet.SimpleCaptchaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleCaptcha</servlet-name>
<url-pattern>/simpleCaptcha.jpg</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>simpleCaptcha.jsp</welcome-file>
</welcome-file-list>
页面导入是:
<%@ page import="nl.captcha.Captcha"%>
我使用this插件进行验证码
答案 0 :(得分:1)
如果您检查nl.captcha.servlet.SimpleCaptchaServlet
的源代码,width
,height
和FontColors
已预先定义。这可以在simplecaptcha-1.1.1.jar中找到。屏幕截图下方供您参考。
关于边缘文字渲染器,这是在ColoredEdgesWordRenderer
class&amp;其他人对xBaseline
,yBaseline
,shape
等进行了一些计算,并且到达了应该显示验证码字的角度。
我的赌注是实现您想要的,您需要编辑源代码并制作自己的jar并重新部署。这是因为参数不是从web.xml
文件中获取的。
或者留意您认为更容易识别文本的其他验证码。但是,建议是,验证码看起来越复杂,它就会增加安全性。
答案 1 :(得分:1)
您可以使用自己的servlet覆盖SimpleCaptchaServlet
并使用它。然后你应该能够删除和更改背景或噪音或边框
示例:
.addBackground(new FlatColorBackgroundProducer(Color.LIGHT_GRAY))
或
GradiatedBackgroundProducer bg = new GradiatedBackgroundProducer();
bg.setFromColor(Color.white);
bg.setToColor(Color.yellow);
.addBackground(bg)
答案 2 :(得分:0)
如果有人仍在寻找解决方案,请像下面一样扩展SimpleCaptchaServlet并在web.xml中映射这个新的servlet。这对我有用
public class MySimpleCaptcha extends SimpleCaptchaServlet {
private static final String PARAM_HEIGHT = "height";
private static final String PARAM_WIDTH = "width";
protected int _width = 200;
protected int _height = 50;
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Captcha captcha = new Captcha.Builder(_width, _height)
.addText()
.addBackground(new GradiatedBackgroundProducer())
// Add here whatever you need
.addNoise()
.gimp(new DropShadowGimpyRenderer())
.addBorder()
.build();
CaptchaServletUtil.writeImage(resp, captcha.getImage());
req.getSession().setAttribute(NAME, captcha);
}
}