python通过pil生成图片验证码详解编程语言

# -*- coding: utf-8 -*- 
#导入三个模块 
import Image,ImageDraw,ImageFont 
import random 
import math 
'''基本功能''' 
#图片宽度 
width = 100 
#图片高度 
height = 40 
#背景颜色 
bgcolor = (255,255,255) 
#生成背景图片 
image = Image.new('RGB',(width,height),bgcolor) 
#加载字体 
font = ImageFont.truetype('FreeSans.ttf',30) 
#字体颜色 
fontcolor = (0,0,0) 
#产生draw对象,draw是一些算法的集合 
draw = ImageDraw.Draw(image) 
#画字体,(0,0)是起始位置 
draw.text((0,0),'1234',font=font,fill=fontcolor) 
#释放draw 
del draw 
#保存原始版本 
image.save('1234_1.jpeg') 
'''演示扭曲,需要新建一个图片对象''' 
#新图片 
newImage = Image.new('RGB',(width,height),bgcolor) 
#load像素 
newPix = newImage.load() 
pix = image.load() 
offset = 0 
for y in range(0,height): 
    offset += 1 
    for x in range(0,width): 
        #新的x坐标点 
        newx = x + offset 
        #你可以试试如下的效果 
        #newx = x + math.sin(float(y)/10)*10 
        if newx < width:                        
            #把源像素通过偏移到新的像素点 
            newPix[newx,y] = pix[x,y] 
#保存扭曲后的版本            
newImage.save('1234_2.jpeg') 
'''形变一下''' 
#x1 = ax+by+c 
#y1 = dx+ey+f 
newImage = image.transform((width+30,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0)) 
newImage.save('1234_3.jpeg') 
'''画干扰线,别画太多,免得用户都看不清楚'''        
#创建draw,画线用 
draw = ImageDraw.Draw(newImage) 
#线的颜色 
linecolor= (0,0,0) 
for i in range(0,15): 
    #都是随机的 
    x1 = random.randint(0,width) 
    x2 = random.randint(0,width) 
    y1 = random.randint(0,height) 
    y2 = random.randint(0,height) 
    draw.line([(x1, y1), (x2, y2)], linecolor)            
              
#保存到本地 
newImage.save('1234_4.jpeg')

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/8353.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论