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. mac下安装ngnix以及开启关闭重启

    一.安装 执行如下命令 brew search nginx brew install nginx 安装完以后,可以在终端输出的信息里看到一些配置路径: /usr/local/etc/nginx/ngi ...

  2. Django 源码安装及使用

    首先我们使用的是最新版的CentOS系统:CentOS 7.4 在安装django之前,我们首先保证系统中已经安装好setuptools Django安装: 1.首先我们在Django官网下载最新版本 ...

  3. 题解报告:poj 2752 Seek the Name, Seek the Fame(kmp前缀表prefix_table的运用)

    Description The little cat is so famous, that many couples tramp over hill and dale to Byteland, and ...

  4. 修改SolrCloud在ZooKeeper中的配置文件操作记录

    修改SolrCloud在ZooKeeper中的配置文件操作记录. 命令执行目录: /opt/solr-/server/scripts/cloud-scripts/ 1.下载配置文件 ./zkcli., ...

  5. Android推送服务(1)几种实现方式

    1.几种常见的解决方案实现原理 1)轮询(Pull)方式:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等.而且你还要考虑轮询的频率,如果 ...

  6. List与类之间的运用,即与javabean的应用

    package com.wh.Object; public class Goods { private String name; private double price; private int n ...

  7. E. Dasha and Puzzle 数学题

    http://codeforces.com/contest/761/problem/E 给出一颗树,要求在坐标系中用平行于坐标轴的线描绘出来. 要求边不能相交,而且点的坐标唯一. 注意到2^1 + 2 ...

  8. CCF|碰撞的小球

    import java.util.Scanner; public class Main { public static void main (String[] args) { Scanner scan ...

  9. Laravel Passport认证-多表、多字段解决方案

    Laravel Passport认证-多表.多字段解决方案 2018年08月19日 09:31:01 醉卧码场君莫笑 阅读数:1632   1. 概述 API 通常使用令牌(token)进行认证并且在 ...

  10. MFC_VS清理器

    VS清理器 界面 工程目录 列表控件ID改名IDC_FILELIST 绑定变量m_FileList 属性设置Accept Files 设置True 成员添加 // 用于保存待遍历的目录 vector& ...