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 删除。
我来说两句