首页 > 其他分享 >pillow创建验证码图片

pillow创建验证码图片

时间:2024-03-13 11:33:18浏览次数:22  
标签:draw code img randint 创建 random 验证码 pillow 255

目录

一、登录-随机生成图片验证码

环境: python10, pillow==10.2.0

pip install pillow

1、创建图片

from PIL import Image, ImageDraw
img = Image.new(mode='RGB', size=(500, 140), color=(255, 255, 255))

with open('code.png', 'wb')as f:
    img.save(f, format='png')

参数:

mode=‘RGB’表示用RGB表示颜色。

size=(120, 30)表示坐标

color=(255, 255, 255) 表示白色

2、创建画笔

from PIL import Image, ImageDraw

img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')   # 创建画笔对象draw
img.show()   # 在图片查看器中打开,这句会调用系统默认的图片管理工具

3、画点-point()方法

from PIL import Image, ImageDraw
img = Image.new(mode='RGB', size=(120, 30), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')
# point()第一个参数:表示坐标,  第二个参数:表示颜色
draw.point([10, 20], fill='red')
draw.point([100, 100], fill=(0, 255, 0))
# 保存在本地
with open('code.png', 'wb') as f:
    img.save(f, format='png')

4、画线-line()

from PIL import Image, ImageDraw
img = Image.new(mode='RGB', size=(540, 150), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')
# line()第一个参数:表示起始坐标和结束坐标,第二个参数:表示颜色
draw.line((50, 50, 50, 150), fill='red') 
# 上面一句表示画一条坐标(x=100,y=100)到(x=100,y=300)的直线
with open('code.png', 'wb') as f:
    img.save(f, format='png')

5、画圆-arc()方法

from PIL import Image, ImageDraw

img = Image.new(mode='RGB', size=(500, 140), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')  # 创建画笔对象
draw.arc((200,20,300,120), 0, 360, fill='red')
# 保存在本地
with open('code.png', 'wb')as f:
    img.save(f, format='png')

arc()方法的参数说明

  • 起始坐标和结束左边(圆要画在其中间,两点确定矩形的内切圆)

  • 开始角度,

  • 结束角度

  • 表示颜色

6、写文本-text()方法

draw.text([0,0], 'python', 'red')

参数:

  • 起始坐标
  • 写入的文本
  • 颜色

7、特殊字体文件

from PIL import Image, ImageDraw, ImageFont
img = Image.new(mode='RGB', size=(500, 140), color=(255, 255, 255))
draw = ImageDraw.Draw(img, mode='RGB')  # 创建画笔对象
font = ImageFont.truetype('xxx.ttf', 28)
draw.text([0,0], 'python', 'red', font=font)
# 保存在本地
with open('code.png', 'wb')as f:
    img.save(f, format='png')

8、随机生成图片验证码

import random
from PIL import Image, ImageDraw, ImageFont, ImageFilter

def check_code(width=120, height=30, char_length=5, font_file='./static/font/k.ttf', font_size=28):
    code = []
    img = Image.new(mode='RGB', size=(width, height), color=(255, 255, 255))
    draw = ImageDraw.Draw(img, mode='RGB')

    def rndChar():
        """
        生成随机字符(包括大小写字母和数字)
        :return:
        """
        ranNum = str(random.randint(0, 9))
        ranLower = chr(random.randint(65, 90))
        ranUpper = chr(random.randint(97, 120))
        return random.choice([ranNum, ranLower, ranUpper])

    def rndColor():
        """
        生成随机颜色
        :return:
        """
        return (random.randint(0, 255), random.randint(10, 255), random.randint(64, 255))

    # 写文字
    font = ImageFont.truetype(font_file, font_size)
    for i in range(char_length):
        char = rndChar()
        code.append(char)
        h = ( height - font_size ) / 2
        draw.text([i * width / char_length, h], char, font=font, fill=rndColor())

    # 写干扰点
    for i in range(40):
        draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())

    # 写干扰圆圈
    for i in range(40):
        draw.point([random.randint(0, width), random.randint(0, height)], fill=rndColor())
        x = random.randint(0, width)
        y = random.randint(0, height)
        draw.arc((x, y, x + 4, y + 4), 0, 90, fill=rndColor())

    # 画干扰线
    for i in range(5):
        x1 = random.randint(0, width)
        y1 = random.randint(0, height)
        x2 = random.randint(0, width)
        y2 = random.randint(0, height)
        draw.line((x1, y1, x2, y2), fill=rndColor())

    # 对图像加滤波 - 深度边缘增强滤波
    img = img.filter(ImageFilter.EDGE_ENHANCE_MORE)  
    return img, ''.join(code)

if __name__ == '__main__':
    # 1. 直接打开,即用图片查看器查看
    # img,code = check_code()
    # img.show()

    # 2. 写入文件
    # img,code = check_code()
    # with open('code.png','wb') as f:   # f是写入磁盘的文件句柄
    #     img.save(f, format='png')
    # data = f.read()   # data是读取图片的字节

    # 3. 写入内存(Python3)
    # img,code = check_code()
    # from io import BytesIO    # 内存管理的模块
    # stream = BytesIO()         # stream是写入内存的文件句柄
    # img.save(stream, 'png')
    # data = stream.getvalue()

标签:draw,code,img,randint,创建,random,验证码,pillow,255
From: https://www.cnblogs.com/journeyer-xsh/p/18070276

相关文章

  • 55_创建私人服务
    脚本模板!/bin/bashNOW_SIZE=REQUIRE_SIZE=2500LOG_FILE=/var/log/mem.logSERVICE_STATUS=0functioncheck_mem(){NOW_SIZE=$(free-m|awk'/Mem/{print$4}')if[[$NOW_SIZE-le$REQUIRE_SIZE]];thenecho"警告:$(date+%F_%H:%m:%S)内存低于2.5G,......
  • 【JavaEE初阶系列】——多线程 之 创建进程
    目录......
  • 创建Vue3项目,更多参考vue官网
     一、环境:1、Node版本(node-v命令查询,参考则是需要18.0及以上)C:\Users\86176>node-vv16.14.0后续又重新下载nvm进行新的版本安装,这里后面安装的19.0的也有错误,安装18.19.12、vue-cil版本(vue-V命令可查询电脑版本,参需3.0以上)C:\Users\86176>vue-V@vue/cli5.0.83、其他......
  • .Net 创建webhooks Demo,可用于Gitlab等Workflow
    框架:.Net6、webapipackage:GitLabApiClient定义body参数DTO,不同event有不同的参数,具体可参考gitlab文档:https://docs.gitlab.com/ee/user/project/integrations/webhook_events.htmlpublicclassGitLabWebhookData{publicstringRef{get;set;}publicstring......
  • 验证码绕过(on client)
    右键查看源码找到关键性代码:验证码生成代码分析得知,这段代码是一个JavaScript函数createCode(),它用于生成验证码并将生成的验证码设置为具有特定ID("checkCode")的HTML元素的值将验证码生成写在前端上是容易绕过的输入正确验证码后抓包sendtointruder,将验证码参数去......
  • 创建Vue3+Vite+TypeScript项目
    一、安装node环境,安装18.0或更高版本的Node.js  推荐使用nvm管理node版本:一看就会使用nvm实现多个版本的node自由切换-始是逍遥人-博客园(cnblogs.com)二、创建项目  1、选择一个工作路径,如:E:\webproject  2、打开cmd命令窗口进入到当前目录    快捷方式:直接......
  • 创建一个vue项目
    1.使用vite创建项目npmcreatevite@latest2.替换main.js//从Vue.js框架中导入createApp函数。createApp是用来创建Vue应用的函数。import{createApp}from'vue'//导入一个CSS文件,这个文件包含了应用程序的样式信息。'./style.css'表示这个CSS......
  • python怎么创建项目?
     Python是一种高级编程语言,可以用于各种不同的开发和编程场景。Python的灵活性使其成为许多开发者的首选。在本文中,我们将探讨如何在Python中创建项目。一.准备工作在开始使用Python进行开发之前,您需要确保您的计算机上已经安装了Python。如果您尚未安装Python,可以通过官......
  • 新版eclipse创建maven项目步骤
    eclipse版本:eclipse-jee-2023-12R一、使用eclipse自带的maven,先进行eclipse配置:1、打开Window-》preferences-》maven-》installations-》可以看到eclipse自带的maven版本,默认勾选的也是该版本(如果需要使用自行安装的maven可以在这里add);2、打开Window-》preferences-》maven-......
  • 使用flowable创建工作引擎
    pom依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven......