专栏首页直播知识短视频商城源码,制作彩色验证码
原创

短视频商城源码,制作彩色验证码

from random import choice, randint, randrange
import string
from PIL import Image, ImageDraw, ImageFont
#返回length长度随机字母和数字
def selectedCharacters(length):
    result = ''.join(choice(string.ascii_letters+string.digits) for _ in range(length))
    return result
#返回随机色
def getColor():
    r = randint(0,255)
    g = randint(0,255)
    b = randint(0,255)
    return (r,g,b)
def makeIMG():
    #图片属性
    size=[200,100]
    characterNumber=6
    bgcolor=(255,255,255)
    imageTemp = Image.new('RGB', size, bgcolor)
    draw = ImageDraw.Draw(imageTemp)
    text = selectedCharacters(characterNumber)
    font = ImageFont.truetype('c:\\windows\\fonts\\BRADHITC.TTF', 48)
    width, height = draw.textsize(text, font)
    #判断尺寸
    if width+2*characterNumber>size[0] or height>size[1]:
        print('Dimension are not legitimate')
        return
    # 随机字符位置
    startX = 0
    widthEachCharater = width//characterNumber
    for i in range(characterNumber):
        startX += widthEachCharater + 1
        position = (startX, (size[1]-height)//2+randint(-5,5))
        draw.text(xy=position, text=text[i], font=font, fill=getColor())
    # 对像素位置进行微调,实现扭曲的效果
    imageFinal = Image.new('RGB', size, bgcolor)
    pixelsFinal = imageFinal.load()
    pixelsTemp = imageTemp.load()
    for y in range(size[1]):
        offset = randint(-1,0)
        for x in range(size[0]):
            newx = x+offset
            if newx>=size[0]:
                newx = size[0]-1
            elif newx<0:
                newx = 0
            pixelsFinal[newx,y] = pixelsTemp[x,y]
    # 随机色像素点            
    draw = ImageDraw.Draw(imageFinal)
    for i in range(int(size[0]*size[1]*0.05)):
        draw.point((randrange(size[0]), randrange(size[1])), fill=getColor())
    # 绘制5条随机干扰直线
    for i in range(5):
        start = (0, randrange(size[1]))
        end = (size[0], randrange(size[1]))
        draw.line([start, end], fill=getColor(), width=1)
    # 绘制5条随机弧线
    for i in range(5):
        start = (-50, -50)
        end = (size[0]+10, randint(0, size[1]+10))
        draw.arc(start+end, 0, 360, fill=getColor())
    imageFinal.save("image.jpg")
    imageFinal.show()
makeIMG()                   

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 短视频直播源码,iOS图片去背景

    yunbaokeji柯基
  • PHP短视频源码,实现背景的镂空文字

    以上就是PHP短视频源码,实现背景的镂空文字相关的代码, 更多内容欢迎关注之后的文章

    yunbaokeji柯基
  • 短视频APP制作,设置高斯模糊

    yunbaokeji柯基
  • 55. 比较字符串

    比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母 样例 给出 A = "ABCD" B = "ACD",返回 tru...

    和蔼的zhxing
  • C语言中size_t和size_type 的区别

    1)size_tsize_t是用于数组的下标值类型,也可以用来“接收”sizeof操作符的返回值。

    ccf19881030
  • [开发技巧]·AdaptivePooling与Max/AvgPooling相互转换

    自适应池化Adaptive Pooling是PyTorch的一种池化层,根据1D,2D,3D以及Max与Avg可分为六种形式。

    小宋是呢
  • 递归与分治之棋盘覆盖问题

    在一个2^k * 2^k个方格组成的棋盘中,若有一个方格与其他方格不同,则称该方格为一特殊方格,且称该棋盘为一个特殊棋盘。 显然特殊方格在棋盘上出现的位置有4^...

    欠扁的小篮子
  • C 库函数 - fread()

    C 库函数 size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream) 从给定流 stre...

    心跳包
  • pytorch之Resize()函数具体使用详解

    CLASS torchvision.transforms.Resize(size, interpolation=2)

    砸漏
  • JS的函数调用栈有多深?

    译者按: 有时候会遇到 Maximum call stack size exceeded 的问题,本文教你 stack size 的计算方法。

    Fundebug

扫码关注云+社区

领取腾讯云代金券