短视频商城源码,制作彩色验证码
时间:2022-07-26
本文章向大家介绍短视频商城源码,制作彩色验证码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
from random import choice, randint, randrange
import string
from PIL import Image, ImageDraw, ImageFont
#返回length长度随机字母和数字
def selectedCharacters(length):
result = ''.join(choice(string.ascii_letters+string.digits) for _ in range(length))
return result
#返回随机色
def getColor():
r = randint(0,255)
g = randint(0,255)
b = randint(0,255)
return (r,g,b)
def makeIMG():
#图片属性
size=[200,100]
characterNumber=6
bgcolor=(255,255,255)
imageTemp = Image.new('RGB', size, bgcolor)
draw = ImageDraw.Draw(imageTemp)
text = selectedCharacters(characterNumber)
font = ImageFont.truetype('c:\windows\fonts\BRADHITC.TTF', 48)
width, height = draw.textsize(text, font)
#判断尺寸
if width+2*characterNumber>size[0] or height>size[1]:
print('Dimension are not legitimate')
return
# 随机字符位置
startX = 0
widthEachCharater = width//characterNumber
for i in range(characterNumber):
startX += widthEachCharater + 1
position = (startX, (size[1]-height)//2+randint(-5,5))
draw.text(xy=position, text=text[i], font=font, fill=getColor())
# 对像素位置进行微调,实现扭曲的效果
imageFinal = Image.new('RGB', size, bgcolor)
pixelsFinal = imageFinal.load()
pixelsTemp = imageTemp.load()
for y in range(size[1]):
offset = randint(-1,0)
for x in range(size[0]):
newx = x+offset
if newx>=size[0]:
newx = size[0]-1
elif newx<0:
newx = 0
pixelsFinal[newx,y] = pixelsTemp[x,y]
# 随机色像素点
draw = ImageDraw.Draw(imageFinal)
for i in range(int(size[0]*size[1]*0.05)):
draw.point((randrange(size[0]), randrange(size[1])), fill=getColor())
# 绘制5条随机干扰直线
for i in range(5):
start = (0, randrange(size[1]))
end = (size[0], randrange(size[1]))
draw.line([start, end], fill=getColor(), width=1)
# 绘制5条随机弧线
for i in range(5):
start = (-50, -50)
end = (size[0]+10, randint(0, size[1]+10))
draw.arc(start+end, 0, 360, fill=getColor())
imageFinal.save("image.jpg")
imageFinal.show()
makeIMG()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Spark Operator】webhook的分析
- 图解人脸识别算法facenet系列(一)
- Go 语言学习之 struct
- Go 语言学习之map
- 前端|利用手机号登录获取手机验证码
- Linux netstat命令结果分析
- setlistmap部分源码解析
- 使用 Log4j2 + SLF4j 打造日志系统的全方位教程
- 树莓派4的操作系统安装烧录、设置SSH、WIFI、VNC及备份
- C# dotnet 使用 startIndex 提升 IndexOf 的性能
- vscode .vue文件格式配置 使其与webstorm设置一致
- Go 语言学习之 slice
- koa2实现微信公众号关注自动回复消息
- 两个字数字字符串求和
- 设计模式(二):Android 源码中的工厂模式