Pillow/PIL/ImageTransform.py

101 lines
2.8 KiB
Python
Raw Normal View History

2010-07-31 06:52:47 +04:00
#
# 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.
#
2013-03-07 20:20:28 +04:00
from PIL import Image
2010-07-31 06:52:47 +04:00
2014-08-26 17:47:10 +04:00
2010-07-31 06:52:47 +04:00
class Transform(Image.ImageTransformHandler):
def __init__(self, data):
self.data = data
2014-08-26 17:47:10 +04:00
2010-07-31 06:52:47 +04:00
def getdata(self):
return self.method, self.data
2014-08-26 17:47:10 +04:00
2010-07-31 06:52:47 +04:00
def transform(self, size, image, **options):
# can be overridden
method, data = self.getdata()
return image.transform(size, method, data, **options)
2014-08-26 17:47:10 +04:00
2010-07-31 06:52:47 +04:00
class AffineTransform(Transform):
2016-05-24 10:36:14 +03:00
"""
Define an affine image transform.
This function takes a 6-tuple (a, b, c, d, e, f) which contain the first
two rows from an affine transform matrix. For each pixel (x, y) in the
output image, the new value is taken from a position (a x + b y + c,
d x + e y + f) in the input image, rounded to nearest pixel.
This function can be used to scale, translate, rotate, and shear the
original image.
@def AffineTransform(matrix)
@param matrix A 6-tuple (a, b, c, d, e, f) containing the first two rows
from an affine transform matrix.
@see Image#Image.transform
"""
2010-07-31 06:52:47 +04:00
method = Image.AFFINE
2014-08-26 17:47:10 +04:00
2010-07-31 06:52:47 +04:00
class ExtentTransform(Transform):
2016-05-24 10:36:14 +03:00
"""
Define a transform to extract a subregion from an image.
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 (x0, y0) in the input image will end up at (0,0) in
the output image, and (x1, y1) at size.
This method can be used to crop, stretch, shrink, or mirror an arbitrary
rectangle in the current image. It is slightly slower than crop, but about
as fast as a corresponding resize operation.
@def ExtentTransform(bbox)
@param bbox A 4-tuple (x0, y0, x1, y1) which specifies two points in the
input image's coordinate system.
@see Image#Image.transform
"""
2010-07-31 06:52:47 +04:00
method = Image.EXTENT
2014-08-26 17:47:10 +04:00
2010-07-31 06:52:47 +04:00
class QuadTransform(Transform):
2016-05-24 10:36:14 +03:00
"""
Define a quad image transform.
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 (x0, y0, x1, y1, x2, y2, y3, y3) which contain the
upper left, lower left, lower right, and upper right corner of the
source quadrilateral.
@see Image#Image.transform
"""
2010-07-31 06:52:47 +04:00
method = Image.QUAD
2014-08-26 17:47:10 +04:00
2010-07-31 06:52:47 +04:00
class MeshTransform(Transform):
2016-05-24 10:36:14 +03:00
"""
Define a 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
"""
2010-07-31 06:52:47 +04:00
method = Image.MESH
2016-05-24 10:36:14 +03:00
# End of file