Sage Cython: To run, type %attach PicDiagRotate.pyx
and OK()
at the Sage command line, or paste into a Sage notebook with %cython
as the first line.
#PicDiagRotate.pyx import numpy as np cimport numpy as np from scipy import misc DEF side=512 DEF halfside=side/2 cpdef OK(): cdef int i,w,row,loops,lps,L,R,t[3] cdef np.ndarray[np.uint8_t, ndim=3] a fn="tiger-09.png" #a 512x512 colour png a=misc.imread(fn) for w in xrange(1,halfside+1): for row in xrange(w,halfside+1): #row 1 is the 4 pixels at centre, 256 is around edge of pic. if row>1: #do twice more for each row outside the first loops=2 else: loops=1 for lps in xrange(loops): L=halfside-row R=side-1-L for i in xrange(3): #store temp pixel t[i]=a[L][L][i] for i in xrange(L,R,1): #move left column down a[L][i]=a[L][i+1] for i in xrange(L,R): #move top row to the left a[i][R]=a[i+1][R] for i in xrange(R,L,-1): #move right column up a[R][i]=a[R][i-1] for i in xrange(R,L,-1):#move bottom row to right a[i][L]=a[i-1][L] for i in xrange(3): #put temp back a[L+1][L][i]=t[i] print w misc.imsave('tpics/%05d.png' % w,a) #NB make a folder called 'tpics' first.