在simpleCaptcha中更改图像样式

时间:2013-05-30 03:58:29

标签: java html css servlets captcha

我正在为我的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插件进行验证码

3 个答案:

答案 0 :(得分:1)

如果您检查nl.captcha.servlet.SimpleCaptchaServlet的源代码,widthheightFontColors已预先定义。这可以在simplecaptcha-1.1.1.jar中找到。屏幕截图下方供您参考。

SimpleCaptchaServlet

关于边缘文字渲染器,这是在ColoredEdgesWordRenderer class&amp;其他人对xBaselineyBaselineshape等进行了一些计算,并且到达了应该显示验证码字的角度。

我的赌注是实现您想要的,您需要编辑源代码并制作自己的jar并重新部署。这是因为参数不是从web.xml文件中获取的。 或者留意您认为更容易识别文本的其他验证码。但是,建议是,验证码看起来越复杂,它就会增加安全性。

ColoredEdges

答案 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);
     }

 }