python PIL模块生成随机图片

生成字符串代码:

import os

if __name__ == '__main__':
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cnblog.settings")
    import django
    django.setup()

import PIL
from PIL import Image #生成图片
from PIL import ImageDraw #控制图片内容
from PIL import ImageFont #控制字体样式

import random

def random_color(): #生成一个0-255的三位数组 用以控制背景颜色
    return (random.randint(0,255),random.randint(0,255),random.randint(0,255))

image = Image.new('RGB',(250,40),random_color()) #生成一个图片(模式,图片尺寸,颜色(用之前调好的随机颜色就好))
draw=ImageDraw.Draw(image) #生成一个编辑对象 可以对image对象添加各种属性 实际是对刚才生成的image对象做编辑
#draw有很多功能
# draw.text() 往里面添加文本
# draw.line() 往里面添加线
# draw.point() 往里添加噪点
font=ImageFont.truetype("blog/static/font/kumo.ttf",size=32) #字体样式(字体样式文件(ttf)的django路径,尺寸)
temp=[] #生成的随机字符串的列表
for i in range(5): #生成随机字符
    random_num = str(random.randint(0, 9))
    random_low_alpha = chr(random.randint(97, 122))
    random_upper_alpha = chr(random.randint(65, 90))
    random_char = random.choice([random_num, random_low_alpha, random_upper_alpha])
    draw.text((24 + i * 36, 0), random_char, random_color(), font=font) #生成字体(位置,字符,颜色,字体)
    temp.append(random_char)

    # 噪点噪线
    width = 250
    height = 40
    for i in range(100):
        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), fill=random_color())  # 画线((起始点xy坐标,终止点xy坐标),颜色)

    for i in range(400):
        draw.point([random.randint(0, width), random.randint(0, height)], fill=random_color())  # 画点(([点坐标]),颜色)
        x = random.randint(0, width)
        y = random.randint(0, height)
        draw.arc((x, y, x + 4, y + 4), 0, 90, fill=random_color())  # 画弧((起始点xy坐标,终止点xy坐标),弧度的起始,弧度的终止,颜色)

from io import BytesIO
f = BytesIO() #在内存中开辟一块动态地址
image.save(f,"png") #图片对象保存 (地址,格式)
data = f.getvalue() #获取之前内存地址中的文件内容
f.close() #管理内存 不占地




valid_str="".join(temp) #生成的随机字符串的拼接 为和用户输入内容做比对用
print("valid_str",valid_str)
posted @ 2018-04-14 16:41  大量子  阅读(1305)  评论(0编辑  收藏  举报