123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- #
- # The Python Imaging Library.
- # $Id$
- #
- # image enhancement classes
- #
- # For a background, see "Image Processing By Interpolation and
- # Extrapolation", Paul Haeberli and Douglas Voorhies. Available
- # at http://www.graficaobscura.com/interp/index.html
- #
- # History:
- # 1996-03-23 fl Created
- # 2009-06-16 fl Fixed mean calculation
- #
- # Copyright (c) Secret Labs AB 1997.
- # Copyright (c) Fredrik Lundh 1996.
- #
- # See the README file for information on usage and redistribution.
- #
- from . import Image, ImageFilter, ImageStat
- class _Enhance(object):
- def enhance(self, factor):
- """
- Returns an enhanced image.
- :param factor: A floating point value controlling the enhancement.
- Factor 1.0 always returns a copy of the original image,
- lower factors mean less color (brightness, contrast,
- etc), and higher values more. There are no restrictions
- on this value.
- :rtype: :py:class:`~PIL.Image.Image`
- """
- return Image.blend(self.degenerate, self.image, factor)
- class Color(_Enhance):
- """Adjust image color balance.
- This class can be used to adjust the colour balance of an image, in
- a manner similar to the controls on a colour TV set. An enhancement
- factor of 0.0 gives a black and white image. A factor of 1.0 gives
- the original image.
- """
- def __init__(self, image):
- self.image = image
- self.intermediate_mode = "L"
- if "A" in image.getbands():
- self.intermediate_mode = "LA"
- self.degenerate = image.convert(self.intermediate_mode).convert(image.mode)
- class Contrast(_Enhance):
- """Adjust image contrast.
- This class can be used to control the contrast of an image, similar
- to the contrast control on a TV set. An enhancement factor of 0.0
- gives a solid grey image. A factor of 1.0 gives the original image.
- """
- def __init__(self, image):
- self.image = image
- mean = int(ImageStat.Stat(image.convert("L")).mean[0] + 0.5)
- self.degenerate = Image.new("L", image.size, mean).convert(image.mode)
- if "A" in image.getbands():
- self.degenerate.putalpha(image.getchannel("A"))
- class Brightness(_Enhance):
- """Adjust image brightness.
- This class can be used to control the brightness of an image. An
- enhancement factor of 0.0 gives a black image. A factor of 1.0 gives the
- original image.
- """
- def __init__(self, image):
- self.image = image
- self.degenerate = Image.new(image.mode, image.size, 0)
- if "A" in image.getbands():
- self.degenerate.putalpha(image.getchannel("A"))
- class Sharpness(_Enhance):
- """Adjust image sharpness.
- This class can be used to adjust the sharpness of an image. An
- enhancement factor of 0.0 gives a blurred image, a factor of 1.0 gives the
- original image, and a factor of 2.0 gives a sharpened image.
- """
- def __init__(self, image):
- self.image = image
- self.degenerate = image.filter(ImageFilter.SMOOTH)
- if "A" in image.getbands():
- self.degenerate.putalpha(image.getchannel("A"))
|