functions.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. from PIL import Image, ImageDraw, ImageFont, ImageFilter
  2. from random import randint
  3. def generate_captcha():
  4. # Generate one letter
  5. def gen_letter():
  6. return chr(randint(65, 90))
  7. def rndColor():
  8. return (randint(64, 255), randint(64, 255), randint(64, 255))
  9. def rndColor2():
  10. return (randint(32, 127), randint(32, 127), randint(32, 127))
  11. # Generate a 4 letter word
  12. def gen_wrong_answer():
  13. word = ""
  14. for _ in range(4):
  15. word += gen_letter()
  16. return word
  17. # Generate 7 wrong captcha answers
  18. wrong_answers = []
  19. for _ in range(7):
  20. wrong_answers.append(gen_wrong_answer())
  21. width = 120 * 4
  22. height = 120
  23. correct_answer = ""
  24. font = ImageFont.truetype("assets/arial.ttf", 90)
  25. file = "assets/captcha.jpg"
  26. image = Image.new('RGB', (width, height), (255, 255, 255))
  27. draw = ImageDraw.Draw(image)
  28. # Draw random points on image
  29. for x in range(width):
  30. for y in range(height):
  31. draw.point((x, y), fill=rndColor())
  32. for t in range(4):
  33. letter = gen_letter()
  34. correct_answer += letter
  35. draw.text(
  36. (120 * t + 32, 3),
  37. letter,
  38. font=font,
  39. fill=rndColor2()
  40. )
  41. image = image.filter(ImageFilter.BLUR)
  42. image.save(file, 'jpeg')
  43. return [file, correct_answer, wrong_answers]