随机图片验证码的生成

Python生成随机验证码,需要使用PIL模块.

安装:


1

pip3 install pillow

基本使用

1. 创建图片


1

2

3

4

5

6

7

8

9

from PIL import Image

img = Image.new(mode=‘RGB‘, size=(12030), color=(255255255))

 

# 在图片查看器中打开

# img.show()

 

# 保存在本地

with open(‘code.png‘,‘wb‘) as f:

    img.save(f,format=‘png‘)

2. 创建画笔,用于在图片上画任意内容


1

2

img = Image.new(mode=‘RGB‘, size=(12030), color=(255255255))

draw = ImageDraw.Draw(img, mode=‘RGB‘)

3. 画点


1

2

3

4

5

6

img = Image.new(mode=‘RGB‘, size=(12030), color=(255255255))

draw = ImageDraw.Draw(img, mode=‘RGB‘)

# 第一个参数:表示坐标

# 第二个参数:表示颜色

draw.point([100100], fill="red")

draw.point([300300], fill=(255255255))

4. 画线


1

2

3

4

5

6

img = Image.new(mode=‘RGB‘, size=(12030), color=(255255255))

draw = ImageDraw.Draw(img, mode=‘RGB‘)

# 第一个参数:表示起始坐标和结束坐标

# 第二个参数:表示颜色

draw.line((100,100,100,300), fill=‘red‘)

draw.line((100,100,300,100), fill=(255255255))

5. 画圆


1

2

3

4

5

6

7

img = Image.new(mode=‘RGB‘, size=(12030), color=(255255255))

draw = ImageDraw.Draw(img, mode=‘RGB‘)

# 第一个参数:表示起始坐标和结束坐标(圆要画在其中间)

# 第二个参数:表示开始角度

# 第三个参数:表示结束角度

# 第四个参数:表示颜色

draw.arc((100,100,300,300),0,90,fill="red")

6. 写文本


1

2

3

4

5

6

img = Image.new(mode=‘RGB‘, size=(12030), color=(255255255))

draw = ImageDraw.Draw(img, mode=‘RGB‘)

# 第一个参数:表示起始坐标

# 第二个参数:表示写入内容

# 第三个参数:表示颜色

draw.text([0,0],‘python‘,"red")

7. 特殊字体文字


1

2

3

4

5

6

7

8

9

10

img = Image.new(mode=‘RGB‘, size=(12030), color=(255255255))

draw = ImageDraw.Draw(img, mode=‘RGB‘)

# 第一个参数:表示字体文件路径

# 第二个参数:表示字体大小

font = ImageFont.truetype("kumo.ttf"28)

# 第一个参数:表示起始坐标

# 第二个参数:表示写入内容

# 第三个参数:表示颜色

# 第四个参数:表示颜色

draw.text([00], ‘python‘"red", font=font)

图片验证码的生成

import random
from io import BytesIO
from PIL import Image,ImageDraw,ImageFont
def valid_color():

   color=(random.randint(0, 255), random.randint(0, 255), random.randint(0, 255))
   return color

def get_valid_code(request):
    ‘‘‘获取随机验证码图片‘‘‘
    img=Image.new(mode="RGB",size=(170,40),color=valid_color())#创建一张背景图片随机的图片
    draw=ImageDraw.Draw(img,mode="RGB")#给图片创建一个画笔
    font=ImageFont.truetype(font="blog/static/font/kumo.ttf",size=25)#创建字体
    valid_list=[]
    for i in range(5):
        random_num = str(random.randint(0, 9)) #产生随机的数字
        random_lower_letter = chr(random.randint(65, 90))#产生随机的小写字母
        random_upper_letter = chr(random.randint(97, 122))#产生随机的大写字母
        random_str=random.choice([random_num,random_lower_letter,random_upper_letter])#从以上的随机字符中随机出一个随机字符
        draw.text(xy=[30+i*24,10],text=random_str,fill=valid_color(),font=font)#在背景图片中写入随机字符
        valid_list.append(random_str)#将随机字符串保存到列表中
    for i in range(40):
        ‘‘‘在图片中画如随机的点‘‘‘
        draw.point([random.randint(0,170),random.randint(0,40)],fill=valid_color())
    for i in range(5):
        ‘‘‘在图片中画如随机的线‘‘‘
        draw.line((random.randint(0, 170), random.randint(0, 40),random.randint(0,170),random.randint(0,40)), fill=valid_color())

    f=BytesIO() #在内存中创建一个文件对象
    img.save(f,"png") #将随机字符串的图片保存到文件中
    data=f.getvalue() #获取随机字符串图片的二进制
    valid_str=‘‘.join(valid_list)
    request.session["valid_str"]=valid_str#将图片中产生的随机字符串保存到session中
    return HttpResponse(data)
