验证码python代码怎么写,python做验证码

  验证码python代码怎么写,python做验证码

  验证码是web开发中不可或缺的元素,python提供了很多验证码模块,帮助你快速生成各种验证码。你知道验证码生成的原理吗?所谓知其然,更知其所以然。今天给大家介绍一下验证码:

  演示环境

  操作系统:windows10

  Python版本:python 3.7

  代码编辑:pycharm 2018.2

  使用:枕头的第三方模块。

  验证码的必须元素

  1.一幅画

  2.文本

  3.干扰元素

  线干扰

  点干涉

  熟悉pillow库

  既然需要使用枕头库来制作验证码,那么首先让我们熟悉一下需要使用的方法。

  1.Image.new():这个方法可以生成一个有三个参数的图片。

  模式:色彩空间模式,可以是‘RGBA’、‘RGB’、‘L’等。

  :图片的大小,接收两个整数的祖先。

  :图片的填充颜色可以是红色、绿色等。或者rgb的三个整数的祖先。也就是背景色

  fromPILimportImage

  Captcha=image.new (RGB ,(1080,900),(255,255,255))上面的代码创建了一个颜色空间模式为1080*900,背景为白色的图片。

  2.Image.save():将图片保存在本地。

  FP:本地文件名

  格式:可选参数,指定文件的后缀名称。

  fromPILimportImage

  captcha=Image.new(RGB ,(1080,900),(255,255,255))

  # captcha . save(“captcha . png”)

  Captcha.save (captcha ,format= png )以上两种方法的保存效果是一样的。

  3.Image.show():要显示图片,会调用电脑自带的显示图片的软件。

  4.ImageFont.truetype():加载字体文件。生成一个字体对象。

  fromPILimportImageFont

  #字体文件路径字体大小

  font=image font . truetype( sim kai . TTF ,16) 5。ImageDraw。Draw():生成画笔对象。

  fromPILimportImage,ImageDraw

  captcha=Image.new(RGB ,(1080,900), red )

  Draw=ImageDraw。Draw(captcha)在captcha的图像上创建一个画笔,我们在这个图像中

  上画任何东西都会使用这个画笔对象。

  6、ImageDraw.Draw().text():在图片上绘制给定的字符

  

fromPILimportImage,ImageDraw,ImageFont

  captcha=Image.new('RGB',(1080,900),'red')

  font=ImageFont.truetype('simkai.ttf',16)

  draw=ImageDraw.Draw(captcha)

  #字符绘制位置绘制的字符制定字体字符颜色

  draw.text((0,0),'helloworld',font=font,fill='black')

7、ImageDraw.Draw().line():在图片上绘制线条

  

fromPILimportImage,ImageDraw,ImageFont

  captcha=Image.new('RGB',(1080,900),'red')

  draw=ImageDraw.Draw(captcha)

  #线条起点线条终点

  draw.line([(0,0),(1080,900)],fill='black')

8、ImageDraw.Draw().point():在图片上绘制点

  

fromPILimportImage,ImageDraw,ImageFont

  captcha=Image.new('RGB',(1080,900),'red')

  font=ImageFont.truetype('simkai.ttf',16)

  draw=ImageDraw.Draw(captcha)

  #点的位置颜色

  draw.point((500,500),fill='black')

制作我们的验证码我们就会使用到上面的方法。当然,pillow肯定不止这些方法,这里我们就只列举这些了。

  制作验证码

  1、首先我们定义一个类,初始化一些需要的参数。

  

importstring

  classCaptcha():

  '''

  captcha_size:验证码图片尺寸

  font_size:字体大小

  text_number:验证码中字符个数

  line_number:线条个数

  background_color:验证码的背景颜色

  sources:取样字符集。验证码中的字符就是随机从这个里面选取的

  save_format:验证码保存格式

  '''

  def__init__(self,captcha_size=(150,100),font_size=30,text_number=4,line_number=4,background_color=(255,

  255,255),sources=None,save_format='png'):

  self.text_number=text_number

  self.line_number=line_number

  self.captcha_size=captcha_size

  self.background_color=background_color

  self.font_size=font_size

  self.format=save_format

  ifsources:

  self.sources=sources

  else:

  self.sources=string.ascii_letters+string.digits

这里说一下string模块。

  ·string.ascii_letters: 得到a-zA-Z所有字符

  ·string.digits: 得到0-9所有数字

  2、随机从sources获取字符

  

importrandom

  defget_text(self):

  text=random.sample(self.sources,k=self.text_number)

  return''.join(text)

random.sample()方法:从第一个参数中随机获取字符。获取个数有第二个参数指定。

  3、随机获取绘制字符的颜色

  

defget_font_color(self):

  font_color=(random.randint(0,150),random.randint(0,150),random.randint(0,150))

  returnfont_color

4、随机获取干扰线条的颜色

  

