PIL 简单绘画

def get_code_img(request):
from PIL import Image, ImageDraw, ImageFont
import random def random_color():
'''元组 (255,255,255)'''
return (random.randint(0,255),random.randint(0,255),random.randint(0,255)) def random_char():
'''传入需生成字符的个数,返回列表'''
temp = []
for i in range(4):
a = chr(random.randint(65, 90)) # 生成大写字母
b = chr(random.randint(97, 122)) # 生成小写字母
c = str(random.randint(0, 9)) # 生成数字,注意要转换成字符串类型
temp.append(random.choice([a,b,c]))
return temp def create_lines():
'''干扰线'''
size=(200,40)
for i in range(random.randint(2,7)):
begin = (random.randint(0,size[0]),random.randint(0,size[1]))
end = (random.randint(0,size[0]),random.randint(0,size[1]))
draw_obj.line((begin,end),fill=random_color(),width=random.randint(1,4)) def create_point():
'''干扰点'''
for i in range(80):
draw_obj.point((random.randint(0, 220), random.randint(0, 40)), fill=random_color())
x = random.randint(0,220)
y = random.randint(0,40)
z = random.randint(1,7)
a = random.randint(0,270)
b = random.randint(60,360)
draw_obj.arc((x, y, x+z, y+z), 0, 360, fill=random_color())
# 生成一个图片对象
img_obj = Image.new('RGB',(220,40),random_color())
#生成画笔对象
draw_obj = ImageDraw.Draw(img_obj)
# 生成字体对象
font_obj = ImageFont.truetype('static/fonts/kumo.ttf', 40)
# 将字符画到图片上
char_list = random_char()
# print(''.join(char_list))
request.session["code_img"] = "".join(char_list)
for i in range(len(char_list)):
draw_obj.text((10+50*i,0),char_list[i],fill=random_color(),font=font_obj)
create_lines()
create_point()
# img_obj.show() # 调用默认图片浏览器查看 # 不需要在硬盘上保存文件,直接在内存中加载就可以
from io import BytesIO
io_obj = BytesIO()
# 将生成的图片数据保存在io对象中
img_obj.save(io_obj, "png")
# 从io对象里面取上一步保存的数据
data = io_obj.getvalue()
return HttpResponse(data) <div class="form-group">
<label for="check_code" class="col-sm-2 control-label">验证码</label>
<div class="col-sm-7 row">
<div class="col-sm-4">
<input id="check_code" name="check_code" type="text" class="form-control"/>
</div>
<div style="border-radius: 4px;overflow: hidden;">
<img id="get_code" src="/get_code_img/" alt="验证码加载失败">
</div>
</div>
</div>
<script>
$('#get_code').click(function () {
// 点击图片刷新验证码
$(this)[0].src += "?";
}); $('#check_code').focus(function () {
$('#error_msg').text('')
})
</script>

python 用 PIL 模块 画验证码的更多相关文章

  1. 基于PIL模块创建验证码图片

    def get_valid_img(request): # 方式2:基于PIL模块创建验证码图片 from PIL import Image, ImageDraw, ImageFont from io ...

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

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

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

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

  4. python之pillow模块学习--验证码的生成和破解

    一.基础学习 在Python中,有一个优秀的图像处理框架,就是PIL库,pip install pillow 示例1 from PIL import Image # 读取当前图片 im = Image ...

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

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

  6. Python 使用Pillow模块生成验证码

    1.安装 pip3 install pillow 2.使用步骤 生成验证码和验证字符串 绘制图片,将验证码放入session中 将图片返回给页面 3.代码demo #!/usr/bin/env pyt ...

  7. python中PIL模块

    Image模块 Image模块是在Python PIL图像处理中常见的模块,对图像进行基础操作的功能基本都包含于此模块内.如open.save.conver.show-等功能. open类 Image ...

  8. 【Python】PIL模块

    Python自建库,在爬虫等基础应用中更加简单好记,做整理以备自查. 目录 Image模块 open类.Save类.format类.Mode类.convert类.Size类.Info类.new类.Co ...

  9. Python——用turtle模块画海龟的第一步

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

随机推荐

  1. 用set和shopt设置bash选项

    1.set命令 -o打开选项,+o关闭选项#set -o //显示选项设置#set -o noclobber //打开该选项,重定向将覆盖已存在的文件#set +o noclobber //关闭该选项 ...

  2. (图论)51NOD 1264 线段相交

    给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No".   输入 第1行:一个 ...

  3. 组合数学练习题(二)——Chemist

    题意: 在一个 n 维无限空间中,一开始原点处有一个细胞.细胞每秒都会增殖,每个原有细胞都会消亡,在与它曼哈顿距离恰为 1的所有位置都会新增一个细胞.求 T 秒后,原点处会有多少细胞,答案 mod10 ...

  4. 204 Count Primes 计数质数

    计算所有小于非负整数 n 的质数数量. 详见:https://leetcode.com/problems/count-primes/description/ Java实现: 埃拉托斯特尼筛法:从2开始 ...

  5. 转】upstart封装mongodb应用为系统服务

    原博文出自于: http://blog.fens.me/category/%E6%95%B0%E6%8D%AE%E5%BA%93/page/4/ 感谢! upstart封装mongodb应用为系统服务 ...

  6. Android开发学习--MVP模式入门

    1.模型与视图完全分离,我们可以修改视图而不影响模型2.可以更高效地使用模型,因为所有的交互都发生在一个地方——Presenter内部3.我们可以将一个Presenter用于多个视图,而不需要改变Pr ...

  7. shell编写的多服务器自动互信脚本(安装ceph)

    相信大家都使用过分布式存储,而在分布式存储中较为出色的非ceph莫属了,但是这里就不深入聊ceph啦,我们只是聊聊安装ceph时遇到的问题. ceph需要多台主机进行ssh互信.三台还能忍受,但是当超 ...

  8. iOS programming Code Snippet Library

    iOS programming  Code Snippet Library  The freebie code comes from the code snippet library. 代码来自cod ...

  9. charsets - 程序员对字符集和国际化的观点

    描述 Linux 是一个国际性的操作系统.它的各种各样实用程序和设备驱动程序 (包括控制台驱动程序 ) 支持多种语言的字符集,包括带有附加符号的拉丁字母表字符,重音符,连字(字母结合), 和全部非拉丁 ...

  10. selenium兼容非标准chrome内核的浏览器

    多浏览器兼容性测试(1) RIDE已经支持多浏览器兼容性测试,例如: firefox ie chrome safari 但是,项目要求支持360极速和360安全浏览器.所以,我们需要增加代码让RIDE ...