def quasicrystal(height, width):
image = Image.new("L",(width, height))
pixels = image.load()
frequency = rnd.random()*30+20 # frequency
phase = rnd.random()*2* math.pi # phase
rotation_count = rnd.randint(10,20) # of rotations
for kw inrange(width):
y =float(kw)/(width -1)*4* math.pi -2* math.pi
for kh inrange(height):
x =float(kh)/(height -1)*4* math.pi -2* math.pi
z =0.0for i inrange(rotation_count):
r = math.hypot(x, y)
a = math.atan2(y, x)+ i * math.pi *2.0/ rotation_count
z += math.cos(r * math.sin(a)* frequency + phase)
c =int(255-round(255* z / rotation_count))
pixels[kw, kh]= c # grayscale
return image.convert("RGBA")
通过图片创建背景
def image(height, width, image_dir):
images = os.listdir(image_dir)iflen(images)>0:
pic = Image.open(
os.path.join(image_dir, images[rnd.randint(0,len(images)-1)]))
# 不失真resize
if pic.size[0]< width:
pic = pic.resize([width,int(pic.size[1]*(width / pic.size[0]))], Image.ANTIALIAS)if pic.size[1]< height:
pic = pic.resize([int(pic.size[0]*(height / pic.size[1])), height], Image.ANTIALIAS)if pic.size[0]== width:
x =0else:
x = rnd.randint(0, pic.size[0]- width)if pic.size[1]== height:
y =0else:
y = rnd.randint(0, pic.size[1]- height)return pic.crop((x, y, x + width, y + height))else:
raise Exception("No images where found in the images folder!")