# The PIL.ImageChops Module

The ImageChops module contains a number of arithmetical image operations, called channel operations ("chops"). These can be used for various purposes, including special effects, image compositions, algorithmic painting, and more.

At this time, channel operations are only implemented for 8-bit images (e.g. "L" and "RGB").

Most channel operations take one or two image arguments and returns a new image. Unless otherwise noted, the result of a channel operation is always clipped to the range 0 to MAX (which is 255 for all modes supported by the operations in this module).

## Module Contents

add(image1, image2, scale=1.0, offset=0) [#]

  Add images ((image1 + image2) / scale + offset).

  Adds two images, dividing the result by scale and adding the offset. If omitted, scale defaults to 1.0, and offset to 0.0.

  image1
  image1
  Returns:
add_modulo(image1, image2) [#]

  Add images without clipping ((image1 + image2) % MAX).

  Adds two images, without clipping the result.

  image1
  image1
  Returns:
blend(image1, image2, alpha) [#]

  Blend images using constant transparency weight.

  Same as the blend function in the Image module.

composite(image1, image2, mask) [#]

  Create composite using transparency mask.

  Same as the composite function in the Image module.

constant(image, value) [#]
  image
  value
  Returns:
darker(image1, image2) [#]

  Compare images, and return darker pixel value (min(image1, image2)).

  Compares the two images, pixel by pixel, and returns a new image containing the darker values.

  image1
  image1
  Returns:
difference(image1, image2) [#]

  Calculate absolute difference (abs(image1 - image2)).

  Returns the absolute value of the difference between the two images.

  image1
  image1
  Returns:
duplicate(image) [#]
  image
  Returns:
invert(image) [#]
  image
  Returns:
lighter(image1, image2) [#]

  Compare images, and return lighter pixel value (max(image1, image2)).

  Compares the two images, pixel by pixel, and returns a new image containing the lighter values.

  image1
  image1
  Returns:
logical_and(image1, image2) [#]
logical_or(image1, image2) [#]
logical_xor(image1, image2) [#]
multiply(image1, image2) [#]

  Superimpose positive images (image1 * image2 / MAX).

  Superimposes two images on top of each other. If you multiply an image with a solid black image, the result is black. If you multiply with a solid white image, the image is unaffected.

  image1
  image1
  Returns:
offset(image, xoffset, yoffset=None) [#]

  Offset image data.

  Returns a copy of the image where data has been offset by the given distances. Data wraps around the edges. If yoffset is omitted, it is assumed to be equal to xoffset.

  image
  xoffset
  yoffset
  Returns:
screen(image1, image2) [#]

  Superimpose negative images (MAX - ((MAX - image1) * (MAX - image2) / MAX)).

  Superimposes two inverted images on top of each other.

  image1
  image1
  Returns:
subtract(image1, image2, scale=1.0, offset=0) [#]

  Subtract images ((image1 - image2) / scale + offset).

  Subtracts two images, dividing the result by scale and adding the offset. If omitted, scale defaults to 1.0, and offset to 0.0.

  image1
  image1
  Returns:
subtract_modulo(image1, image2) [#]

  Subtract images without clipping ((image1 - image2) % MAX).

  Subtracts two images, without clipping the result.

  image1
  image1
  Returns: