Spaces:
Running
Running
| # | |
| # 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: | |
| 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")) | |