ich habe eine PIL-Funktion geschrieben die aus einem Bild verschieden große Stücke ausschneidet, diese dann vertauscht und wieder einfügt.
Das ganze wird mit Hilfe der random Funktionen bewerkstelligt. Die Stücke sind in der Breite identisch, und gehen über die gesamte Bildbreite. Die Höhe wird via random bestimmt. Auch die Anzahl der Stücke ist variabel. Das Script funktioniert ganz gut, bis auf die Tatsache das ich immer wieder Pixelversatz zwischen meinen Stücken habe. Will heißen das zwischen den Stücken immer wieder 1 Pixel platz ist obwohl sie aneinader liegen sollen. Hat jemand eine Idee woran es liegen könnte? Bzw. vielleicht hat jemand eine Idee wie ich das ganze schöner lösen könnte?
Code: Alles auswählen
def rand_crop_shuffle(im):
size = im.size
array = []
height = 0
array2 = []
dict = []
im_list = []
paste = []
while True:
array.append(height)
rand_height = random.randint(0,size[1]-1)
height = height + rand_height
# array2.append(rand_height - 1)
if(height >= size[1]):
array2.append((size[1] - (height - rand_height)) + 1)
break;
else:
array2.append(rand_height)
for i in range(len(array)):
if(i < len(array)-1):
end_x = array[i+1]-1
else:
end_x = size[1]
dict.append([0,array[i],size[0],end_x])
for j in range(len(dict)):
im_list.append([array2[j],im.crop(dict[j])])
# print dict[j]
print(array)
# im33.paste(im.crop(dict[j]), dict[j])
im33 = Image.new(im.mode,size)
paste_height = -1
paste_height_end = im_list[0][0]
random.shuffle(im_list)
for k in range(len(im_list)):
paste_height_end = paste_height + im_list[k][0]
box2 = [0,paste_height + 1,size[0],paste_height_end]
paste.append(box2)
im33.paste(im_list[k][1], box2)
paste_height = paste_height_end
return im33
im_result = rand_crop_shuffle(im2)
im_result.save("result22.jpg", "JPEG",quality=100)
