100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 生成随机验证码图片

生成随机验证码图片

时间:2023-01-07 01:50:10

相关推荐

生成随机验证码图片

安装 PIL模块

pip3 install pillow

生成 图片

from PIL import Imageimg = Image.new(mode='RGB',size=(120,30),color=(0,255,255))# 查看 图片# img.show()# 保存 图片 到本地with open('code.png','wb') as f:img.save(f,format='png')

创建画笔,在图片上画内容

from PIL import Image,ImageDrawimg = Image.new(mode='RGB',size=(120,30),color=(0,255,255))draw = ImageDraw.Draw(img,mode='RGB')# 画点draw.point([100,10],fill='red')draw.point([100, 20], fill='red')draw.point([100, 25], fill='red')# 画线draw.line((10,10,100,20),fill=(255,0,255))# 画圆draw.arc((0,0,30,20),0,360,fill='red')# 写文字draw.text([0,0],'python','red') # 加入特殊字体from PIL import ImageFontfont = ImageFont.truetype('kumo.ttf',28)draw.text([0,0],'python','red',font=font)

上面 是把生成写入本地 这种方法是不好的,应该把这个图片写入到内存里

from PIL import Image,ImageDraw,ImageFontfrom io import BytesIOf = BytesIO()img = Image.new(mode='RGB',size=(120,30),color=(0,255,255))draw = ImageDraw.Draw(img,mode='RGB')# .......img.save(f,'png')# 取图片data = f.getvalue()

生成随机验证码图片

# views.pydef check_code(request):from io import BytesIOfrom utils.random_check_code import rd_check_codeimg,code = rd_check_code()stream = BytesIO()img.save(stream,'png')request.session['code'] = codereturn HttpResponse(stream.getvalue())# random_check_code.pyfrom PIL import Image,ImageDraw,ImageFont,ImageFilterimport randomdef rd_check_code(width=120, height=30, char_length=5, font_file='kumo.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:"""return chr(random.randint(65, 90))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 = random.randint(0, 4)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)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。