-누구나 Python을 배울 수 있습니다--
여기에 설명된 확인 코드는 간단하며 문자를 비틀 수도 있습니다
Python 타사 라이브러리는 매우 강력하며 PIL은 세 번째입니다. -Python용 파티 이미지 처리 모듈을 사용하여 이미지 확인 코드를 생성할 수도 있습니다
PIL 설치
명령 설치:
pip install pillow
소스 코드 설치 다운로드:
주소 복사:
예: 이미지 생성 및 채우기 text
#!/usr/bin/python#-*-coding:utf-8-*- from PIL import Image, ImageDraw, ImageFont, ImageFilter# 实例一个图片对象240 x 60:width = 60 * 4height = 60# 图片颜色clo = (43, 34, 88) # 我觉得是紫蓝色image = Image.new('RGB', (width, height), clo)# 创建Font对象:# 字体文件可以使用操作系统的,也可以网上下载font = ImageFont.truetype('./font/Arial.ttf', 36)# 创建Draw对象:draw = ImageDraw.Draw(image)# 输出文字:str1 = "ren ren Python"w = 4 #距离图片左边距离h = 10 #距离图片上边距离 draw.text((w, h), str1, font=font)# 模糊: image.filter(ImageFilter.BLUR)code_name = 'test_code_img.jpg'save_dir = './{}'.format(code_name) image.save(save_dir, 'jpeg') print("已保存图片: {}".format(save_dir))
(venv) allenwoo@~/renren/code$ python test2.py 已保存图片: ./test_code_img.jpg
그림은 다음과 같습니다:
텍스트에는 색상이 없습니다. 색상을 추가할 수도 있습니다. text에 채우기 매개변수를 전달하기만 하면 됩니다
draw.text((w, h) , str1,font=font, fill = (78, 64, 65))
색상 추가
n 간격마다 배경을 여러 개의 작은 점으로 만들 수도 있습니다. 다음과 같은 다른 색상:
#!/usr/bin/python#-*-coding:utf-8-*- from PIL import Image, ImageDraw, ImageFont, ImageFilter# 实例一个图片对象240 x 60:width = 60 * 4height = 60# 图片颜色clo = (43, 34, 88) # 我觉得是紫蓝色image = Image.new('RGB', (width, height), clo)# 创建Font对象:# 字体文件可以使用操作系统的,也可以网上下载font = ImageFont.truetype('./font/Arial.ttf', 36)# 创建Draw对象:draw = ImageDraw.Draw(image)# 填充像素:# 宽每隔 20, 高每隔5, 形成坐标x,y# 红色:220,20,60 for x in range(0, width, 20): for y in range(0, height, 5): draw.point((x, y), fill=(220, 20, 60))# 输出文字:str1 = "we are renren"w = 4 #距离图片左边距离h = 10 #距离图片上边距离 draw.text((w, h), str1, font=font, fill = (78, 64, 65))# 模糊: image.filter(ImageFilter.BLUR)code_name = 'test_code_img.jpg'save_dir = './{}'.format(code_name) image.save(save_dir, 'jpeg') print("已保存图片: {}".format(save_dir))
결과 이미지:
위와 앞서 배운 무작위 생성기를 사용하여 인증 코드를 만듭니다. 이제
생성하세요. 인증코드
#!/usr/bin/python#-*-coding:utf-8-*-from uuid import uuid1from PIL import Image, ImageDraw, ImageFont, ImageFilterimport randomdef rnd_char():''' 随机一个字母或者数字 :return: '''# 随机一个字母或者数字 i = random.randint(1,3)if i == 1:# 随机个数字的十进制ASCII码 an = random.randint(97, 122)elif i == 2:# 随机个小写字母的十进制ASCII码 an = random.randint(65, 90)else:# 随机个大写字母的十进制ASCII码 an = random.randint(48, 57)# 根据Ascii码转成字符,return回去return chr(an)# 干扰def rnd_dis():''' 随机一个干扰字 :return: ''' d = ['^','-', '~', '_', '.'] i = random.randint(0, len(d)-1)return d[i]# 两个随机颜色都规定不同的区域,防止干扰字符和验证码字符颜色一样# 随机颜色1:def rnd_color():''' 随机颜色,规定一定范围 :return: '''return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255))# 随机颜色2:def rnd_color2():''' 随机颜色,规定一定范围 :return: '''return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127))def create_code():# 240 x 60: width = 60 * 4 height = 60 image = Image.new('RGB', (width, height), (192, 192, 192))# 创建Font对象: font = ImageFont.truetype('./font/Arial.ttf', 36)# 创建Draw对象: draw = ImageDraw.Draw(image)# 填充每个像素:for x in range(0, width, 20):for y in range(0, height, 10): draw.point((x, y), fill=rnd_color())# 填充字符 _str = ""# 填入4个随机的数字或字母作为验证码for t in range(4): c = rnd_char() _str = "{}{}".format(_str, c)# 随机距离图片上边高度,但至少距离30像素 h = random.randint(1, height-30)# 宽度的化,每个字符占图片宽度1/4,在加上10个像素空隙 w = width/4 * t + 10 draw.text((w, h), c, font=font, fill=rnd_color2())# 实际项目中,会将验证码 保存在数据库,并加上时间字段 print("保存验证码 {} 到数据库".format(_str))# 给图片加上字符干扰,密集度由 w, h控制for j in range(0, width, 30): dis = rnd_dis() w = t * 15 + j# 随机距离图片上边高度,但至少距离30像素 h = random.randint(1, height - 30) draw.text((w, h), dis, font=font, fill=rndColor())# 模糊: image.filter(ImageFilter.BLUR)# uuid1 生成唯一的字符串作为验证码图片名称 code_name = '{}.jpg'.format(uuid1()) save_dir = './{}'.format(code_name) image.save(save_dir, 'jpeg') print("已保存图片: {}".format(save_dir))# 当直接运行文件的是和,运行下面代码if __name__ == "__main__": create_code()
(venv) allenwoo@~/renren/code$ python test.py 保存验证码 ef3k 到数据库 已保存图片: ./c86e03c0-1c23-11e7-999d-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 I37X 到数据库 已保存图片: ./cb8aed02-1c23-11e7-9b18-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 vVL1 到数据库 已保存图片: ./cc120da8-1c23-11e7-b762-f45c89c09e61.jpg (venv) allenwoo@~/renren/code$ python test.py 保存验证码 K6w3 到数据库 已保存图片: ./cc891e05-1c23-11e7-b7ec-f45c89c09e61.jpg
어렵나요? ? 마지막으로, 이 인증 코드 생성 코드에는 이해해야 할 몇 가지 논리적 문제가 있습니다. 학습 과정에서 문제가 발생하거나 학습 리소스를 얻고 싶다면 학습 교류 그룹
626062078에 참여해 함께 Python을 배워보세요!위 내용은 Python은 단순히 이미지 확인 코드를 생성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!