python随机生成英文字符串_Python练习第六题,生成随机字母

第六题:使用 Python 生成类似于下图中的字母验证码图片

1、思路:随机生成一位字母

参考文档string - 常用字符串操作stringstring.ascii_letters

小写字母 'abcdefghijklmnopqrstuvwxyz'.该值不依赖于本地设置以及不会被修改。string.ascii_uppercase

大写字母 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'.该值不依赖于本地设置以及不会被修改。

2、具体操作(利用string和random)

>>> import string

>>> string.ascii_letters

'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

>>> import random

>>> random.choice(string.ascii_uppercase)

'G'参考Generate a random letter in Python

首先生成52位大写及小写字母,再利用random提取其中一位便成为随即字母。

3、完整代码

import string

import random

from PIL import Image, ImageDraw, ImageFont, ImageFilter

#captcha size

size = (240, 60)

#random chars

def gen_random():

charlist = [random.choice(string.ascii_uppercase) for i in range(4)]

chars = ''.join(charlist)

return chars

def random_color():

return (random.randint(0, 255), random.randint(0, 255), \

random.randint(0, 255))

def gen_captcha():

im = Image.new('RGBA', size, color = 0)

draw = ImageDraw.Draw(im)

#background

for w in range(size[0]):

for h in range(size[1]):

draw.point((w, h), random_color())

#draw text

chars = gen_random()

#font and size

fnt = ImageFont.truetype('arial.ttf', int(size[1] * 0.8))

x = 0

y = size[1] * 0.1

for i in range(4):

x += size[0] * 0.2

draw.text((x, y), chars[i], font = fnt, fill = random_color())

#blur

im = im.filter(ImageFilter.BLUR)

im.save('captchar.jpg')

im.show()

if __name__ == '__main__':

gen_captcha()

看看运行结果

更多解法:

from PIL import Image, ImageDraw, ImageFont, ImageFilter

import random

def rndChar():

return chr(random.randint(65, 90))

def rndColor(type):

if type == 1:

return (random.randint(0, 125), random.randint(0, 125), random.randint(0, 125))

elif type == 2:

return (random.randint(126, 255), random.randint(126, 255), random.randint(126, 255))

fontSize = 25

width = int(fontSize * 1.2 * 4)

height = int(fontSize * 1.2)

# 创建图像

image = Image.new('RGB', (width, height), (255, 255, 255))

# 创建字体,本地字体存放位置

font = ImageFont.truetype("C:\Windows\Fonts\Arial.ttf", 20)

draw = ImageDraw.Draw(image)

# 填满整个画面

for x in range(width):

for y in range(height):

draw.point((x, y), fill = rndColor(1))

# 输出字母

for t in range(4):

draw.text((t * height + fontSize * 0.2, fontSize * 0.2), rndChar(), font = font, fill = rndColor(2))

if __name__ == '__main__':

image.show()

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------花了半天时间使用利用HEXO搭建了自己的博客崔斯特的博客

感兴趣的可以点进去看看,这是博客最开始的样子,还没有往里面写什么东西。不过页面简洁、看着很舒服~~

欢迎关注我的博客

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值