> This looks like a correct description of the sources: > > In Image.py: > > elif method == PERSPECTIVE: > # change argument order to match implementation > data = (data[2], data[0], data[1], > data[5], data[3], > data[4], > data[6], > data[7]) > > and then in Geometry.c: > > static int > perspective_transform(double* xin, double* yin, int x, int y, void* > data) > { > double* a = (double*) data; > double a0 = a[0]; double a1 = a[1]; double a2 = a[2]; > double a3 = a[3]; double a4 = a[4]; double a5 = a[5]; > double a6 = a[6]; double a7 = a[7]; > > xin[0] = (a0 + a1*x + a2*y) / (a6*x + a7*y + 1); > yin[0] = (a3 + a4*x + a5*y) / (a6*x + a7*y + 1); > > return 1; > } > > Something like this is almost what you what: > > im = im.transform(im.size, Image.PERSPECTIVE, (1, 0, 0, 0, 1, 0, -0.004, > 0)) > > But the problem really is that the top row of the image is at at y of > 0-- I think you want the origin of the image to be in the centre for > this to work properly. > > Is there a way to do that in PIL?
thanks for the reply. I have been able to use the Image.PERSPECTIVE transform via trial and error to get it to work properly for each transform. What I am really looking for I guess is a way to calculate the 8 int tuple to match the perspective change I am going for. For a given image there may be 5 elements that need to be 'painted' on with perspective. A database table will include the transform tuples based on the source image. So, by passing a starting image and a pattern image, the starting image can be covered with. Perhaps the best way to explain is visually.... http://seanberry.com/perspective.png What I need to know is how you take a surface like (P1, P5, P6, P2) and describe it with the 8 int tuple? I know that for the elements in the transform a - h they are as follows... (a, b, c, d, e, f, g, h) a / e is the ratio of height to width. For a = 2, e = 1 the output is half the width of the original. b is the tan of the angle of horizonal skew. e is the vertical skew equivalent of b. c and f are the x and y offsets respectively. g and h are the values that actually distort the image ranther than doing an affine transform... which is where I need the help... I appreciate any additional insight into this problem. This is a small step in a massive project I am working on and need to get past this part to move on to the next. I am also willing to $pay$ for help that results in a success. Thanks. -- http://mail.python.org/mailman/listinfo/python-list