import numpy as np from scipy import misc image = misc.imread("input.png") N = min(image.shape[:-1]) image = image[:N, :N, :] old_image = image.copy() this_image = np.zeros(image.shape) i = 0 print() while((this_image != image).any()): for x in range(N): for y in range(N): this_image[x, y] = old_image[(2*x + y) % N, (x + y) % N] old_image = this_image.copy() i += 1 print(i / (3*N), "%", " "*15, end="\r", flush=True) misc.imsave("output/{}.png".format(i), this_image) print()