首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在simpleCaptcha中更改图像样式

在simpleCaptcha中更改图像样式
EN

Stack Overflow用户
提问于 2013-05-30 11:58:29
回答 3查看 3.3K关注 0票数 1

我正在为我的java应用程序使用simpleCatcha插件。生成的验证码图像是不可读的,所以我想更改图像样式。是否有任何方法可以自定义或更改图像的样式。HTML是:

代码语言:javascript
复制
<img id="captcha" src="<c:url value="simpleCaptcha.jpg" />" width="150">

web.xml是:

代码语言:javascript
复制
<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>

页面导入为:

代码语言:javascript
复制
<%@ page import="nl.captcha.Captcha"%>

我还使用了验证码的this插件

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-30 13:24:29

如果检查一下nl.captcha.servlet.SimpleCaptchaServletwidthheightFontColors的源代码,就会发现它们都是预定义的。这可以在simplecaptcha-1.1.1.jar中找到。下面的截图供您参考。

关于边缘单词渲染器,这是在ColoredEdgesWordRenderer类中处理的&其他类对xBaselineyBaselineshape等进行一些计算,并得出验证码的单词应该显示的角度。

我敢打赌,要实现你想要的东西,你要么需要编辑源代码,制作自己的jar,然后重新部署。这是因为参数不是从web.xml文件中获取的。或者寻找一些你认为更容易识别文本的其他captcha代码。但是,建议是,验证码看起来越复杂,它就会增加越多的安全性。

票数 1
EN

Stack Overflow用户

发布于 2013-07-20 04:13:02

您可以使用自己的servlet覆盖SimpleCaptchaServlet并使用它。然后,您应该能够删除和更改背景或噪声或边界

示例:

代码语言:javascript
复制
.addBackground(new FlatColorBackgroundProducer(Color.LIGHT_GRAY)) 

代码语言:javascript
复制
GradiatedBackgroundProducer bg = new GradiatedBackgroundProducer();
bg.setFromColor(Color.white);
bg.setToColor(Color.yellow);
.addBackground(bg)
票数 1
EN

Stack Overflow用户

发布于 2016-12-22 18:15:33

如果有人还在寻找解决方案,可以像下面这样扩展SimpleCaptchaServlet,并在web.xml中映射这个新的servlet。这对我很管用

代码语言:javascript
复制
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);
     }

 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16827695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档