最近研究验证码识别,需要生成大量验证码,最方便的是使用captcha
库来生成验证码,网上代码仅仅使用默认设置,但是它还有很多参数可以设定,于是我又添加了一些参数,方便使用。
效果图
参数解析
在上述案例中,完整命令为
1
|
python captcha_gen.py w=210 h=100 n=6 c=2 fontsize=[40,50,60] |
其中:
-
w=210
指定验证码图片宽度 -
h=100
指定验证码图片高度 -
n=6
指定验证码字符长度 -
c=2
指定生成的验证码图片数量 -
fontsize=[40,50,60]
指定验证码字体大小(单个字符的字体大小从中随机选取)
参数默认值都写在代码里了。
好像我是唯一一个使用这种方式输入captcha
参数的。
安装相关库
首先安装两个库:
1
2
|
pip install captcha pip install pillow |
完整源码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#!/usr/bin/env python # -*- coding:utf-8 -*- # Use `pip install captcha` and `pip install pillow` to install dependencies ### from tkinter import font from captcha.image import ImageCaptcha from PIL import Image import random import time import os,sys,ast NUMBER = [ '0' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' ] alphabet = [ 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' ] ALPHABET = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' , 'G' , 'H' , 'I' , 'J' , 'K' , 'L' , 'M' , 'N' , 'O' , 'P' , 'Q' , 'R' , 'S' , 'T' , 'U' , 'V' , 'W' , 'X' , 'Y' , 'Z' ] ALL_CHAR_SET = NUMBER + alphabet + ALPHABET #最终生成的验证码数量 count = 10 #参数: 宽度、高度、字符长度、字体大小 img_width,img_height,labelno,fontsize = 200 , 100 , 4 ,[ 42 , 50 , 56 ] def mylist(x): if isinstance (x,( list , tuple )): return x else : return [x] def get_argv(): global img_width,img_height,labelno,fontsize,count if len (sys.argv) > 1 : for i in range ( 1 , len (sys.argv)): arg = sys.argv[i].split( '=' ) if arg[ 0 ] = = 'w' : img_width = int (arg[ 1 ]) if arg[ 0 ] = = 'h' : img_height = int (arg[ 1 ]) if arg[ 0 ] = = 'n' : labelno = int (arg[ 1 ]) if arg[ 0 ] = = 'c' : count = int (arg[ 1 ]) if arg[ 0 ] = = 'fontsize' : # fontsize = mylist(int(arg[1])) fontsize = ast.literal_eval(arg[ 1 ]) print (f 'img_width:{img_width}, img_height:{img_height}, labelno:{labelno},fonsize:{fontsize},filecount={count}' ) def random_captcha_text(): global labelno captcha_text = [] for i in range (labelno): c = random.choice(ALL_CHAR_SET) captcha_text.append(c) return ''.join(captcha_text) # 生成字符对应的验证码 def gen_captcha_text_and_image(): global img_width,img_height,fontsize image = ImageCaptcha(width = img_width,height = img_height,font_sizes = fontsize) captcha_text = random_captcha_text() # print('captcha_text:',captcha_text) captcha_image = Image. open (image.generate(captcha_text)) return captcha_text, captcha_image def main(): global img_width, img_height, count, labelno get_argv() # 保存路径 path = f '{img_width}x{img_height}_{labelno}chars' print ( 'save path:' ,path) if not os.path.exists(path): os.makedirs(path) for i in range (count): now = str ( int (time.time())) text, image = gen_captcha_text_and_image() filename = text + '_' + now + '.png' image.save(path + os.path.sep + filename) print ( 'saved %d : %s' % (i + 1 ,filename)) if __name__ = = '__main__' : main() |
参考资料:
Python使用captcha制作验证码
到此这篇关于Python使用captcha库制作验证码,带参数输入的文章就介绍到这了,更多相关Python aptcha验证码内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/toopoo/article/details/124742619