1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
|
""" Captcha.Visual.Tests
Visual CAPTCHA tests
"""
#
# PyCAPTCHA Package
# Copyright (C) 2004 Micah Dowty <micah@navi.cx>
#
from Captcha.Visual import Text, Backgrounds, Distortions, ImageCaptcha
from Captcha import Words
import random
__all__ = ["PseudoGimpy", "AngryGimpy", "AntiSpam"]
class PseudoGimpy(ImageCaptcha):
"""A relatively easy CAPTCHA that's somewhat easy on the eyes"""
def getLayers(self):
word = Words.defaultWordList.pick()
self.addSolution(word)
return [
random.choice([
Backgrounds.CroppedImage(),
Backgrounds.TiledImage(),
]),
Text.TextLayer(word, borderSize=1),
Distortions.SineWarp(),
]
class AngryGimpy(ImageCaptcha):
"""A harder but less visually pleasing CAPTCHA"""
def getLayers(self):
word = Words.defaultWordList.pick()
self.addSolution(word)
return [
Backgrounds.TiledImage(),
Backgrounds.RandomDots(),
Text.TextLayer(word, borderSize=1),
Distortions.WigglyBlocks(),
]
class AntiSpam(ImageCaptcha):
"""A fixed-solution CAPTCHA that can be used to hide email addresses or URLs from bots"""
fontFactory = Text.FontFactory(20, "ttf-bitstream-vera/VeraBd.ttf")
defaultSize = (512,50)
def getLayers(self, solution="murray@example.com"):
self.addSolution(solution)
textLayer = Text.TextLayer(solution,
borderSize = 2,
fontFactory = self.fontFactory)
return [
Backgrounds.CroppedImage(),
textLayer,
Distortions.SineWarp(amplitudeRange = (2, 4)),
]
### The End ###
|