我得到一个简单的问题。我正在使用simplecaptcha1.2.1.jar(http://simplecaptcha.sourceforge.net/)开发一个应用程序。
一切都很好,我知道如何使用SimpleCaptcha API和AudioCaptcha,我知道如何使用AudioCaptcha ac = new AudioCaptcha.Builder()和Captcha captcha = new Captcha.Builder(400,100)自定义创建我的Servlet
我想知道的是同步显示在Simple Captcha后面的Image上的文本和AudioCaptcha背后的音频,基本上你看到的是你播放和听到的内容。
关于如何播放和聆听图像背后的文字的任何想法?
我会更感激。
最好的问候
Marcel Aguiar
答案 0 :(得分:0)
对于那些使用simplecaptcha API 1.2(如何同步Audio和Captcha Image之间的代码)所做问题的人,请按照我的结论,以便我们在我们之间分享。
步骤1_)AudioCaptcha原始实现仅接受Numbers,因此,不必使用DefaultTextProducer,您必须使用NumberAnswerProducer
TextProducer tp = new NumbersAnswerProducer(4,true);
new AudioCaptcha.Builder()
.addVoice()
.addAnswer(tp)
.build());
您可以运行测试,如果您尝试将DefaultTextProducer()传递给AudioCaptcha构建器,它将失败。
步骤2_)为Captcha和AudioCaptcha共享相同的TextProducer
我从SimpleCaptcha的GIT Repository中克隆了该项目,以了解更多关于" AudioCaptcha.Builder()。addAnswer(tp)"和Captcha.Builder(400,100).addText(tp)
如果你试试这个,你会看到,甚至共享同一个TextProducer实例tp = new NumbersAnswerProducer(4,true);对于两者而言,你将永远得到(我的意思是永远信任我),不同的代码背后的图像和音频。 为什么呢?
因为.addAnswer(tp)和.addText(tp)的实现背后的代码正在调用一个名为.getText()的方法,即使对于TextProducer的同一个实例也是如此。这个getText后面有一个随机代码:
public String getText() {
String capText = "";
for (int i = 0; i < _length; i++) {
capText += _srcChars[RAND.nextInt(_srcChars.length)];
}
return capText;
}
所以,再次,即使使用相同的TextProducer实例,每次调用.addAnswer(tp)和.addText(tp)时都会有不同的代码,因为在这些人后面他们会调用getText()。
最后,我发现解决这个问题的方法是,我必须在TextProducer后面创建自己的getText()实现,以便能够为Captcha和AudioCaptcha提供相同的值。
最好的问候