2010-10-15 2 views
1

У меня есть сайт, где i want to put a custom made captcha, не может использовать онлайн-услуги captcha из-за потребностей макета. Он работает на Google appengine. Имеет ли API appengine что-то для написания символов на заданном изображении?Captcha С Google AppEngine

Я прошел через appengine Python Image API, но это, похоже, не очень поможет.

Любые предложения по созданию captcha в инфраструктуре Google appengine?

ответ

2

Как правило, вы не можете.

Image API предназначен для преобразования существующих изображений, а не создания новых.

Теоретически, если вы нашли чистую библиотеку создания изображений на Python, она будет работать в App Engine, но она будет медленной.

Почему бы просто не использовать внешний сервис CAPTCHA?

+0

Знаете ли вы какой-либо captcha-сервис, который предоставляет варианты цвета и макета? Я думаю, ReCaptcha не делает. –

+0

Я видел настраиваемый reCaptcha в Интернете ... –

+0

Python/GAE не является идеальным языком для генерации растровых изображений и т. Д. Из-за причин производительности, поэтому найти библиотеку для этого сложно, я думаю. Может быть, вы можете сделать капчу с помощью CSS, холста HTML5 или SVG или чего-то еще? – pthulin

8

A quick google search предоставит вам множество руководств по интеграции услуг captch с вашим приложением AppEngine. Here's one который использует reCaptcha.

+0

я хочу, чтобы создать это самостоятельно в самой AppEngine 'пользовательских captcha', я знаю о рекапчи и использовал его много раз, но на этот раз я должен ограничить размер изображения + цвета таможни. поэтому я не могу полагаться на какие-либо услуги .. –

+0

Нет хороших ответов на то, что вы хотите сделать. Как отмечает @Drew, вы ограничены чистым Python, и выполнение работы по созданию осмысленно-трудного решения captcha займет много времени, а это встречный случай AppEngine. –

+0

спасибо .. Мне нужно попробовать такой модуль python. Я знаю, что это займет время, но мой клиент нуждается в нем. Знаете ли вы какой-либо такой модуль. Альтернатива для PHP GD Library. –

1

Вместо того, чтобы создавать собственные имплантаты. Я рекомендую использовать надежное обслуживание, например reCaptcha: http://www.google.com/recaptcha

+0

Мне это нужно для эстетической цели. могут полагаться на любые услуги. –

+0

У вас есть эстетические ограничения на _captcha_? А? –

+0

@ Ник: веб-сайт является 2-цветным веб-сайтом .. не может помешать внешнему виду. :) –

1

Я бы предложил использовать сторонний сервис, такой как reCaptcha, но если вам действительно нужно предоставить свою собственную реализацию, вы можете использовать недавно введенный Matplotlib для GAE + Python для создания собственных изображений.

Matplotlib - это графическая библиотека для Python и была недавно представлена ​​как часть GAE в декабре 2012 года. Вы можете использовать Matplotlib для рендеринга текста, как показано в this example. Если у вас есть эстетические ограничения на ваш captcha, вы можете отобразить очень причудливый текст и цифры с помощью Matplotlib. Посмотрите на this example.

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

Спасибо, Навдипом Сингх