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.

Charcoal

New in version 0.5.3.

One of the artistic simulations, charcoal() can emulate a drawing on paper.

from wand.image import Image

with Image(filename="hummingbird.jpg") as left:
    with left.clone() as right:
        right.charcoal(radius=1.5, sigma=0.5)
        left.extent(width=left.width*2)
        left.composite(right, top=0, left=right.width)
    left.save(filename="hummingbird-charcoal.jpg")
Hummingbird - Charcoal

Despeckle

New in version 0.5.0.

Despeckling is one of the many techniques you can use to reduce noise on a given image. Also see Enhance.

from wand.image import Image

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

Edge

New in version 0.5.0.

Detects edges on black and white images with a simple convolution filter. If used with a color image, the transformation will be applied to each color-channel.

from wand.image import Image

with Image(filename="hummingbird.jpg") as left:
    with left.clone() as right:
        right.transform_colorspace("gray")
        right.edge(1)
        left.extent(width=left.width*2)
        left.composite(right, top=0, left=right.width)
    left.save(filename="hummingbird-edge.jpg")
Hummingbird - Edge

Emboss

New in version 0.5.0.

Generates a 3D effect that can be described as print reliefs. Like Edge, best results can be generated with grayscale image. Also see Shade.

from wand.image import Image

with Image(filename="hummingbird.jpg") as left:
    with left.clone() as right:
        right.transform_colorspace("gray")
        right.emboss(radius=3.0, sigma=1.75)
        left.extent(width=left.width*2)
        left.composite(right, top=0, left=right.width)
    left.save(filename="hummingbird-emboss.jpg")
Hummingbird - Emboss

Enhance

New 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")
Hummingbird - Enhance

Flip and flop

New 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:

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:

transform-flipped.jpg

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:

transform-flopped.jpg

Noise

New in version 0.5.3.

You can add random noise to an image. This operation can be useful when applied before a blur operation to defuse an image. The types of noise can be any of the following.

  • 'gaussian'
  • 'impulse'
  • 'laplacian'
  • 'multiplicative_gaussian'
  • 'poisson'
  • 'random'
  • 'uniform'

The amount of noise can be adjusted by passing an attenuate kwarg where the value can be between 0.0 and 1.0.

from wand.image import Image

with Image(filename="hummingbird.jpg") as left:
    with left.clone() as right:
        right.noise("laplacian", attenuate=1.0)
        left.extent(width=left.width*2)
        left.composite(right, top=0, left=right.width)
    left.save(filename="hummingbird-noise.jpg")
Hummingbird - Noise

Remap

New in version 0.5.3.

Remap replaces all pixels with the closest matching pixel found in the affinity reference image.

from wand.image import Image

with Image(filename="hummingbird.jpg") as left:
    with left.clone() as right:
        with Image(width=100, height=1, pseudo="plasma:") as affinity:
            right.remap(affinity)
        left.extent(width=left.width*2)
        left.composite(right, top=0, left=right.width)
    left.save(filename="hummingbird-remap.jpg")
Hummingbird - Remap

Rotation

New 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:

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:

transform-rotated-90.jpg

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:

transform-rotated-135.jpg

Shade

New in version 0.5.0.

Creates a 3D effect by simulating light from source where aziumth controls the X/Y angle, and elevation controls the Z angle. You can also determine of the resulting image should be transformed to grayscale by passing gray boolean.

from wand.image import Image

with Image(filename="hummingbird.jpg") as left:
    with left.clone() as right:
        right.shade(gray=True,
                    azimuth=286.0,
                    elevation=45.0)
        left.extent(width=left.width*2)
        left.composite(right, top=0, left=right.width)
    left.save(filename="hummingbird-shade.jpg")
Hummingbird - Shade

Sketch

New in version 0.5.3.

Simulates an artist sketch drawing. Also see Charcoal.

from wand.image import Image

with Image(filename="hummingbird.jpg") as left:
    with left.clone() as right:
        right.transform_colorspace("gray")
        right.sketch(0.5, 0.0, 98.0)
        left.extent(width=left.width*2)
        left.composite(right, top=0, left=right.width)
    left.save(filename="hummingbird-sketch.jpg")
Hummingbird - Sketch

Spread

New in version 0.5.3.

Spread replaces each pixel with the a random pixel value found near by. The size of the area to search for a new pixel can be controlled by defining a radius.

from wand.image import Image

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

Statistic

New in version 0.5.3.

Similare 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")
Hummingbird - Statistic