设为首页 收藏本站
查看: 1969|回复: 0

[经验分享] 51. Python 数据处理(2)

[复制链接]

尚未签到

发表于 2018-8-7 08:25:27 | 显示全部楼层 |阅读模式
import random  
import string
  
from PIL import Image, ImageDraw, ImageFont, ImageFilter
  

  

  
class VerCode(object):
  
    def __init__(self):
  
        # 字体的位置,不同版本的系统会有不同
  
        self.font_path = 'consolai.ttf'
  
        # 生成几位数的验证码
  
        self.number = 4
  
        # 生成验证码图片的高度和宽度
  
        self.size = (100, 30)
  
        # 背景颜色,默认为白色
  
        self.bgcolor = (255, 255, 255)
  
        # 字体颜色,默认为蓝色
  
        self.fontcolor = (0, 0, 255)
  
        # 干扰线颜色。默认为红色
  
        self.linecolor = (255, 0, 0)
  
        # 是否要加入干扰线
  
        self.draw_line = True
  
        # 加入干扰线条数的上下限
  
        self.line_number = 20
  

  

  
    # 用来随机生成一个字符串
  
    def gene_text(self):
  
        self.source = list(string.ascii_letters)
  
        for self.index in range(0, 10):
  
            self.source.append(str(self.index))
  
        return ''.join(random.sample(self.source, self.number))  # number是生成验证码的位数
  

  

  
    # 用来绘制干扰线
  
    def gene_line(self, draw, width, height):
  
        self.begin = (random.randint(0, width), random.randint(0, height))
  
        self.end = (random.randint(0, width), random.randint(0, height))
  
        draw.line([self.begin, self.end], fill=self.linecolor)
  

  

  
    # 生成验证码
  
    def gene_code(self):
  
        self.width, self.height = self.size  # 宽和高
  
        self.image = Image.new('RGBA', (self.width, self.height), self.bgcolor)  # 创建图片
  
        self.font = ImageFont.truetype(self.font_path, 25)  # 验证码的字体
  
        self.draw = ImageDraw.Draw(self.image)  # 创建画笔
  
        self.text = self.gene_text()                 # 生成字符串
  
        self.font_width, self.font_height = self.font.getsize(self.text)
  
        self.draw.text(((self.width - self.font_width) / self.number, (self.height - self.font_height) / self.number), self.text, font=self.font, fill=self.fontcolor)  # 填充字符串
  
        if self.draw_line:
  
            for i in range(self.line_number):
  
                self.gene_line(self.draw, self.width, self.height)
  
    def effect(self):
  
        #self.image = self.image.transform((self.width + 20, self.height + 10), Image.AFFINE, (1, -0.3, 0, -0.1, 1, 0), Image.BILINEAR)  # 创建扭曲
  
        self.image = self.image.filter(ImageFilter.EDGE_ENHANCE_MORE)  # 滤镜,边界加强
  
        self.image.save('idencode.png')  # 保存验证码图片
  
        #self.image.show()
  

  

  
if __name__ == "__main__":
  
    vco = VerCode()
  
    vco.gene_code()
  
    vco.effect()

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-547919-1-1.html 上篇帖子: Day2 python基础 下篇帖子: Python(六)元组、集和、字典
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表