我有一个网站i want to put a custom made captcha
,由于布局需要,无法使用在线验证码服务。它运行在谷歌appengine上。
appengine API是否有用于在给定图像上书写字符的东西?
我经历了appengine Python Image API,但似乎没什么帮助。
有关如何在google appengine基础设施上生成验证码的任何建议吗?
答案 0 :(得分:8)
A quick google search将为您提供大量有关将验证码服务与App Engine应用程序集成的指南。使用reCaptcha的Here's one。
答案 1 :(得分:2)
一般情况下,你不能。
Image API旨在转换现有图像,而不是生成新图像。
理论上如果你找到一个纯Python图像创建库,它将在App Engine上运行,但它会很慢。
为什么不利用外部CAPTCHA服务?
答案 2 :(得分:1)
而不是创建自己的impl。我建议使用像reCaptcha这样的可靠服务: http://www.google.com/recaptcha
答案 3 :(得分:1)
我建议使用像reCaptcha这样的第三方服务,但是如果你真的需要提供自己的实现,你可以使用最近推出的用于GAE + Python的Matplotlib来生成你自己的图像。
Matplotlib是Python的绘图库,最近于2012年12月作为GAE的一部分推出。您可以使用Matplotlib来渲染文本,如this example所示。如果您在验证码上有美学限制,您可以使用Matplotlib渲染非常精美的文本和数字。请看this example。
答案 4 :(得分:0)
您可以使用以下代码创建Captcha,请注意您必须在类路径中添加commons-lang-2.5.jar。
String secutiryCode = RandomStringUtils.random(5, new char[]{'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'});
req.getSession().setAttribute("secutiryCode", secutiryCode);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
URL url = new URL("http://util.krispot.com/util/SecurityImage.jpg?secutiryCode=" + secutiryCode);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
BufferedInputStream bis = new BufferedInputStream(connection.getInputStream());
for(int i = bis.read(); i > -1;i = bis.read()) {
baos.write(i);
}
BufferedOutputStream bos = new BufferedOutputStream(resp.getOutputStream());
bos.write(baos.toByteArray());
bos.close();
谢谢你, Navdeep Singh