defget_line_color(self):

  line_color=(random.randint(0,250),random.randint(0,255),random.randint(0,250))

  returnline_color

5、编写绘制文字的方法

  

defdraw_text(self,draw,text,font,captcha_width,captcha_height,spacing=20):

  '''

  在图片上绘制传入的字符

  :paramdraw:画笔对象

  :paramtext:绘制的所有字符

  :paramfont:字体对象

  :paramcaptcha_width:验证码的宽度

  :paramcaptcha_height:验证码的高度

  :paramspacing:每个字符的间隙

  :return:

  '''

  #得到这一窜字符的高度和宽度

  text_width,text_height=font.getsize(text)

  #得到每个字体的大概宽度

  every_value_width=int(text_width/4)

  #这一窜字符的总长度

  text_length=len(text)

  #每两个字符之间拥有间隙,获取总的间隙

  total_spacing=(text_length-1)*spacing

  iftotal_spacing+text_width>=captcha_width:

  raiseValueError("字体加中间空隙超过图片宽度!")

  

  #获取第一个字符绘制位置

  start_width=int((captcha_width-text_width-total_spacing)/2)

  start_height=int((captcha_height-text_height)/2)

  #依次绘制每个字符

  forvalueintext:

  position=start_width,start_height

  print(position)

  #绘制text

  draw.text(position,value,font=font,fill=self.get_font_color())

  #改变下一个字符的开始绘制位置

  start_width=start_width+every_value_width+spacing

6、绘制线条的方法

  

defdraw_line(self,draw,captcha_width,captcha_height):

  '''

  绘制线条

  :paramdraw:画笔对象

  :paramcaptcha_width:验证码的宽度

  :paramcaptcha_height:验证码的高度

  :return:

  '''

  #随机获取开始位置的坐标

  begin=(random.randint(0,captcha_width/2),random.randint(0,captcha_height))

  #随机获取结束位置的坐标

  end=(random.randint(captcha_width/2,captcha_width),random.randint(0,captcha_height))

  draw.line([begin,end],fill=self.get_line_color())

7、绘制小圆点

  

defdraw_point(self,draw,point_chance,width,height):

  '''

  绘制小圆点

  :paramdraw:画笔对象

  :parampoint_chance:绘制小圆点的几率概率为point_chance/100

  :paramwidth:验证码宽度

  :paramheight:验证码高度

  :return:

  '''

  #按照概率随机绘制小圆点

  forwinrange(width):

  forhinrange(height):

  tmp=random.randint(0,100)

  iftmp<point_chance:

  draw.point((w,h),fill=self.get_line_color())

8、制作验证码

  

defmake_captcha(self):

  #获取验证码的宽度,高度

  width,height=self.captcha_size

  #生成一张图片

  captcha=Image.new('RGB',self.captcha_size,self.background_color)

  #获取字体对象

  font=ImageFont.truetype('simkai.ttf',self.font_size)

  #获取画笔对象

  draw=ImageDraw.Draw(captcha)

  #得到绘制的字符

  text=self.get_text(

  #绘制字符

  self.draw_text(draw,text,font,width,height)

  #绘制线条

  foriinrange(self.line_number):

  self.draw_line(draw,width,height)

  #绘制小圆点10是概率10/100,10%的概率

  self.draw_point(draw,10,width,height)

  #保存图片

  captcha.save('captcha',format=self.format)

  #显示图片

  captcha.show()

这样,我们就生成了我们的图片验证码了,效果图:

  代码已全部上传至Github:https://github.com/MiracleYoung/You-are-Pythonista/tree/master/PythonExercise/App/

  captcha_project

  众多python培训视频,尽在盛行IT软件开发工作室,欢迎在线学习!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • qq短信验证码发送失败怎么回事,qq验证码失败是怎么回事
  • ,,使用阿里大于(大鱼)平台进行发送手机验证码的流程
  • ,,SpringSceurity实现短信验证码登陆
  • android读取短信验证码,
  • android读取短信验证码,,Android使用MobSDK短信验证
  • android自动获取短信验证码功能在哪,安卓自动获取短信验证码
  • android自动获取短信验证码功能在哪,android自动获取短信验证码功能失效,Android自动获取短信验证码功能
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现
  • android实现短信验证码自动填写功能是什么,安卓短信验证码自动填充 实现,Android实现短信验证码自动填写功能
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码
  • android如何通过手机自动获取短信验证码信息,安卓自动获取短信验证码,Android如何通过手机自动获取短信验证码
  • ,,python网络爬虫实现发送短信验证码的方法
  • ,,Python实现滑块拼图验证码详解
  • ,,python3 破解 geetest(极验)的滑块验证码功能
  • 发验证码不在桌面显示,验证码能收到桌面上不显示怎么回事
  • 留言与评论(共有 条评论)
       
    验证码: