栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2021-10-25 pillow的使用、图片的处理以及画板搓一个验证码

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-25 pillow的使用、图片的处理以及画板搓一个验证码

中文文档,传送门

pip install pillow

1.引入库和打开图片,以及图片类的属性

from PIL import Image
im = Image.open("图片名称。JPG")
#打印IM 有以下三个东西
print(im.format,im.size, im.mode)
#分别是:图片源--如果不是文件读取的此项为None,图片大小,图片色彩模式
》》》JPEG (1080, 1080) RGB
  1. 缩略图,以及以特定格式保存图片
im.show()##低效的打开图片方式
im.thumbnail((128,128))  #指定图片大小,缩略图转换
im.save('1.jpg', "JPEG") #保存文件,后面的参数是存储格式
  1. 图片旋转45度并显示
im.rotate(45).show()

下面是生成验证码的一个例程
额外说明下:字体需要在系统盘搜索ttf文件,搜到后拖到项目目录下方便使用

import random

from PIL import Image, ImageFont, ImageDraw

def get_random_color():
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

def generate_image(length):
    s='qwertyuioplkjhgfdsxcvbnm'
    #新建画布
    im=Image.new('RGB',(130,50),color=get_random_color())
    #指定画笔字体,和字体大小
    font=ImageFont.truetype('arial.ttf',size=30)
    #创建画的对象
    draw=ImageDraw.Draw(im)
    # 绘制验证码
    code='' #收集验证码,服务器需要拿到这个码和用户输入比对
    for i in range(length):#一次循环画一个码,参数决定循环次数
        c=random.choice(s) #在字符串S中抽取一个
        code += c
        draw.text((5+20*i,5),text = c,fill=get_random_color(),font=font) #(位置元祖,具体画什么,填充什么颜色,什么字体)
    im.show()
generate_image(6)

上面例程的生成结果,类似这么个验证码

去例程函数里拿code的值可以知道验证码的内容。然后是展示和验证。这个验证码强度不高,但确实是个码凑合用用也没啥问题。要是觉得太好识别了,就在上边画线画点加滤镜啥的,反正用户只要不暴走随便你怎么搞。。。
比如绘制30条干扰线~~~~~~~~~~~~~~~~~~~

    # 绘制30条干扰线
    for i in range(30):
        x1 = random.randint(0,130)
        y1 = random.randint(0, 50/2)
        x2 = random.randint(0, 130)
        y2 = random.randint(50/2, 50)
        draw.line(    (   (x1,y1),(x2,y2)   ) , fill=get_random_color()  )

额 变这样~~~和平时有时候遇到的验证码差不多了~

或者这样的,每次都很惊喜~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/348424.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号