diff options
Diffstat (limited to 'lib/Python/Lib/PIL/ImageTransform.py')
-rw-r--r-- | lib/Python/Lib/PIL/ImageTransform.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/lib/Python/Lib/PIL/ImageTransform.py b/lib/Python/Lib/PIL/ImageTransform.py new file mode 100644 index 000000000..81f90502c --- /dev/null +++ b/lib/Python/Lib/PIL/ImageTransform.py @@ -0,0 +1,103 @@ +# +# The Python Imaging Library. +# $Id$ +# +# transform wrappers +# +# History: +# 2002-04-08 fl Created +# +# Copyright (c) 2002 by Secret Labs AB +# Copyright (c) 2002 by Fredrik Lundh +# +# See the README file for information on usage and redistribution. +# + +from PIL import Image + + +class Transform(Image.ImageTransformHandler): + def __init__(self, data): + self.data = data + + def getdata(self): + return self.method, self.data + + def transform(self, size, image, **options): + # can be overridden + method, data = self.getdata() + return image.transform(size, method, data, **options) + + +## +# Define an affine image transform. +# <p> +# This function takes a 6-tuple (<i>a, b, c, d, e, f</i>) which +# contain the first two rows from an affine transform matrix. For +# each pixel (<i>x, y</i>) in the output image, the new value is +# taken from a position (a <i>x</i> + b <i>y</i> + c, +# d <i>x</i> + e <i>y</i> + f) in the input image, rounded to +# nearest pixel. +# <p> +# This function can be used to scale, translate, rotate, and shear the +# original image. +# +# @def AffineTransform(matrix) +# @param matrix A 6-tuple (<i>a, b, c, d, e, f</i>) containing +# the first two rows from an affine transform matrix. +# @see Image#Image.transform + + +class AffineTransform(Transform): + method = Image.AFFINE + + +## +# Define a transform to extract a subregion from an image. +# <p> +# Maps a rectangle (defined by two corners) from the image to a +# rectangle of the given size. The resulting image will contain +# data sampled from between the corners, such that (<i>x0, y0</i>) +# in the input image will end up at (0,0) in the output image, +# and (<i>x1, y1</i>) at <i>size</i>. +# <p> +# This method can be used to crop, stretch, shrink, or mirror an +# arbitrary rectangle in the current image. It is slightly slower than +# <b>crop</b>, but about as fast as a corresponding <b>resize</b> +# operation. +# +# @def ExtentTransform(bbox) +# @param bbox A 4-tuple (<i>x0, y0, x1, y1</i>) which specifies +# two points in the input image's coordinate system. +# @see Image#Image.transform + +class ExtentTransform(Transform): + method = Image.EXTENT + + +## +# Define an quad image transform. +# <p> +# Maps a quadrilateral (a region defined by four corners) from the +# image to a rectangle of the given size. +# +# @def QuadTransform(xy) +# @param xy An 8-tuple (<i>x0, y0, x1, y1, x2, y2, y3, y3</i>) which +# contain the upper left, lower left, lower right, and upper right +# corner of the source quadrilateral. +# @see Image#Image.transform + +class QuadTransform(Transform): + method = Image.QUAD + + +## +# Define an mesh image transform. A mesh transform consists of one +# or more individual quad transforms. +# +# @def MeshTransform(data) +# @param data A list of (bbox, quad) tuples. +# @see Image#Image.transform + +class MeshTransform(Transform): + method = Image.MESH |