用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-8
from 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')
产生了5组序列号
代码如下:
#coding:utf-8
import 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))