# Transformation

Note

The image `transform.jpg` used in this docs is taken by Megan Trace, and licensed under CC BY-NC 2.0. It can be found the original photography from Flickr.

## Enhance

Added in version 0.5.0.

Reduce the noise of an image by applying an auto-filter. Also see Despeckle.

    from wand.image import Image

    with Image(filename="hummingbird.jpg") as left:
        with left.clone() as right:
            right.enhance()
            left.extent(width=left.width*2)
            left.composite(right, top=0, left=right.width)
        left.save(filename="hummingbird-enhance.jpg")

## Flip and flop

Added in version 0.3.0.

You can make a mirror image by reflecting the pixels around the central x- or y-axis. For example, where the given image `transform.jpg`:

The following code flips the image using `Image.flip()` method:

    from wand.image import Image

    with Image(filename='transform.jpg') as image:
        with image.clone() as flipped:
            flipped.flip()
            flipped.save(filename='transform-flipped.jpg')

The image `transform-flipped.jpg` generated by the above code looks like:

As like `flip()`, `flop()` does the same thing except it doesn’t make a vertical mirror image but horizontal:

    from wand.image import Image

    with Image(filename='transform.jpg') as image:
        with image.clone() as flopped:
            flopped.flop()
            flopped.save(filename='transform-flopped.jpg')

The image `transform-flopped.jpg` generated by the above code looks like:

## Rotation

Added in version 0.1.8.

`Image` object provides a simple method to rotate images: `rotate()`. It takes a `degree` which can be 0 to 359. (Actually you can pass 360, 361, or more but it will be the same to 0, 1, or more respectively.)

For example, where the given image `transform.jpg`:

The below code makes the image rotated 90° to right:

    from wand.image import Image

    with Image(filename='transform.jpg') as image:
        with image.clone() as rotated:
            rotated.rotate(90)
            rotated.save(filename='transform-rotated-90.jpg')

The generated image `transform-rotated-90.jpg` looks like:

If `degree` is not multiples of 90, the optional parameter `background` will help (its default is transparent):

    from wand.color import Color
    from wand.image import Image

    with Image(filename='transform.jpg') as image:
        with image.clone() as rotated:
            rotated.rotate(135, background=Color('rgb(229,221,112)'))
            rotated.save(filename='transform-rotated-135.jpg')

The generated image `transform-rotated-135.jpg` looks like:

## Statistic

Added in version 0.5.3.

Similar to Spread, but replaces each pixel with the result of a mathematical operation performed against neighboring pixel values.

The type of statistic operation can be any of the following.

> - `'gradient'`

> - `'maximum'`

> - `'mean'`

> - `'median'`

> - `'minimum'`

> - `'mode'`

> - `'nonpeak'`

> - `'root_mean_square'`

> - `'standard_deviation'`

The size neighboring pixels to evaluate can be defined by passing `width`, and `height` kwargs.

    from wand.image import Image

    with Image(filename="hummingbird.jpg") as left:
        with left.clone() as right:
            right.statistic("median", width=8, height=5)
            left.extent(width=left.width*2)
            left.composite(right, top=0, left=right.width)
        left.save(filename="hummingbird-statistic.jpg")