2013-05-30 54 views
1

我爲我的java應用程序使用simpleCatcha插件。生成的驗證碼圖片不可讀,所以我想更改圖片樣式。有什麼方法可以自定義或更改圖像的樣式。 HTML是:在simpleCaptcha中更改圖像樣式

<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插件驗證碼

回答

1

如果檢查源代碼爲nl.captcha.servlet.SimpleCaptchaServlet,width,heightFontColors已被預定義。這可以在simplecaptcha-1.1.1.jar中找到。屏幕截圖下方供您參考。

SimpleCaptchaServlet

關於邊緣字渲染器,這在ColoredEdgesWordRenderer類被處理&他人這確實上xBaselineyBaselineshape等一些計算併到達其應顯示的驗證碼的字的角度。我敢打賭,要達到你想要的,你需要編輯源代碼並製作一個你自己的jar並重新部署。這是因爲參數不是從web.xml文件中獲取的。 或者注意一些您認爲更容易識別文本的其他驗證碼。但是,建議是,您的驗證碼看起來越複雜,它將添加的安全性就越高。

ColoredEdges

1

您可以用您自己的servlet並使用它覆蓋SimpleCaptchaServlet。然後,你應該能夠刪除和改變背景或噪聲或邊框

實施例: .addBackground(新FlatColorBackgroundProducer(Color.LIGHT_GRAY))

GradiatedBackgroundProducer BG =新GradiatedBackgroundProducer(); bg.setFromColor(Color.white); bg.setToColor(Color.yellow); .addBackground(bg)

0

如果有人仍在尋找解決方案,請像下面那樣擴展SimpleCaptchaServlet,並將這個新的servlet映射到web.xml中。這適用於我

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

}