1. def get_valid_img(request):
  2. # 方式2:基于PIL模块创建验证码图片
  3. from PIL import Image, ImageDraw, ImageFont
  4. from io import BytesIO
  5.  
  6. def get_random_color():
  7. import random
  8. return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
  9.  
  10. # img=Image.new("RGB",(350,38),get_random_color())
  11. # f=open("valid.png","wb")
  12. # img.save(f,"png")
  13. # with open("valid.png","rb") as f:
  14. # data=f.read()
  15.  
  16. # 方式3:
  17. # img=Image.new("RGB",(350,38),get_random_color())
  18. # f=BytesIO()
  19. # img.save(f,"png")
  20. # data=f.getvalue()
  21.  
  22. # # 方式4:完善文本
  23. #
  24. # img=Image.new("RGB",(350,38),get_random_color())
  25. # draw=ImageDraw.Draw(img)
  26. # font=ImageFont.truetype("static/font/kumo.ttf",32)
  27. # draw.text((0,0),"python!",get_random_color(),font=font)
  28. #
  29. # # 写与读
  30. # f=BytesIO()
  31. # img.save(f,"png")
  32. # data=f.getvalue()
  33.  
  34. # 方式5:
  35. #
  36. img = Image.new("RGB", (170, 35), get_random_color())
  37. draw = ImageDraw.Draw(img)
  38. font = ImageFont.truetype("static/font/kumo.ttf", 32)
  39. keep_str = ""
  40. for i in range(4):
  41. random_num = str(random.randint(0, 9))
  42. random_lowalf = chr(random.randint(97, 122))
  43. random_upperalf = chr(random.randint(65, 90))
  44. random_char = random.choice([random_num, random_lowalf, random_upperalf])
  45. draw.text((i * 30 + 30, 0), random_char, get_random_color(), font=font)
  46. keep_str += random_char
  47.  
  48. # 加噪点
  49. width = 170
  50. height = 35
  51. for i in range(6):
  52. x1 = random.randint(0, width)
  53. x2 = random.randint(0, width)
  54. y1 = random.randint(0, height)
  55. y2 = random.randint(0, height)
  56. draw.line((x1, y1, x2, y2), fill=get_random_color())
  57.  
  58. for i in range(6):
  59. draw.point([random.randint(0, width), random.randint(0, height)], fill=get_random_color())
  60. x = random.randint(0, width)
  61. y = random.randint(0, height)
  62. draw.arc((x, y, x + 4, y + 4), 0, 90, fill=get_random_color())
  63. # 写与读
  64. f = BytesIO()
  65. img.save(f, "png")
  66. data = f.getvalue()
  67. print('keep_str', keep_str)
  68. # 将验证码存在各自的session中
  69. request.session['keep_str'] = keep_str
  70.  
  71. return HttpResponse(data)

基于PIL模块创建验证码图片的更多相关文章

  1. 使用Python的PIL模块来进行图片对比

    使用Python的PIL模块来进行图片对比 在使用google或者baidu搜图的时候会发现有一个图片颜色选项,感觉非常有意思,有人可能会想这肯定是人为的去划分的,呵呵,有这种可能,但是估计人会累死, ...

  2. Python利用PIL生成随机验证码图片

    安装pillow: pip install pillow PIL中的Image等模块提供了创建图片,制作图片的功能,大致的步骤就是我们利用random生成6个随机字符串,然后利用PIL将字符串绘制城图 ...

  3. 基于Picture Library创建的图片文档库中的上传多个文件功能(upload multiple files)报错怎么解决?

    复现过程 首先,我创建了一个基于Picture Library的图片文档库,名字是 Pic Lib 创建完毕后,我点击它的Upload 下拉菜单,点击Upload Picture按钮 在弹出的对话框中 ...

  4. python 用 PIL 模块 画验证码

    PIL 简单绘画 def get_code_img(request): from PIL import Image, ImageDraw, ImageFont import random def ra ...

  5. C# 创建验证码图片

    using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; us ...

  6. 纯代码系列:Python实现验证码图片(PIL库经典用法用法,爬虫12306思路)

    现在的网页中,为了防止机器人提交表单,图片验证码是很常见的应对手段之一.这里就不详细介绍了,相信大家都遇到过. 现在就给出用Python的PIL库实现验证码图片的代码.代码中有详细注释. #!/usr ...

  7. python模块之PIL模块(生成随机验证码图片)

    PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...

  8. 使用模块PIL 生成 随机验证码

    --------------默认自己无能,无疑是给失败制造机会!你认为自己是什么样的人,就将成为什么样的人. 要使用PIL模块. 安装: 1 pip3 install pillow 基本使用 1. 创 ...

  9. Python使用PIL模块生成随机验证码

    PIL模块的安装 pip3 install pillow 生成随机验证码图片 import random from PIL import Image, ImageDraw, ImageFont fro ...

随机推荐

  1. html和css的重难点知识

    目录 html总难点总结: 1. 块级标签与内联标签的区别 1.1 块级标签: 1.2 内联标签: 2. 选择器 2.1 定义 2.2 选择器的分类 2.1 选择器的分类 3. css中margin, ...

  2. GO Range

    Go 语言中 range 关键字用于 for 循环中迭代数组(array).切片(slice).通道(channel)或集合(map)的元素.在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 ...

  3. WLAN配置SKC

    1.关于SKC WLC支持粘滞密钥缓存(Sticky Key Caching,SKC). 通过SKC,客户端为其关联的每个AP接收并存储不同的PMKID. AP还维护发布给客户端的PMKID数据库. ...

  4. Java面向对象编程 -3.3

    综合实战 简单Java类 在以后进行项目开发与设计的过程之中,简单Java类都将作为一个重要的组成部分存在,慢慢接触到正规的项目设计后, 简单Java类无处不再,并且有可能产生一系列的变化. 所谓的简 ...

  5. vue.js ②

    1.Vue实例的生命周期钩子 每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听.编译模板.将实例挂载到 DOM 并在数据变化时更新 DOM 等.同时在这个过程中也会运行 ...

  6. C语言中的快速排序函数

    C库中有自带的快排函数 qsort() ; 它的函数原型为: void qsort(void * , size_t ,size_t size , int (__cdecl *)(const  void ...

  7. 在visual studio中快速添加代码段

    昨天我在网课上,看到老师输入#2之后,立马就出现了一堆代码. 我于是赶紧打开自己的visual studio尝试一下,并没有任何反应. 上网查找,发现visual studio有自定义代码段的功能. ...

  8. 设计模式课程 设计模式精讲 3-8 迪米法特原则讲解及Coding

    1 课程讲解 1.1 定义 1.2 特质 1.3 重点 2 代码演练 2.1 反例 2.2 正例 1 课程讲解 1.1 定义 定义:一个对象应该对其他对象保持最少的了解.又叫最少知道原则. 1.2 特 ...

  9. HTML5中改变了哪些东西?

    HTML5 推出的理由 想要把目前web上存在的各种问题一并解决 Web浏览器之间的兼容性很低 文档结构不够明确 Web应用程序的功能受到了限制 HTML5重新定义了浏览器的统一标准 HTML5 与 ...

  10. Keras下载的数据集以及预训练模型保存在哪里

    Keras下载的数据集在以下目录中: root\\.keras\datasets Keras下载的预训练模型在以下目录中: root\\.keras\models 在win10系统来说,用户主目录是: ...