#Avatar Generator v0.3 #3/30/22 #Basic idea is a 16x16x16 image #(256x256 or 16x16 with 16x16 pixel cells) #take a string (putatively a username) #do some goofy math to make it fit >256 bits #read the math to make a picture ################################################### #began in 2.7 #tweaked colors and made small names more robust #converted to 3.9.5 and renamed from PIL import Image #import Pillow, a fork of the Python Image Library def names_import(): #take a text file of newlined strings and make them into a list of names txtfile=input("Name List? :\n") with open(txtfile) as names: namelist=[] for item in names: namelist.append(item.strip()) return namelist def bin_string(name): #awkward math implimented more awkwardly. Makes small strings into very large strings for later. n1=[] for letter in name: n1.append(ord(letter)) #turn letters into numbers n2="".join(str(i) for i in n1) #turn the numbers into a big number n2=str(int(n2)**32) #turn the big number into a BIGGER number n3=list(bin(ord(letter))[2:] for letter in n2) #turn that bigger number into binary string name_str="".join(str(i) for i in n3) return name_str def ava_build(data, name): #using PIL to make the raw avatar pix=[] img_holder=Image.new(mode="RGB", size=(256,256), color=(0,0,0)) #background image for i in range(0,256): bm=(((int(len(data)//256)))*i) #awkward scripting to pull data from entire length regardless of length if data[bm:bm-2:-1]=="11" or data[bm:bm-2:-1]=="00": #changeable patterns to look for pix.append(Image.new(mode="RGB", size=(16,16), color=((ord(name[0])*4)%256,(ord(name[(len(name)%3)-1])*4)%256,(ord(name[-1])*4)%256))) else: pix.append(Image.new(mode="RGB", size=(16,16), color=(255,255,255))) for i in range(0,256): img_holder.paste(pix[i],((i%16)*16,(int(i//16))*16)) return img_holder def flip(img): #technically optional. This version takes the upper left quad and mirrors it around. Can tweak for a single mirror imgcrop=img.crop((0,0,128,128)) imgcrop1=imgcrop.transpose(Image.FLIP_LEFT_RIGHT) img.paste(imgcrop1,(128,0)) imgcrop2=imgcrop.transpose(Image.FLIP_TOP_BOTTOM) img.paste(imgcrop2,(0,128)) imgcrop1=imgcrop1.transpose(Image.FLIP_TOP_BOTTOM) img.paste(imgcrop1,(128,128)) return img def avatars(): #bring everything together namelist=names_import() for name in namelist: flip(ava_build(bin_string(name),name)).save(name+"_q.jpg") avatars()