时间: 2024-10-20 14:18:13

随机图片验证码的生成的相关文章

Java Web:使用Servlet生成网页随机图片验证码

最近在学习Java Web开发,做了一个生成网页随机图片验证码的例子,在此记录. 一.新建Servlet项目: 在MyEclipse中新建Servlet项目,一步步操作就OK,在此不再赘述.建好之后文件目录树如下图: 二.源代码实现: (1)java代码: package com.zdt.identity; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.

servlet输出随机图片(验证码)

package com.baidu.web.servlet; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.IOException; import java.util.Random; import javax.imageio.ImageIO;

随机验证码、图片验证码和邮箱发送用户验证码

随机验证码.图片验证码和邮箱发送用户验证码 一.随机验证码 随机验证码的生成比较简单一般在注册用户的时候与邮箱或者手机信息接口相结合实现发送验证码功能,随机验证码只需要使用python内置的random随机数函数,调用random模块:import random,具体实现代码块 #随机验证码 def authCode(): code = '' for i in range(6): current = random.randrange(0,6)#randrange随机生成0-6的数字,但不包括6

字符型图片验证码识别完整过程及Python实现

1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越来越严峻.本文介绍了一套字符验证码识别的完整流程,对于验证码安全和OCR识别技术都有一定的借鉴意义. 2   关键词 关键词:安全,字符图片,验证码识别,OCR,Python,SVM,PIL 3   免责声明 本文研究所用素材来自于某旧Web框架的网站 完全对外公开 的公共图片资源. 本文只做了该网站对外公开的公共图片资源进行了爬取, 并未越权 

图片验证码(Struts2中使用)

写在前面: 最近在项目中做了一个登录页面,用到了图片验证码的功能,所以记录一下.方便之后再有用到,直接拿来用即可.其实图片验证码的生成都是有固定步骤的,网上也有很多的例子,有的时候,如果不想深究,都是可以直接拿来用的.嘻嘻~~~~ 生成图片验证码工具类并在struts2中使用,大概需要以下五个步骤: 1.获取随机数验证码字符串2.生成验证码图片3.将图片转为图片流格式4.提供图片流类型的get()方法5.配置struts.xml 其实上面的前三个步骤,都是在为生成图片验证码做准备,我们将前三步的

PHP生成GIF动态图片验证码

<?php /** * 调用示例 * */ session_start(); $randCode = ''; //验证码随机 $str="abcdefghjkmnpqrstuvwsyzABCDEFGHJKMNPQRSTUVWSYZ23456789"; for($i=0;$i<4;$i++){ $safe.=substr($str,rand(0,strlen($str)),1); } $_SESSION["imgcode"]=$safe; ImageCod

验证码画布生成以及点击图片切换验证码

//这个验证码画布生成是师兄写的,不是本人写的 1 package com.didinx.common; 2 3 import javax.imageio.ImageIO; 4 import javax.servlet.ServletException; 5 import javax.servlet.annotation.WebServlet; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpSer

response小结(三)—输出随机图片(验证码功能实现)

本文是一个很简单的向网页上输出验证码的实现喲!通过注释解释清楚了每一步! Myeclipse下的Package Explorer显示文件结构如下: ResponseDemo.java实现了输出随机图片的功能: 1 package com.yyz.response; 2 3 import java.awt.Color; 4 import java.awt.Font; 5 import java.awt.Graphics; 6 import java.awt.image.BufferedImage;

PHP 生成指定大小随机图片

PHP 生成指定大小随机图片 ? 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 <?php $image_width = 100; $image_height = 100; $image_str = ''; if (isset($_GET[