Linux worldls-302.fr.planethoster.net 4.18.0-553.8.1.lve.el7h.x86_64 #1 SMP Thu Jul 4 15:19:33 UTC 2024 x86_64
LiteSpeed
Server IP : 10.185.0.203 & Your IP : 216.73.216.32
Domains :
Cant Read [ /etc/named.conf ]
User : gerathty
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
lib64 /
python2.7 /
site-packages /
PIL /
Delete
Unzip
Name
Size
Permission
Date
Action
ArgImagePlugin.py
12.17
KB
-rw-r--r--
2024-02-22 08:02
ArgImagePlugin.pyc
12.79
KB
-rw-r--r--
2024-02-22 08:02
ArgImagePlugin.pyo
12.79
KB
-rw-r--r--
2024-02-22 08:02
BdfFontFile.py
3.27
KB
-rw-r--r--
2024-02-22 08:02
BdfFontFile.pyc
2.97
KB
-rw-r--r--
2024-02-22 08:02
BdfFontFile.pyo
2.97
KB
-rw-r--r--
2024-02-22 08:02
BmpImagePlugin.py
6.52
KB
-rw-r--r--
2024-02-22 08:02
BmpImagePlugin.pyc
5.34
KB
-rw-r--r--
2024-02-22 08:02
BmpImagePlugin.pyo
5.34
KB
-rw-r--r--
2024-02-22 08:02
BufrStubImagePlugin.py
1.46
KB
-rw-r--r--
2024-02-22 08:02
BufrStubImagePlugin.pyc
2
KB
-rw-r--r--
2024-02-22 08:02
BufrStubImagePlugin.pyo
2
KB
-rw-r--r--
2024-02-22 08:02
ContainerIO.py
2.54
KB
-rw-r--r--
2024-02-22 08:02
ContainerIO.pyc
2.09
KB
-rw-r--r--
2024-02-22 08:02
ContainerIO.pyo
2.09
KB
-rw-r--r--
2024-02-22 08:02
CurImagePlugin.py
1.89
KB
-rw-r--r--
2024-02-22 08:02
CurImagePlugin.pyc
1.64
KB
-rw-r--r--
2024-02-22 08:02
CurImagePlugin.pyo
1.64
KB
-rw-r--r--
2024-02-22 08:02
DcxImagePlugin.py
1.76
KB
-rw-r--r--
2024-02-22 08:02
DcxImagePlugin.pyc
1.9
KB
-rw-r--r--
2024-02-22 08:02
DcxImagePlugin.pyo
1.9
KB
-rw-r--r--
2024-02-22 08:02
EpsImagePlugin.py
10.64
KB
-rw-r--r--
2024-02-22 08:02
EpsImagePlugin.pyc
9.44
KB
-rw-r--r--
2024-02-22 08:02
EpsImagePlugin.pyo
9.44
KB
-rw-r--r--
2024-02-22 08:02
ExifTags.py
4.69
KB
-rw-r--r--
2024-02-22 08:02
ExifTags.pyc
4.81
KB
-rw-r--r--
2024-02-22 08:02
ExifTags.pyo
4.81
KB
-rw-r--r--
2024-02-22 08:02
FitsStubImagePlugin.py
1.61
KB
-rw-r--r--
2024-02-22 08:02
FitsStubImagePlugin.pyc
2.01
KB
-rw-r--r--
2024-02-22 08:02
FitsStubImagePlugin.pyo
2.01
KB
-rw-r--r--
2024-02-22 08:02
FliImagePlugin.py
3.37
KB
-rw-r--r--
2024-02-22 08:02
FliImagePlugin.pyc
3.5
KB
-rw-r--r--
2024-02-22 08:02
FliImagePlugin.pyo
3.5
KB
-rw-r--r--
2024-02-22 08:02
FontFile.py
3.32
KB
-rw-r--r--
2024-02-22 08:02
FontFile.pyc
3.5
KB
-rw-r--r--
2024-02-22 08:02
FontFile.pyo
3.5
KB
-rw-r--r--
2024-02-22 08:02
FpxImagePlugin.py
6.04
KB
-rw-r--r--
2024-02-22 08:02
FpxImagePlugin.pyc
4.55
KB
-rw-r--r--
2024-02-22 08:02
FpxImagePlugin.pyo
4.55
KB
-rw-r--r--
2024-02-22 08:02
GbrImagePlugin.py
1.54
KB
-rw-r--r--
2024-02-22 08:02
GbrImagePlugin.pyc
1.81
KB
-rw-r--r--
2024-02-22 08:02
GbrImagePlugin.pyo
1.81
KB
-rw-r--r--
2024-02-22 08:02
GdImageFile.py
2.11
KB
-rw-r--r--
2024-02-22 08:02
GdImageFile.pyc
1.68
KB
-rw-r--r--
2024-02-22 08:02
GdImageFile.pyo
1.68
KB
-rw-r--r--
2024-02-22 08:02
GifImagePlugin.py
11.09
KB
-rw-r--r--
2024-02-22 08:02
GifImagePlugin.pyc
7.95
KB
-rw-r--r--
2024-02-22 08:02
GifImagePlugin.pyo
7.95
KB
-rw-r--r--
2024-02-22 08:02
GimpGradientFile.py
3.1
KB
-rw-r--r--
2024-02-22 08:02
GimpGradientFile.pyc
3.61
KB
-rw-r--r--
2024-02-22 08:02
GimpGradientFile.pyo
3.61
KB
-rw-r--r--
2024-02-22 08:02
GimpPaletteFile.py
1.3
KB
-rw-r--r--
2024-02-22 08:02
GimpPaletteFile.pyc
1.47
KB
-rw-r--r--
2024-02-22 08:02
GimpPaletteFile.pyo
1.47
KB
-rw-r--r--
2024-02-22 08:02
GribStubImagePlugin.py
1.47
KB
-rw-r--r--
2024-02-22 08:02
GribStubImagePlugin.pyc
2.01
KB
-rw-r--r--
2024-02-22 08:02
GribStubImagePlugin.pyo
2.01
KB
-rw-r--r--
2024-02-22 08:02
Hdf5StubImagePlugin.py
1.51
KB
-rw-r--r--
2024-02-22 08:02
Hdf5StubImagePlugin.pyc
2.01
KB
-rw-r--r--
2024-02-22 08:02
Hdf5StubImagePlugin.pyo
2.01
KB
-rw-r--r--
2024-02-22 08:02
IcnsImagePlugin.py
6.09
KB
-rw-r--r--
2024-02-22 08:02
IcnsImagePlugin.pyc
6.56
KB
-rw-r--r--
2024-02-22 08:02
IcnsImagePlugin.pyo
6.56
KB
-rw-r--r--
2024-02-22 08:02
IcoImagePlugin.py
1.84
KB
-rw-r--r--
2024-02-22 08:02
IcoImagePlugin.pyc
1.59
KB
-rw-r--r--
2024-02-22 08:02
IcoImagePlugin.pyo
1.59
KB
-rw-r--r--
2024-02-22 08:02
ImImagePlugin.py
9.8
KB
-rw-r--r--
2024-02-22 08:02
ImImagePlugin.pyc
8.04
KB
-rw-r--r--
2024-02-22 08:02
ImImagePlugin.pyo
8.04
KB
-rw-r--r--
2024-02-22 08:02
Image.py
67.81
KB
-rw-r--r--
2024-02-22 08:02
Image.pyc
39.15
KB
-rw-r--r--
2024-02-22 08:02
Image.pyo
39.15
KB
-rw-r--r--
2024-02-22 08:02
ImageChops.py
7.25
KB
-rw-r--r--
2024-02-22 08:02
ImageChops.pyc
4.97
KB
-rw-r--r--
2024-02-22 08:02
ImageChops.pyo
4.97
KB
-rw-r--r--
2024-02-22 08:02
ImageCms.py
29.63
KB
-rw-r--r--
2024-02-22 08:02
ImageCms.pyc
12.13
KB
-rw-r--r--
2024-02-22 08:02
ImageCms.pyo
12.13
KB
-rw-r--r--
2024-02-22 08:02
ImageColor.py
7.04
KB
-rw-r--r--
2024-02-22 08:02
ImageColor.pyc
6.92
KB
-rw-r--r--
2024-02-22 08:02
ImageColor.pyo
6.92
KB
-rw-r--r--
2024-02-22 08:02
ImageDraw.py
11.36
KB
-rw-r--r--
2024-02-22 08:02
ImageDraw.pyc
8.63
KB
-rw-r--r--
2024-02-22 08:02
ImageDraw.pyo
8.63
KB
-rw-r--r--
2024-02-22 08:02
ImageDraw2.py
3.11
KB
-rw-r--r--
2024-02-22 08:02
ImageDraw2.pyc
5.1
KB
-rw-r--r--
2024-02-22 08:02
ImageDraw2.pyo
5.1
KB
-rw-r--r--
2024-02-22 08:02
ImageEnhance.py
2.71
KB
-rw-r--r--
2024-02-22 08:02
ImageEnhance.pyc
2.54
KB
-rw-r--r--
2024-02-22 08:02
ImageEnhance.pyo
2.54
KB
-rw-r--r--
2024-02-22 08:02
ImageFile.py
14.72
KB
-rw-r--r--
2024-02-22 08:02
ImageFile.pyc
9.74
KB
-rw-r--r--
2024-02-22 08:02
ImageFile.pyo
9.64
KB
-rw-r--r--
2024-02-22 08:02
ImageFileIO.py
968
B
-rw-r--r--
2024-02-22 08:02
ImageFileIO.pyc
614
B
-rw-r--r--
2024-02-22 08:02
ImageFileIO.pyo
614
B
-rw-r--r--
2024-02-22 08:02
ImageFilter.py
6.51
KB
-rw-r--r--
2024-02-22 08:02
ImageFilter.pyc
8.7
KB
-rw-r--r--
2024-02-22 08:02
ImageFilter.pyo
8.7
KB
-rw-r--r--
2024-02-22 08:02
ImageFont.py
17.38
KB
-rw-r--r--
2024-02-22 08:02
ImageFont.pyc
15.96
KB
-rw-r--r--
2024-02-22 08:02
ImageFont.pyo
15.96
KB
-rw-r--r--
2024-02-22 08:02
ImageGL.py
483
B
-rw-r--r--
2024-02-22 08:02
ImageGL.pyc
394
B
-rw-r--r--
2024-02-22 08:02
ImageGL.pyo
394
B
-rw-r--r--
2024-02-22 08:02
ImageGrab.py
1.85
KB
-rw-r--r--
2024-02-22 08:02
ImageGrab.pyc
1.07
KB
-rw-r--r--
2024-02-22 08:02
ImageGrab.pyo
1.07
KB
-rw-r--r--
2024-02-22 08:02
ImageMath.py
7.66
KB
-rw-r--r--
2024-02-22 08:02
ImageMath.pyc
10.94
KB
-rw-r--r--
2024-02-22 08:02
ImageMath.pyo
10.94
KB
-rw-r--r--
2024-02-22 08:02
ImageMode.py
1.27
KB
-rw-r--r--
2024-02-22 08:02
ImageMode.pyc
1.34
KB
-rw-r--r--
2024-02-22 08:02
ImageMode.pyo
1.34
KB
-rw-r--r--
2024-02-22 08:02
ImageOps.py
13
KB
-rw-r--r--
2024-02-22 08:02
ImageOps.pyc
8.43
KB
-rw-r--r--
2024-02-22 08:02
ImageOps.pyo
8.38
KB
-rw-r--r--
2024-02-22 08:02
ImagePalette.py
5.4
KB
-rw-r--r--
2024-02-22 08:02
ImagePalette.pyc
5.7
KB
-rw-r--r--
2024-02-22 08:02
ImagePalette.pyo
5.7
KB
-rw-r--r--
2024-02-22 08:02
ImagePath.py
1.32
KB
-rw-r--r--
2024-02-22 08:02
ImagePath.pyc
1.36
KB
-rw-r--r--
2024-02-22 08:02
ImagePath.pyo
1.36
KB
-rw-r--r--
2024-02-22 08:02
ImageSequence.py
792
B
-rw-r--r--
2024-02-22 08:02
ImageSequence.pyc
903
B
-rw-r--r--
2024-02-22 08:02
ImageSequence.pyo
903
B
-rw-r--r--
2024-02-22 08:02
ImageShow.py
4.45
KB
-rw-r--r--
2024-02-22 08:02
ImageShow.pyc
5.22
KB
-rw-r--r--
2024-02-22 08:02
ImageShow.pyo
5.22
KB
-rw-r--r--
2024-02-22 08:02
ImageStat.py
4.22
KB
-rw-r--r--
2024-02-22 08:02
ImageStat.pyc
4.66
KB
-rw-r--r--
2024-02-22 08:02
ImageStat.pyo
4.66
KB
-rw-r--r--
2024-02-22 08:02
ImageTransform.py
2.8
KB
-rw-r--r--
2024-02-22 08:02
ImageTransform.pyc
1.87
KB
-rw-r--r--
2024-02-22 08:02
ImageTransform.pyo
1.87
KB
-rw-r--r--
2024-02-22 08:02
ImageWin.py
6.73
KB
-rw-r--r--
2024-02-22 08:02
ImageWin.pyc
6.55
KB
-rw-r--r--
2024-02-22 08:02
ImageWin.pyo
6.55
KB
-rw-r--r--
2024-02-22 08:02
ImtImagePlugin.py
2.17
KB
-rw-r--r--
2024-02-22 08:02
ImtImagePlugin.pyc
1.56
KB
-rw-r--r--
2024-02-22 08:02
ImtImagePlugin.pyo
1.56
KB
-rw-r--r--
2024-02-22 08:02
IptcImagePlugin.py
7.52
KB
-rw-r--r--
2024-02-22 08:02
IptcImagePlugin.pyc
6.29
KB
-rw-r--r--
2024-02-22 08:02
IptcImagePlugin.pyo
6.29
KB
-rw-r--r--
2024-02-22 08:02
JpegImagePlugin.py
19.42
KB
-rw-r--r--
2024-02-22 08:02
JpegImagePlugin.pyc
16.24
KB
-rw-r--r--
2024-02-22 08:02
JpegImagePlugin.pyo
16.24
KB
-rw-r--r--
2024-02-22 08:02
JpegPresets.py
12.05
KB
-rw-r--r--
2024-02-22 08:02
JpegPresets.pyc
6.3
KB
-rw-r--r--
2024-02-22 08:02
JpegPresets.pyo
6.3
KB
-rw-r--r--
2024-02-22 08:02
McIdasImagePlugin.py
1.69
KB
-rw-r--r--
2024-02-22 08:02
McIdasImagePlugin.pyc
1.67
KB
-rw-r--r--
2024-02-22 08:02
McIdasImagePlugin.pyo
1.67
KB
-rw-r--r--
2024-02-22 08:02
MicImagePlugin.py
2.12
KB
-rw-r--r--
2024-02-22 08:02
MicImagePlugin.pyc
2.09
KB
-rw-r--r--
2024-02-22 08:02
MicImagePlugin.pyo
2.09
KB
-rw-r--r--
2024-02-22 08:02
MpegImagePlugin.py
1.79
KB
-rw-r--r--
2024-02-22 08:02
MpegImagePlugin.pyc
2.49
KB
-rw-r--r--
2024-02-22 08:02
MpegImagePlugin.pyo
2.49
KB
-rw-r--r--
2024-02-22 08:02
MspImagePlugin.py
2.12
KB
-rw-r--r--
2024-02-22 08:02
MspImagePlugin.pyc
2.39
KB
-rw-r--r--
2024-02-22 08:02
MspImagePlugin.pyo
2.39
KB
-rw-r--r--
2024-02-22 08:02
OleFileIO.py
15.92
KB
-rw-r--r--
2024-02-22 08:02
OleFileIO.pyc
12.62
KB
-rw-r--r--
2024-02-22 08:02
OleFileIO.pyo
12.62
KB
-rw-r--r--
2024-02-22 08:02
PSDraw.py
5.57
KB
-rw-r--r--
2024-02-22 08:02
PSDraw.pyc
5.5
KB
-rw-r--r--
2024-02-22 08:02
PSDraw.pyo
5.5
KB
-rw-r--r--
2024-02-22 08:02
PaletteFile.py
1.08
KB
-rw-r--r--
2024-02-22 08:02
PaletteFile.pyc
1.31
KB
-rw-r--r--
2024-02-22 08:02
PaletteFile.pyo
1.31
KB
-rw-r--r--
2024-02-22 08:02
PalmImagePlugin.py
9.33
KB
-rw-r--r--
2024-02-22 08:02
PalmImagePlugin.pyc
9.39
KB
-rw-r--r--
2024-02-22 08:02
PalmImagePlugin.pyo
9.39
KB
-rw-r--r--
2024-02-22 08:02
PcdImagePlugin.py
1.77
KB
-rw-r--r--
2024-02-22 08:02
PcdImagePlugin.pyc
1.73
KB
-rw-r--r--
2024-02-22 08:02
PcdImagePlugin.pyo
1.73
KB
-rw-r--r--
2024-02-22 08:02
PcfFontFile.py
6.03
KB
-rw-r--r--
2024-02-22 08:02
PcfFontFile.pyc
6.2
KB
-rw-r--r--
2024-02-22 08:02
PcfFontFile.pyo
6.2
KB
-rw-r--r--
2024-02-22 08:02
PcxImagePlugin.py
4.53
KB
-rw-r--r--
2024-02-22 08:02
PcxImagePlugin.pyc
3.84
KB
-rw-r--r--
2024-02-22 08:02
PcxImagePlugin.pyo
3.78
KB
-rw-r--r--
2024-02-22 08:02
PdfImagePlugin.py
5.73
KB
-rw-r--r--
2024-02-22 08:02
PdfImagePlugin.pyc
5.04
KB
-rw-r--r--
2024-02-22 08:02
PdfImagePlugin.pyo
5.04
KB
-rw-r--r--
2024-02-22 08:02
PixarImagePlugin.py
1.57
KB
-rw-r--r--
2024-02-22 08:02
PixarImagePlugin.pyc
1.24
KB
-rw-r--r--
2024-02-22 08:02
PixarImagePlugin.pyo
1.24
KB
-rw-r--r--
2024-02-22 08:02
PngImagePlugin.py
18.19
KB
-rw-r--r--
2024-02-22 08:02
PngImagePlugin.pyc
17.9
KB
-rw-r--r--
2024-02-22 08:02
PngImagePlugin.pyo
17.9
KB
-rw-r--r--
2024-02-22 08:02
PpmImagePlugin.py
3.23
KB
-rw-r--r--
2024-02-22 08:02
PpmImagePlugin.pyc
2.94
KB
-rw-r--r--
2024-02-22 08:02
PpmImagePlugin.pyo
2.94
KB
-rw-r--r--
2024-02-22 08:02
PsdImagePlugin.py
7.28
KB
-rw-r--r--
2024-02-22 08:02
PsdImagePlugin.pyc
6.17
KB
-rw-r--r--
2024-02-22 08:02
PsdImagePlugin.pyo
6.17
KB
-rw-r--r--
2024-02-22 08:02
SgiImagePlugin.py
2.05
KB
-rw-r--r--
2024-02-22 08:02
SgiImagePlugin.pyc
2
KB
-rw-r--r--
2024-02-22 08:02
SgiImagePlugin.pyo
2
KB
-rw-r--r--
2024-02-22 08:02
SunImagePlugin.py
1.9
KB
-rw-r--r--
2024-02-22 08:02
SunImagePlugin.pyc
1.99
KB
-rw-r--r--
2024-02-22 08:02
SunImagePlugin.pyo
1.99
KB
-rw-r--r--
2024-02-22 08:02
TarIO.py
1.19
KB
-rw-r--r--
2024-02-22 08:02
TarIO.pyc
1.08
KB
-rw-r--r--
2024-02-22 08:02
TarIO.pyo
1.08
KB
-rw-r--r--
2024-02-22 08:02
TgaImagePlugin.py
4.83
KB
-rw-r--r--
2024-02-22 08:02
TgaImagePlugin.pyc
4.14
KB
-rw-r--r--
2024-02-22 08:02
TgaImagePlugin.pyo
4.14
KB
-rw-r--r--
2024-02-22 08:02
TiffImagePlugin.py
34.05
KB
-rw-r--r--
2024-02-22 08:02
TiffImagePlugin.pyc
26.2
KB
-rw-r--r--
2024-02-22 08:02
TiffImagePlugin.pyo
26.07
KB
-rw-r--r--
2024-02-22 08:02
TiffTags.py
4.53
KB
-rw-r--r--
2024-02-22 08:02
TiffTags.pyc
4.9
KB
-rw-r--r--
2024-02-22 08:02
TiffTags.pyo
4.9
KB
-rw-r--r--
2024-02-22 08:02
WalImageFile.py
5.39
KB
-rw-r--r--
2024-02-22 08:02
WalImageFile.pyc
2.13
KB
-rw-r--r--
2024-02-22 08:02
WalImageFile.pyo
2.13
KB
-rw-r--r--
2024-02-22 08:02
WebPImagePlugin.py
978
B
-rw-r--r--
2024-02-22 08:02
WebPImagePlugin.pyc
1.86
KB
-rw-r--r--
2024-02-22 08:02
WebPImagePlugin.pyo
1.86
KB
-rw-r--r--
2024-02-22 08:02
WmfImagePlugin.py
4
KB
-rw-r--r--
2024-02-22 08:02
WmfImagePlugin.pyc
3.97
KB
-rw-r--r--
2024-02-22 08:02
WmfImagePlugin.pyo
3.97
KB
-rw-r--r--
2024-02-22 08:02
XVThumbImagePlugin.py
1.8
KB
-rw-r--r--
2024-02-22 08:02
XVThumbImagePlugin.pyc
1.6
KB
-rw-r--r--
2024-02-22 08:02
XVThumbImagePlugin.pyo
1.6
KB
-rw-r--r--
2024-02-22 08:02
XbmImagePlugin.py
2.39
KB
-rw-r--r--
2024-02-22 08:02
XbmImagePlugin.pyc
2.52
KB
-rw-r--r--
2024-02-22 08:02
XbmImagePlugin.pyo
2.52
KB
-rw-r--r--
2024-02-22 08:02
XpmImagePlugin.py
3.01
KB
-rw-r--r--
2024-02-22 08:02
XpmImagePlugin.pyc
2.8
KB
-rw-r--r--
2024-02-22 08:02
XpmImagePlugin.pyo
2.8
KB
-rw-r--r--
2024-02-22 08:02
__init__.py
183
B
-rw-r--r--
2024-02-22 08:02
__init__.pyc
137
B
-rw-r--r--
2024-02-22 08:02
__init__.pyo
137
B
-rw-r--r--
2024-02-22 08:02
_binary.py
1.09
KB
-rw-r--r--
2024-02-22 08:02
_binary.pyc
2.52
KB
-rw-r--r--
2024-02-22 08:02
_binary.pyo
2.52
KB
-rw-r--r--
2024-02-22 08:02
Save
Rename
# # The Python Imaging Library. # $Id$ # # standard image operations # # History: # 2001-10-20 fl Created # 2001-10-23 fl Added autocontrast operator # 2001-12-18 fl Added Kevin's fit operator # 2004-03-14 fl Fixed potential division by zero in equalize # 2005-05-05 fl Fixed equalize for low number of values # # Copyright (c) 2001-2004 by Secret Labs AB # Copyright (c) 2001-2004 by Fredrik Lundh # # See the README file for information on usage and redistribution. # from PIL import Image import operator from functools import reduce ## # (New in 1.1.3) The <b>ImageOps</b> module contains a number of # 'ready-made' image processing operations. This module is somewhat # experimental, and most operators only work on L and RGB images. # # @since 1.1.3 ## # # helpers def _border(border): if isinstance(border, tuple): if len(border) == 2: left, top = right, bottom = border elif len(border) == 4: left, top, right, bottom = border else: left = top = right = bottom = border return left, top, right, bottom def _color(color, mode): if Image.isStringType(color): from PIL import ImageColor color = ImageColor.getcolor(color, mode) return color def _lut(image, lut): if image.mode == "P": # FIXME: apply to lookup table, not image data raise NotImplementedError("mode P support coming soon") elif image.mode in ("L", "RGB"): if image.mode == "RGB" and len(lut) == 256: lut = lut + lut + lut return image.point(lut) else: raise IOError("not supported for this image mode") # # actions ## # Maximize (normalize) image contrast. This function calculates a # histogram of the input image, removes <i>cutoff</i> percent of the # lightest and darkest pixels from the histogram, and remaps the image # so that the darkest pixel becomes black (0), and the lightest # becomes white (255). # # @param image The image to process. # @param cutoff How many percent to cut off from the histogram. # @param ignore The background pixel value (use None for no background). # @return An image. def autocontrast(image, cutoff=0, ignore=None): "Maximize image contrast, based on histogram" histogram = image.histogram() lut = [] for layer in range(0, len(histogram), 256): h = histogram[layer:layer+256] if ignore is not None: # get rid of outliers try: h[ignore] = 0 except TypeError: # assume sequence for ix in ignore: h[ix] = 0 if cutoff: # cut off pixels from both ends of the histogram # get number of pixels n = 0 for ix in range(256): n = n + h[ix] # remove cutoff% pixels from the low end cut = n * cutoff // 100 for lo in range(256): if cut > h[lo]: cut = cut - h[lo] h[lo] = 0 else: h[lo] = h[lo] - cut cut = 0 if cut <= 0: break # remove cutoff% samples from the hi end cut = n * cutoff // 100 for hi in range(255, -1, -1): if cut > h[hi]: cut = cut - h[hi] h[hi] = 0 else: h[hi] = h[hi] - cut cut = 0 if cut <= 0: break # find lowest/highest samples after preprocessing for lo in range(256): if h[lo]: break for hi in range(255, -1, -1): if h[hi]: break if hi <= lo: # don't bother lut.extend(list(range(256))) else: scale = 255.0 / (hi - lo) offset = -lo * scale for ix in range(256): ix = int(ix * scale + offset) if ix < 0: ix = 0 elif ix > 255: ix = 255 lut.append(ix) return _lut(image, lut) ## # Colorize grayscale image. The <i>black</i> and <i>white</i> # arguments should be RGB tuples; this function calculates a colour # wedge mapping all black pixels in the source image to the first # colour, and all white pixels to the second colour. # # @param image The image to colourize. # @param black The colour to use for black input pixels. # @param white The colour to use for white input pixels. # @return An image. def colorize(image, black, white): "Colorize a grayscale image" assert image.mode == "L" black = _color(black, "RGB") white = _color(white, "RGB") red = []; green = []; blue = [] for i in range(256): red.append(black[0]+i*(white[0]-black[0])//255) green.append(black[1]+i*(white[1]-black[1])//255) blue.append(black[2]+i*(white[2]-black[2])//255) image = image.convert("RGB") return _lut(image, red + green + blue) ## # Remove border from image. The same amount of pixels are removed # from all four sides. This function works on all image modes. # # @param image The image to crop. # @param border The number of pixels to remove. # @return An image. # @see Image#Image.crop def crop(image, border=0): "Crop border off image" left, top, right, bottom = _border(border) return image.crop( (left, top, image.size[0]-right, image.size[1]-bottom) ) ## # Deform the image. # # @param image The image to deform. # @param deformer A deformer object. Any object that implements a # <b>getmesh</b> method can be used. # @param resample What resampling filter to use. # @return An image. def deform(image, deformer, resample=Image.BILINEAR): "Deform image using the given deformer" return image.transform( image.size, Image.MESH, deformer.getmesh(image), resample ) ## # Equalize the image histogram. This function applies a non-linear # mapping to the input image, in order to create a uniform # distribution of grayscale values in the output image. # # @param image The image to equalize. # @param mask An optional mask. If given, only the pixels selected by # the mask are included in the analysis. # @return An image. def equalize(image, mask=None): "Equalize image histogram" if image.mode == "P": image = image.convert("RGB") h = image.histogram(mask) lut = [] for b in range(0, len(h), 256): histo = [_f for _f in h[b:b+256] if _f] if len(histo) <= 1: lut.extend(list(range(256))) else: step = (reduce(operator.add, histo) - histo[-1]) // 255 if not step: lut.extend(list(range(256))) else: n = step // 2 for i in range(256): lut.append(n // step) n = n + h[i+b] return _lut(image, lut) ## # Add border to the image # # @param image The image to expand. # @param border Border width, in pixels. # @param fill Pixel fill value (a colour value). Default is 0 (black). # @return An image. def expand(image, border=0, fill=0): "Add border to image" left, top, right, bottom = _border(border) width = left + image.size[0] + right height = top + image.size[1] + bottom out = Image.new(image.mode, (width, height), _color(fill, image.mode)) out.paste(image, (left, top)) return out ## # Returns a sized and cropped version of the image, cropped to the # requested aspect ratio and size. # <p> # The <b>fit</b> function was contributed by Kevin Cazabon. # # @param size The requested output size in pixels, given as a # (width, height) tuple. # @param method What resampling method to use. Default is Image.NEAREST. # @param bleed Remove a border around the outside of the image (from all # four edges. The value is a decimal percentage (use 0.01 for one # percent). The default value is 0 (no border). # @param centering Control the cropping position. Use (0.5, 0.5) for # center cropping (e.g. if cropping the width, take 50% off of the # left side, and therefore 50% off the right side). (0.0, 0.0) # will crop from the top left corner (i.e. if cropping the width, # take all of the crop off of the right side, and if cropping the # height, take all of it off the bottom). (1.0, 0.0) will crop # from the bottom left corner, etc. (i.e. if cropping the width, # take all of the crop off the left side, and if cropping the height # take none from the top, and therefore all off the bottom). # @return An image. def fit(image, size, method=Image.NEAREST, bleed=0.0, centering=(0.5, 0.5)): """ This method returns a sized and cropped version of the image, cropped to the aspect ratio and size that you request. """ # by Kevin Cazabon, Feb 17/2000 # kevin@cazabon.com # http://www.cazabon.com # ensure inputs are valid if not isinstance(centering, list): centering = [centering[0], centering[1]] if centering[0] > 1.0 or centering[0] < 0.0: centering [0] = 0.50 if centering[1] > 1.0 or centering[1] < 0.0: centering[1] = 0.50 if bleed > 0.49999 or bleed < 0.0: bleed = 0.0 # calculate the area to use for resizing and cropping, subtracting # the 'bleed' around the edges # number of pixels to trim off on Top and Bottom, Left and Right bleedPixels = ( int((float(bleed) * float(image.size[0])) + 0.5), int((float(bleed) * float(image.size[1])) + 0.5) ) liveArea = ( bleedPixels[0], bleedPixels[1], image.size[0] - bleedPixels[0] - 1, image.size[1] - bleedPixels[1] - 1 ) liveSize = (liveArea[2] - liveArea[0], liveArea[3] - liveArea[1]) # calculate the aspect ratio of the liveArea liveAreaAspectRatio = float(liveSize[0])/float(liveSize[1]) # calculate the aspect ratio of the output image aspectRatio = float(size[0]) / float(size[1]) # figure out if the sides or top/bottom will be cropped off if liveAreaAspectRatio >= aspectRatio: # liveArea is wider than what's needed, crop the sides cropWidth = int((aspectRatio * float(liveSize[1])) + 0.5) cropHeight = liveSize[1] else: # liveArea is taller than what's needed, crop the top and bottom cropWidth = liveSize[0] cropHeight = int((float(liveSize[0])/aspectRatio) + 0.5) # make the crop leftSide = int(liveArea[0] + (float(liveSize[0]-cropWidth) * centering[0])) if leftSide < 0: leftSide = 0 topSide = int(liveArea[1] + (float(liveSize[1]-cropHeight) * centering[1])) if topSide < 0: topSide = 0 out = image.crop( (leftSide, topSide, leftSide + cropWidth, topSide + cropHeight) ) # resize the image and return it return out.resize(size, method) ## # Flip the image vertically (top to bottom). # # @param image The image to flip. # @return An image. def flip(image): "Flip image vertically" return image.transpose(Image.FLIP_TOP_BOTTOM) ## # Convert the image to grayscale. # # @param image The image to convert. # @return An image. def grayscale(image): "Convert to grayscale" return image.convert("L") ## # Invert (negate) the image. # # @param image The image to invert. # @return An image. def invert(image): "Invert image (negate)" lut = [] for i in range(256): lut.append(255-i) return _lut(image, lut) ## # Flip image horizontally (left to right). # # @param image The image to mirror. # @return An image. def mirror(image): "Flip image horizontally" return image.transpose(Image.FLIP_LEFT_RIGHT) ## # Reduce the number of bits for each colour channel. # # @param image The image to posterize. # @param bits The number of bits to keep for each channel (1-8). # @return An image. def posterize(image, bits): "Reduce the number of bits per color channel" lut = [] mask = ~(2**(8-bits)-1) for i in range(256): lut.append(i & mask) return _lut(image, lut) ## # Invert all pixel values above a threshold. # # @param image The image to posterize. # @param threshold All pixels above this greyscale level are inverted. # @return An image. def solarize(image, threshold=128): "Invert all values above threshold" lut = [] for i in range(256): if i < threshold: lut.append(i) else: lut.append(255-i) return _lut(image, lut) # -------------------------------------------------------------------- # PIL USM components, from Kevin Cazabon. def gaussian_blur(im, radius=None): """ PIL_usm.gblur(im, [radius])""" if radius is None: radius = 5.0 im.load() return im.im.gaussian_blur(radius) gblur = gaussian_blur def unsharp_mask(im, radius=None, percent=None, threshold=None): """ PIL_usm.usm(im, [radius, percent, threshold])""" if radius is None: radius = 5.0 if percent is None: percent = 150 if threshold is None: threshold = 3 im.load() return im.im.unsharp_mask(radius, percent, threshold) usm = unsharp_mask