python在图片写文字,产生随机验证码序列号

来源:互联网 发布:大学生就业知乎 编辑:程序博客网 时间:2024/05/29 13:34

用PS很简单就可以做到,但是如何用Python完成呢?

一、思路:利用Python强大的图片处理库——Pillow

推荐阅读官方文档(Pillow (PIL Fork) 4.0.0 documentation

下面介绍今天会用到的模块:The ImageDraw Module,他的功能如下,

支持2D图像

创建绘画对象

基本绘画操作

  • 弧/弦/扇形 chord arc pieslice (bbox, strtAng, endAng)
  • 椭圆 ellipse (bbox)
  • 线段/多段线 line (L) draw.line(((60,60),(90,60), (90,90), (60,90), (60,60))) #draw a square
  • 点 point (xy) #单像素点很小看不清,实际中可用实心小圆代替
  • 多边形 polygon (L) draw.polygon([(60,60), (90,60), (90,90), (60,90)]) #draw a square
  • 矩形 rectangle (bbox) # first coord属于矩形, second coord不属于
  • 文字 text(xy,message,font=None) 绘制文字message,文本区域左上角坐标为xy
    drawable.text((10, 10), "Hello", fill=(255,0,0), font=None)
  • 文字大小 textsize(message,font=None) 给定文字message,返回所占像素(width,height)

可选参数

矢量字体支持

效果展示:





可以做到如微信,QQ头像上有多少未接收消息的样子
代码如下:


#coding:utf-8from PIL import Image, ImageDraw, ImageFont#打开当前目录下nanjing.jpg图片img = Image.open('nanjing.jpg')#画出这张图片draw = ImageDraw.Draw(img)#字大小为图小边的16分之一fontsize = int(min(img.size)/4)#字体样式,ttf是不失真的字myfont = ImageFont.truetype('C:/windows/fonts/Arial.ttf', size=fontsize)#字体颜色fillcolor = "#ff0000"width, height = img.size#右上角显示draw.text((img.size[0]-fontsize,0),'99', font=myfont, fill=fillcolor)img.save('result.jpg','jpeg')





产生随机4位验证码,或者序列号
产生了5组序列号
代码如下:
#coding:utf-8import string, random#激活码中的字符和数字field = string.ascii_letters + string.digits#获得4个字母和数字的随机组合def getRandom():    return "".join(random.sample(field,4))  #把列表中四个数连接起来变成字符串#生成的每个激活码中有几组:,每组加“-”def concatenate(group):    return "-".join([getRandom() for i in range(group)])#另一种写法#    con = []#    for i in range(group):#        con.append(getRandom())#    return "-".join(con)#生成n组激活码,默认一组4个def generate(n):    return [concatenate(4) for i in range(n)]print(generate(5))