From 25548c17eb059d7bee15b7dae7b68cc71b414fa0 Mon Sep 17 00:00:00 2001 From: Thanh Phan Date: Sat, 12 Jun 2021 15:44:30 +0700 Subject: [PATCH 1/5] Remove Windows third-party libraries --- PIL/BdfFontFile.py | 110 - PIL/BlpImagePlugin.py | 422 -- PIL/BmpImagePlugin.py | 380 -- PIL/BufrStubImagePlugin.py | 73 - PIL/ContainerIO.py | 120 - PIL/CurImagePlugin.py | 75 - PIL/DcxImagePlugin.py | 89 - PIL/DdsImagePlugin.py | 190 - PIL/EpsImagePlugin.py | 419 -- PIL/ExifTags.py | 318 -- PIL/FitsStubImagePlugin.py | 76 - PIL/FliImagePlugin.py | 171 - PIL/FontFile.py | 111 - PIL/FpxImagePlugin.py | 242 -- PIL/FtexImagePlugin.py | 106 - PIL/GbrImagePlugin.py | 100 - PIL/GdImageFile.py | 90 - PIL/GifImagePlugin.py | 888 ----- PIL/GimpGradientFile.py | 140 - PIL/GimpPaletteFile.py | 56 - PIL/GribStubImagePlugin.py | 73 - PIL/Hdf5StubImagePlugin.py | 73 - PIL/IcnsImagePlugin.py | 383 -- PIL/IcoImagePlugin.py | 328 -- PIL/ImImagePlugin.py | 376 -- PIL/Image.py | 3491 ----------------- PIL/ImageChops.py | 328 -- PIL/ImageCms.py | 999 ----- PIL/ImageColor.py | 300 -- PIL/ImageDraw.py | 898 ----- PIL/ImageDraw2.py | 179 - PIL/ImageEnhance.py | 103 - PIL/ImageFile.py | 697 ---- PIL/ImageFilter.py | 534 --- PIL/ImageFont.py | 1057 ----- PIL/ImageGrab.py | 120 - PIL/ImageMath.py | 253 -- PIL/ImageMode.py | 64 - PIL/ImageMorph.py | 245 -- PIL/ImageOps.py | 558 --- PIL/ImagePalette.py | 221 -- PIL/ImagePath.py | 19 - PIL/ImageQt.py | 202 - PIL/ImageSequence.py | 75 - PIL/ImageShow.py | 236 -- PIL/ImageStat.py | 147 - PIL/ImageTk.py | 300 -- PIL/ImageTransform.py | 102 - PIL/ImageWin.py | 230 -- PIL/ImtImagePlugin.py | 93 - PIL/IptcImagePlugin.py | 230 -- PIL/Jpeg2KImagePlugin.py | 314 -- PIL/JpegImagePlugin.py | 805 ---- PIL/JpegPresets.py | 248 -- PIL/McIdasImagePlugin.py | 75 - PIL/MicImagePlugin.py | 107 - PIL/MpegImagePlugin.py | 83 - PIL/MpoImagePlugin.py | 134 - PIL/MspImagePlugin.py | 194 - PIL/PSDraw.py | 235 -- PIL/PaletteFile.py | 53 - PIL/PalmImagePlugin.py | 227 -- PIL/PcdImagePlugin.py | 63 - PIL/PcfFontFile.py | 248 -- PIL/PcxImagePlugin.py | 213 - PIL/PdfImagePlugin.py | 246 -- PIL/PdfParser.py | 994 ----- PIL/PixarImagePlugin.py | 70 - PIL/PngImagePlugin.py | 1395 ------- PIL/PpmImagePlugin.py | 164 - PIL/PsdImagePlugin.py | 313 -- PIL/PyAccess.py | 352 -- PIL/SgiImagePlugin.py | 229 -- PIL/SpiderImagePlugin.py | 324 -- PIL/SunImagePlugin.py | 136 - PIL/TarIO.py | 65 - PIL/TgaImagePlugin.py | 248 -- PIL/TiffImagePlugin.py | 1924 --------- PIL/TiffTags.py | 499 --- PIL/WalImageFile.py | 126 - PIL/WebPImagePlugin.py | 351 -- PIL/WmfImagePlugin.py | 178 - PIL/XVThumbImagePlugin.py | 78 - PIL/XbmImagePlugin.py | 94 - PIL/XpmImagePlugin.py | 130 - PIL/__init__.py | 139 - PIL/__main__.py | 3 - PIL/__pycache__/BdfFontFile.cpython-37.pyc | Bin 2485 -> 0 bytes PIL/__pycache__/BlpImagePlugin.cpython-37.pyc | Bin 10539 -> 0 bytes PIL/__pycache__/BmpImagePlugin.cpython-37.pyc | Bin 6963 -> 0 bytes .../BufrStubImagePlugin.cpython-37.pyc | Bin 1637 -> 0 bytes PIL/__pycache__/ContainerIO.cpython-37.pyc | Bin 2823 -> 0 bytes PIL/__pycache__/CurImagePlugin.cpython-37.pyc | Bin 1337 -> 0 bytes PIL/__pycache__/DcxImagePlugin.cpython-37.pyc | Bin 1805 -> 0 bytes PIL/__pycache__/DdsImagePlugin.cpython-37.pyc | Bin 4713 -> 0 bytes PIL/__pycache__/EpsImagePlugin.cpython-37.pyc | Bin 7490 -> 0 bytes PIL/__pycache__/ExifTags.cpython-37.pyc | Bin 7606 -> 0 bytes .../FitsStubImagePlugin.cpython-37.pyc | Bin 1625 -> 0 bytes PIL/__pycache__/FliImagePlugin.cpython-37.pyc | Bin 3611 -> 0 bytes PIL/__pycache__/FontFile.cpython-37.pyc | Bin 2320 -> 0 bytes PIL/__pycache__/FpxImagePlugin.cpython-37.pyc | Bin 3628 -> 0 bytes .../FtexImagePlugin.cpython-37.pyc | Bin 3482 -> 0 bytes PIL/__pycache__/GbrImagePlugin.cpython-37.pyc | Bin 1869 -> 0 bytes PIL/__pycache__/GdImageFile.cpython-37.pyc | Bin 2441 -> 0 bytes PIL/__pycache__/GifImagePlugin.cpython-37.pyc | Bin 16428 -> 0 bytes .../GimpGradientFile.cpython-37.pyc | Bin 3318 -> 0 bytes .../GimpPaletteFile.cpython-37.pyc | Bin 1385 -> 0 bytes .../GribStubImagePlugin.cpython-37.pyc | Bin 1639 -> 0 bytes .../Hdf5StubImagePlugin.cpython-37.pyc | Bin 1625 -> 0 bytes .../IcnsImagePlugin.cpython-37.pyc | Bin 9269 -> 0 bytes PIL/__pycache__/IcoImagePlugin.cpython-37.pyc | Bin 7223 -> 0 bytes PIL/__pycache__/ImImagePlugin.cpython-37.pyc | Bin 6569 -> 0 bytes PIL/__pycache__/Image.cpython-37.pyc | Bin 93619 -> 0 bytes PIL/__pycache__/ImageChops.cpython-37.pyc | Bin 7813 -> 0 bytes PIL/__pycache__/ImageCms.cpython-37.pyc | Bin 32349 -> 0 bytes PIL/__pycache__/ImageColor.cpython-37.pyc | Bin 6408 -> 0 bytes PIL/__pycache__/ImageDraw.cpython-37.pyc | Bin 20161 -> 0 bytes PIL/__pycache__/ImageDraw2.cpython-37.pyc | Bin 5573 -> 0 bytes PIL/__pycache__/ImageEnhance.cpython-37.pyc | Bin 3556 -> 0 bytes PIL/__pycache__/ImageFile.cpython-37.pyc | Bin 14310 -> 0 bytes PIL/__pycache__/ImageFilter.cpython-37.pyc | Bin 16586 -> 0 bytes PIL/__pycache__/ImageFont.cpython-37.pyc | Bin 41453 -> 0 bytes PIL/__pycache__/ImageGrab.cpython-37.pyc | Bin 2454 -> 0 bytes PIL/__pycache__/ImageMath.cpython-37.pyc | Bin 8165 -> 0 bytes PIL/__pycache__/ImageMode.cpython-37.pyc | Bin 1284 -> 0 bytes PIL/__pycache__/ImageMorph.cpython-37.pyc | Bin 7329 -> 0 bytes PIL/__pycache__/ImageOps.cpython-37.pyc | Bin 14837 -> 0 bytes PIL/__pycache__/ImagePalette.cpython-37.pyc | Bin 5532 -> 0 bytes PIL/__pycache__/ImagePath.cpython-37.pyc | Bin 240 -> 0 bytes PIL/__pycache__/ImageQt.cpython-37.pyc | Bin 4189 -> 0 bytes PIL/__pycache__/ImageSequence.cpython-37.pyc | Bin 2313 -> 0 bytes PIL/__pycache__/ImageShow.cpython-37.pyc | Bin 6660 -> 0 bytes PIL/__pycache__/ImageStat.cpython-37.pyc | Bin 3726 -> 0 bytes PIL/__pycache__/ImageTk.cpython-37.pyc | Bin 7755 -> 0 bytes PIL/__pycache__/ImageTransform.cpython-37.pyc | Bin 3491 -> 0 bytes PIL/__pycache__/ImageWin.cpython-37.pyc | Bin 8075 -> 0 bytes PIL/__pycache__/ImtImagePlugin.cpython-37.pyc | Bin 1238 -> 0 bytes .../IptcImagePlugin.cpython-37.pyc | Bin 4306 -> 0 bytes .../Jpeg2KImagePlugin.cpython-37.pyc | Bin 5888 -> 0 bytes .../JpegImagePlugin.cpython-37.pyc | Bin 16818 -> 0 bytes PIL/__pycache__/JpegPresets.cpython-37.pyc | Bin 5491 -> 0 bytes .../McIdasImagePlugin.cpython-37.pyc | Bin 1356 -> 0 bytes PIL/__pycache__/MicImagePlugin.cpython-37.pyc | Bin 2086 -> 0 bytes .../MpegImagePlugin.cpython-37.pyc | Bin 1924 -> 0 bytes PIL/__pycache__/MpoImagePlugin.cpython-37.pyc | Bin 3422 -> 0 bytes PIL/__pycache__/MspImagePlugin.cpython-37.pyc | Bin 3090 -> 0 bytes PIL/__pycache__/PSDraw.cpython-37.pyc | Bin 5811 -> 0 bytes PIL/__pycache__/PaletteFile.cpython-37.pyc | Bin 1355 -> 0 bytes .../PalmImagePlugin.cpython-37.pyc | Bin 7040 -> 0 bytes PIL/__pycache__/PcdImagePlugin.cpython-37.pyc | Bin 1163 -> 0 bytes PIL/__pycache__/PcfFontFile.cpython-37.pyc | Bin 5260 -> 0 bytes PIL/__pycache__/PcxImagePlugin.cpython-37.pyc | Bin 3627 -> 0 bytes PIL/__pycache__/PdfImagePlugin.cpython-37.pyc | Bin 3728 -> 0 bytes PIL/__pycache__/PdfParser.cpython-37.pyc | Bin 26181 -> 0 bytes .../PixarImagePlugin.cpython-37.pyc | Bin 1138 -> 0 bytes PIL/__pycache__/PngImagePlugin.cpython-37.pyc | Bin 28952 -> 0 bytes PIL/__pycache__/PpmImagePlugin.cpython-37.pyc | Bin 3034 -> 0 bytes PIL/__pycache__/PsdImagePlugin.cpython-37.pyc | Bin 5016 -> 0 bytes PIL/__pycache__/PyAccess.cpython-37.pyc | Bin 11241 -> 0 bytes PIL/__pycache__/SgiImagePlugin.cpython-37.pyc | Bin 3926 -> 0 bytes .../SpiderImagePlugin.cpython-37.pyc | Bin 6584 -> 0 bytes PIL/__pycache__/SunImagePlugin.cpython-37.pyc | Bin 1896 -> 0 bytes PIL/__pycache__/TarIO.cpython-37.pyc | Bin 1547 -> 0 bytes PIL/__pycache__/TgaImagePlugin.cpython-37.pyc | Bin 3697 -> 0 bytes .../TiffImagePlugin.cpython-37.pyc | Bin 46872 -> 0 bytes PIL/__pycache__/TiffTags.cpython-37.pyc | Bin 9431 -> 0 bytes PIL/__pycache__/WalImageFile.cpython-37.pyc | Bin 2560 -> 0 bytes .../WebPImagePlugin.cpython-37.pyc | Bin 6993 -> 0 bytes PIL/__pycache__/WmfImagePlugin.cpython-37.pyc | Bin 3473 -> 0 bytes .../XVThumbImagePlugin.cpython-37.pyc | Bin 1429 -> 0 bytes PIL/__pycache__/XbmImagePlugin.cpython-37.pyc | Bin 2047 -> 0 bytes PIL/__pycache__/XpmImagePlugin.cpython-37.pyc | Bin 2234 -> 0 bytes PIL/__pycache__/__init__.cpython-37.pyc | Bin 3919 -> 0 bytes PIL/__pycache__/__main__.cpython-37.pyc | Bin 229 -> 0 bytes PIL/__pycache__/_binary.cpython-37.pyc | Bin 2460 -> 0 bytes .../_tkinter_finder.cpython-37.pyc | Bin 414 -> 0 bytes PIL/__pycache__/_util.cpython-37.pyc | Bin 932 -> 0 bytes PIL/__pycache__/_version.cpython-37.pyc | Bin 202 -> 0 bytes PIL/__pycache__/aaaaaaaaaaaaa | 1 - PIL/__pycache__/features.cpython-37.pyc | Bin 8479 -> 0 bytes PIL/_binary.py | 92 - PIL/_imaging.cp37-win_amd64.pyd | Bin 2667520 -> 0 bytes PIL/_imagingcms.cp37-win_amd64.pyd | Bin 239104 -> 0 bytes PIL/_imagingft.cp37-win_amd64.pyd | Bin 736256 -> 0 bytes PIL/_imagingmath.cp37-win_amd64.pyd | Bin 24576 -> 0 bytes PIL/_imagingmorph.cp37-win_amd64.pyd | Bin 13312 -> 0 bytes PIL/_imagingtk.cp37-win_amd64.pyd | Bin 15360 -> 0 bytes PIL/_tkinter_finder.py | 9 - PIL/_util.py | 19 - PIL/_version.py | 2 - PIL/_webp.cp37-win_amd64.pyd | Bin 549888 -> 0 bytes PIL/a | 1 - PIL/features.py | 313 -- win32_py37/pythoncom37.dll | Bin 553984 -> 0 bytes win32_py37/pywintypes37.dll | Bin 139264 -> 0 bytes win32_py37/win32clipboard.pyd | Bin 25600 -> 0 bytes win32_py39/pythoncom39.dll | Bin 556032 -> 0 bytes win32_py39/pywintypes39.dll | Bin 140800 -> 0 bytes win32_py39/win32clipboard.pyd | Bin 25600 -> 0 bytes 199 files changed, 28584 deletions(-) delete mode 100644 PIL/BdfFontFile.py delete mode 100644 PIL/BlpImagePlugin.py delete mode 100644 PIL/BmpImagePlugin.py delete mode 100644 PIL/BufrStubImagePlugin.py delete mode 100644 PIL/ContainerIO.py delete mode 100644 PIL/CurImagePlugin.py delete mode 100644 PIL/DcxImagePlugin.py delete mode 100644 PIL/DdsImagePlugin.py delete mode 100644 PIL/EpsImagePlugin.py delete mode 100644 PIL/ExifTags.py delete mode 100644 PIL/FitsStubImagePlugin.py delete mode 100644 PIL/FliImagePlugin.py delete mode 100644 PIL/FontFile.py delete mode 100644 PIL/FpxImagePlugin.py delete mode 100644 PIL/FtexImagePlugin.py delete mode 100644 PIL/GbrImagePlugin.py delete mode 100644 PIL/GdImageFile.py delete mode 100644 PIL/GifImagePlugin.py delete mode 100644 PIL/GimpGradientFile.py delete mode 100644 PIL/GimpPaletteFile.py delete mode 100644 PIL/GribStubImagePlugin.py delete mode 100644 PIL/Hdf5StubImagePlugin.py delete mode 100644 PIL/IcnsImagePlugin.py delete mode 100644 PIL/IcoImagePlugin.py delete mode 100644 PIL/ImImagePlugin.py delete mode 100644 PIL/Image.py delete mode 100644 PIL/ImageChops.py delete mode 100644 PIL/ImageCms.py delete mode 100644 PIL/ImageColor.py delete mode 100644 PIL/ImageDraw.py delete mode 100644 PIL/ImageDraw2.py delete mode 100644 PIL/ImageEnhance.py delete mode 100644 PIL/ImageFile.py delete mode 100644 PIL/ImageFilter.py delete mode 100644 PIL/ImageFont.py delete mode 100644 PIL/ImageGrab.py delete mode 100644 PIL/ImageMath.py delete mode 100644 PIL/ImageMode.py delete mode 100644 PIL/ImageMorph.py delete mode 100644 PIL/ImageOps.py delete mode 100644 PIL/ImagePalette.py delete mode 100644 PIL/ImagePath.py delete mode 100644 PIL/ImageQt.py delete mode 100644 PIL/ImageSequence.py delete mode 100644 PIL/ImageShow.py delete mode 100644 PIL/ImageStat.py delete mode 100644 PIL/ImageTk.py delete mode 100644 PIL/ImageTransform.py delete mode 100644 PIL/ImageWin.py delete mode 100644 PIL/ImtImagePlugin.py delete mode 100644 PIL/IptcImagePlugin.py delete mode 100644 PIL/Jpeg2KImagePlugin.py delete mode 100644 PIL/JpegImagePlugin.py delete mode 100644 PIL/JpegPresets.py delete mode 100644 PIL/McIdasImagePlugin.py delete mode 100644 PIL/MicImagePlugin.py delete mode 100644 PIL/MpegImagePlugin.py delete mode 100644 PIL/MpoImagePlugin.py delete mode 100644 PIL/MspImagePlugin.py delete mode 100644 PIL/PSDraw.py delete mode 100644 PIL/PaletteFile.py delete mode 100644 PIL/PalmImagePlugin.py delete mode 100644 PIL/PcdImagePlugin.py delete mode 100644 PIL/PcfFontFile.py delete mode 100644 PIL/PcxImagePlugin.py delete mode 100644 PIL/PdfImagePlugin.py delete mode 100644 PIL/PdfParser.py delete mode 100644 PIL/PixarImagePlugin.py delete mode 100644 PIL/PngImagePlugin.py delete mode 100644 PIL/PpmImagePlugin.py delete mode 100644 PIL/PsdImagePlugin.py delete mode 100644 PIL/PyAccess.py delete mode 100644 PIL/SgiImagePlugin.py delete mode 100644 PIL/SpiderImagePlugin.py delete mode 100644 PIL/SunImagePlugin.py delete mode 100644 PIL/TarIO.py delete mode 100644 PIL/TgaImagePlugin.py delete mode 100644 PIL/TiffImagePlugin.py delete mode 100644 PIL/TiffTags.py delete mode 100644 PIL/WalImageFile.py delete mode 100644 PIL/WebPImagePlugin.py delete mode 100644 PIL/WmfImagePlugin.py delete mode 100644 PIL/XVThumbImagePlugin.py delete mode 100644 PIL/XbmImagePlugin.py delete mode 100644 PIL/XpmImagePlugin.py delete mode 100644 PIL/__init__.py delete mode 100644 PIL/__main__.py delete mode 100644 PIL/__pycache__/BdfFontFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/BlpImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/BmpImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/BufrStubImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/ContainerIO.cpython-37.pyc delete mode 100644 PIL/__pycache__/CurImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/DcxImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/DdsImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/EpsImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/ExifTags.cpython-37.pyc delete mode 100644 PIL/__pycache__/FitsStubImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/FliImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/FontFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/FpxImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/FtexImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/GbrImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/GdImageFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/GifImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/GimpGradientFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/GimpPaletteFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/GribStubImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/Hdf5StubImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/IcnsImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/IcoImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/Image.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageChops.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageCms.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageColor.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageDraw.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageDraw2.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageEnhance.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageFilter.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageFont.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageGrab.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageMath.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageMode.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageMorph.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageOps.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImagePalette.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImagePath.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageQt.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageSequence.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageShow.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageStat.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageTk.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageTransform.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImageWin.cpython-37.pyc delete mode 100644 PIL/__pycache__/ImtImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/IptcImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/Jpeg2KImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/JpegImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/JpegPresets.cpython-37.pyc delete mode 100644 PIL/__pycache__/McIdasImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/MicImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/MpegImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/MpoImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/MspImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PSDraw.cpython-37.pyc delete mode 100644 PIL/__pycache__/PaletteFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/PalmImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PcdImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PcfFontFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/PcxImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PdfImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PdfParser.cpython-37.pyc delete mode 100644 PIL/__pycache__/PixarImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PngImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PpmImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PsdImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/PyAccess.cpython-37.pyc delete mode 100644 PIL/__pycache__/SgiImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/SpiderImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/SunImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/TarIO.cpython-37.pyc delete mode 100644 PIL/__pycache__/TgaImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/TiffImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/TiffTags.cpython-37.pyc delete mode 100644 PIL/__pycache__/WalImageFile.cpython-37.pyc delete mode 100644 PIL/__pycache__/WebPImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/WmfImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/XVThumbImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/XbmImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/XpmImagePlugin.cpython-37.pyc delete mode 100644 PIL/__pycache__/__init__.cpython-37.pyc delete mode 100644 PIL/__pycache__/__main__.cpython-37.pyc delete mode 100644 PIL/__pycache__/_binary.cpython-37.pyc delete mode 100644 PIL/__pycache__/_tkinter_finder.cpython-37.pyc delete mode 100644 PIL/__pycache__/_util.cpython-37.pyc delete mode 100644 PIL/__pycache__/_version.cpython-37.pyc delete mode 100644 PIL/__pycache__/aaaaaaaaaaaaa delete mode 100644 PIL/__pycache__/features.cpython-37.pyc delete mode 100644 PIL/_binary.py delete mode 100644 PIL/_imaging.cp37-win_amd64.pyd delete mode 100644 PIL/_imagingcms.cp37-win_amd64.pyd delete mode 100644 PIL/_imagingft.cp37-win_amd64.pyd delete mode 100644 PIL/_imagingmath.cp37-win_amd64.pyd delete mode 100644 PIL/_imagingmorph.cp37-win_amd64.pyd delete mode 100644 PIL/_imagingtk.cp37-win_amd64.pyd delete mode 100644 PIL/_tkinter_finder.py delete mode 100644 PIL/_util.py delete mode 100644 PIL/_version.py delete mode 100644 PIL/_webp.cp37-win_amd64.pyd delete mode 100644 PIL/a delete mode 100644 PIL/features.py delete mode 100644 win32_py37/pythoncom37.dll delete mode 100644 win32_py37/pywintypes37.dll delete mode 100644 win32_py37/win32clipboard.pyd delete mode 100644 win32_py39/pythoncom39.dll delete mode 100644 win32_py39/pywintypes39.dll delete mode 100644 win32_py39/win32clipboard.pyd diff --git a/PIL/BdfFontFile.py b/PIL/BdfFontFile.py deleted file mode 100644 index 102b72e..0000000 --- a/PIL/BdfFontFile.py +++ /dev/null @@ -1,110 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# bitmap distribution font (bdf) file parser -# -# history: -# 1996-05-16 fl created (as bdf2pil) -# 1997-08-25 fl converted to FontFile driver -# 2001-05-25 fl removed bogus __init__ call -# 2002-11-20 fl robustification (from Kevin Cazabon, Dmitry Vasiliev) -# 2003-04-22 fl more robustification (from Graham Dumpleton) -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1997-2003 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -""" -Parse X Bitmap Distribution Format (BDF) -""" - - -from . import FontFile, Image - -bdf_slant = { - "R": "Roman", - "I": "Italic", - "O": "Oblique", - "RI": "Reverse Italic", - "RO": "Reverse Oblique", - "OT": "Other", -} - -bdf_spacing = {"P": "Proportional", "M": "Monospaced", "C": "Cell"} - - -def bdf_char(f): - # skip to STARTCHAR - while True: - s = f.readline() - if not s: - return None - if s[:9] == b"STARTCHAR": - break - id = s[9:].strip().decode("ascii") - - # load symbol properties - props = {} - while True: - s = f.readline() - if not s or s[:6] == b"BITMAP": - break - i = s.find(b" ") - props[s[:i].decode("ascii")] = s[i + 1 : -1].decode("ascii") - - # load bitmap - bitmap = [] - while True: - s = f.readline() - if not s or s[:7] == b"ENDCHAR": - break - bitmap.append(s[:-1]) - bitmap = b"".join(bitmap) - - [x, y, l, d] = [int(p) for p in props["BBX"].split()] - [dx, dy] = [int(p) for p in props["DWIDTH"].split()] - - bbox = (dx, dy), (l, -d - y, x + l, -d), (0, 0, x, y) - - try: - im = Image.frombytes("1", (x, y), bitmap, "hex", "1") - except ValueError: - # deal with zero-width characters - im = Image.new("1", (x, y)) - - return id, int(props["ENCODING"]), bbox, im - - -class BdfFontFile(FontFile.FontFile): - """Font file plugin for the X11 BDF format.""" - - def __init__(self, fp): - super().__init__() - - s = fp.readline() - if s[:13] != b"STARTFONT 2.1": - raise SyntaxError("not a valid BDF file") - - props = {} - comments = [] - - while True: - s = fp.readline() - if not s or s[:13] == b"ENDPROPERTIES": - break - i = s.find(b" ") - props[s[:i].decode("ascii")] = s[i + 1 : -1].decode("ascii") - if s[:i] in [b"COMMENT", b"COPYRIGHT"]: - if s.find(b"LogicalFontDescription") < 0: - comments.append(s[i + 1 : -1].decode("ascii")) - - while True: - c = bdf_char(fp) - if not c: - break - id, ch, (xy, dst, src), im = c - if 0 <= ch < len(self.glyph): - self.glyph[ch] = xy, dst, src, im diff --git a/PIL/BlpImagePlugin.py b/PIL/BlpImagePlugin.py deleted file mode 100644 index d5d7c0e..0000000 --- a/PIL/BlpImagePlugin.py +++ /dev/null @@ -1,422 +0,0 @@ -""" -Blizzard Mipmap Format (.blp) -Jerome Leclanche - -The contents of this file are hereby released in the public domain (CC0) -Full text of the CC0 license: - https://creativecommons.org/publicdomain/zero/1.0/ - -BLP1 files, used mostly in Warcraft III, are not fully supported. -All types of BLP2 files used in World of Warcraft are supported. - -The BLP file structure consists of a header, up to 16 mipmaps of the -texture - -Texture sizes must be powers of two, though the two dimensions do -not have to be equal; 512x256 is valid, but 512x200 is not. -The first mipmap (mipmap #0) is the full size image; each subsequent -mipmap halves both dimensions. The final mipmap should be 1x1. - -BLP files come in many different flavours: -* JPEG-compressed (type == 0) - only supported for BLP1. -* RAW images (type == 1, encoding == 1). Each mipmap is stored as an - array of 8-bit values, one per pixel, left to right, top to bottom. - Each value is an index to the palette. -* DXT-compressed (type == 1, encoding == 2): -- DXT1 compression is used if alpha_encoding == 0. - - An additional alpha bit is used if alpha_depth == 1. - - DXT3 compression is used if alpha_encoding == 1. - - DXT5 compression is used if alpha_encoding == 7. -""" - -import struct -from io import BytesIO - -from . import Image, ImageFile - -BLP_FORMAT_JPEG = 0 - -BLP_ENCODING_UNCOMPRESSED = 1 -BLP_ENCODING_DXT = 2 -BLP_ENCODING_UNCOMPRESSED_RAW_BGRA = 3 - -BLP_ALPHA_ENCODING_DXT1 = 0 -BLP_ALPHA_ENCODING_DXT3 = 1 -BLP_ALPHA_ENCODING_DXT5 = 7 - - -def unpack_565(i): - return (((i >> 11) & 0x1F) << 3, ((i >> 5) & 0x3F) << 2, (i & 0x1F) << 3) - - -def decode_dxt1(data, alpha=False): - """ - input: one "row" of data (i.e. will produce 4*width pixels) - """ - - blocks = len(data) // 8 # number of blocks in row - ret = (bytearray(), bytearray(), bytearray(), bytearray()) - - for block in range(blocks): - # Decode next 8-byte block. - idx = block * 8 - color0, color1, bits = struct.unpack_from("> 2 - - a = 0xFF - if control == 0: - r, g, b = r0, g0, b0 - elif control == 1: - r, g, b = r1, g1, b1 - elif control == 2: - if color0 > color1: - r = (2 * r0 + r1) // 3 - g = (2 * g0 + g1) // 3 - b = (2 * b0 + b1) // 3 - else: - r = (r0 + r1) // 2 - g = (g0 + g1) // 2 - b = (b0 + b1) // 2 - elif control == 3: - if color0 > color1: - r = (2 * r1 + r0) // 3 - g = (2 * g1 + g0) // 3 - b = (2 * b1 + b0) // 3 - else: - r, g, b, a = 0, 0, 0, 0 - - if alpha: - ret[j].extend([r, g, b, a]) - else: - ret[j].extend([r, g, b]) - - return ret - - -def decode_dxt3(data): - """ - input: one "row" of data (i.e. will produce 4*width pixels) - """ - - blocks = len(data) // 16 # number of blocks in row - ret = (bytearray(), bytearray(), bytearray(), bytearray()) - - for block in range(blocks): - idx = block * 16 - block = data[idx : idx + 16] - # Decode next 16-byte block. - bits = struct.unpack_from("<8B", block) - color0, color1 = struct.unpack_from(">= 4 - else: - high = True - a &= 0xF - a *= 17 # We get a value between 0 and 15 - - color_code = (code >> 2 * (4 * j + i)) & 0x03 - - if color_code == 0: - r, g, b = r0, g0, b0 - elif color_code == 1: - r, g, b = r1, g1, b1 - elif color_code == 2: - r = (2 * r0 + r1) // 3 - g = (2 * g0 + g1) // 3 - b = (2 * b0 + b1) // 3 - elif color_code == 3: - r = (2 * r1 + r0) // 3 - g = (2 * g1 + g0) // 3 - b = (2 * b1 + b0) // 3 - - ret[j].extend([r, g, b, a]) - - return ret - - -def decode_dxt5(data): - """ - input: one "row" of data (i.e. will produce 4 * width pixels) - """ - - blocks = len(data) // 16 # number of blocks in row - ret = (bytearray(), bytearray(), bytearray(), bytearray()) - - for block in range(blocks): - idx = block * 16 - block = data[idx : idx + 16] - # Decode next 16-byte block. - a0, a1 = struct.unpack_from("> alphacode_index) & 0x07 - elif alphacode_index == 15: - alphacode = (alphacode2 >> 15) | ((alphacode1 << 1) & 0x06) - else: # alphacode_index >= 18 and alphacode_index <= 45 - alphacode = (alphacode1 >> (alphacode_index - 16)) & 0x07 - - if alphacode == 0: - a = a0 - elif alphacode == 1: - a = a1 - elif a0 > a1: - a = ((8 - alphacode) * a0 + (alphacode - 1) * a1) // 7 - elif alphacode == 6: - a = 0 - elif alphacode == 7: - a = 255 - else: - a = ((6 - alphacode) * a0 + (alphacode - 1) * a1) // 5 - - color_code = (code >> 2 * (4 * j + i)) & 0x03 - - if color_code == 0: - r, g, b = r0, g0, b0 - elif color_code == 1: - r, g, b = r1, g1, b1 - elif color_code == 2: - r = (2 * r0 + r1) // 3 - g = (2 * g0 + g1) // 3 - b = (2 * b0 + b1) // 3 - elif color_code == 3: - r = (2 * r1 + r0) // 3 - g = (2 * g1 + g0) // 3 - b = (2 * b1 + b0) // 3 - - ret[j].extend([r, g, b, a]) - - return ret - - -class BLPFormatError(NotImplementedError): - pass - - -class BlpImageFile(ImageFile.ImageFile): - """ - Blizzard Mipmap Format - """ - - format = "BLP" - format_description = "Blizzard Mipmap Format" - - def _open(self): - self.magic = self.fp.read(4) - self._read_blp_header() - - if self.magic == b"BLP1": - decoder = "BLP1" - self.mode = "RGB" - elif self.magic == b"BLP2": - decoder = "BLP2" - self.mode = "RGBA" if self._blp_alpha_depth else "RGB" - else: - raise BLPFormatError(f"Bad BLP magic {repr(self.magic)}") - - self.tile = [(decoder, (0, 0) + self.size, 0, (self.mode, 0, 1))] - - def _read_blp_header(self): - (self._blp_compression,) = struct.unpack(" mode, rawmode - 1: ("P", "P;1"), - 4: ("P", "P;4"), - 8: ("P", "P"), - 16: ("RGB", "BGR;15"), - 24: ("RGB", "BGR"), - 32: ("RGB", "BGRX"), -} - - -def _accept(prefix): - return prefix[:2] == b"BM" - - -def _dib_accept(prefix): - return i32(prefix) in [12, 40, 64, 108, 124] - - -# ============================================================================= -# Image plugin for the Windows BMP format. -# ============================================================================= -class BmpImageFile(ImageFile.ImageFile): - """ Image plugin for the Windows Bitmap format (BMP) """ - - # ------------------------------------------------------------- Description - format_description = "Windows Bitmap" - format = "BMP" - - # -------------------------------------------------- BMP Compression values - COMPRESSIONS = {"RAW": 0, "RLE8": 1, "RLE4": 2, "BITFIELDS": 3, "JPEG": 4, "PNG": 5} - for k, v in COMPRESSIONS.items(): - vars()[k] = v - - def _bitmap(self, header=0, offset=0): - """ Read relevant info about the BMP """ - read, seek = self.fp.read, self.fp.seek - if header: - seek(header) - file_info = {} - # read bmp header size @offset 14 (this is part of the header size) - file_info["header_size"] = i32(read(4)) - file_info["direction"] = -1 - - # -------------------- If requested, read header at a specific position - # read the rest of the bmp header, without its size - header_data = ImageFile._safe_read(self.fp, file_info["header_size"] - 4) - - # -------------------------------------------------- IBM OS/2 Bitmap v1 - # ----- This format has different offsets because of width/height types - if file_info["header_size"] == 12: - file_info["width"] = i16(header_data, 0) - file_info["height"] = i16(header_data, 2) - file_info["planes"] = i16(header_data, 4) - file_info["bits"] = i16(header_data, 6) - file_info["compression"] = self.RAW - file_info["palette_padding"] = 3 - - # --------------------------------------------- Windows Bitmap v2 to v5 - # v3, OS/2 v2, v4, v5 - elif file_info["header_size"] in (40, 64, 108, 124): - file_info["y_flip"] = header_data[7] == 0xFF - file_info["direction"] = 1 if file_info["y_flip"] else -1 - file_info["width"] = i32(header_data, 0) - file_info["height"] = ( - i32(header_data, 4) - if not file_info["y_flip"] - else 2 ** 32 - i32(header_data, 4) - ) - file_info["planes"] = i16(header_data, 8) - file_info["bits"] = i16(header_data, 10) - file_info["compression"] = i32(header_data, 12) - # byte size of pixel data - file_info["data_size"] = i32(header_data, 16) - file_info["pixels_per_meter"] = ( - i32(header_data, 20), - i32(header_data, 24), - ) - file_info["colors"] = i32(header_data, 28) - file_info["palette_padding"] = 4 - self.info["dpi"] = tuple( - int(x / 39.3701 + 0.5) for x in file_info["pixels_per_meter"] - ) - if file_info["compression"] == self.BITFIELDS: - if len(header_data) >= 52: - for idx, mask in enumerate( - ["r_mask", "g_mask", "b_mask", "a_mask"] - ): - file_info[mask] = i32(header_data, 36 + idx * 4) - else: - # 40 byte headers only have the three components in the - # bitfields masks, ref: - # https://msdn.microsoft.com/en-us/library/windows/desktop/dd183376(v=vs.85).aspx - # See also - # https://github.com/python-pillow/Pillow/issues/1293 - # There is a 4th component in the RGBQuad, in the alpha - # location, but it is listed as a reserved component, - # and it is not generally an alpha channel - file_info["a_mask"] = 0x0 - for mask in ["r_mask", "g_mask", "b_mask"]: - file_info[mask] = i32(read(4)) - file_info["rgb_mask"] = ( - file_info["r_mask"], - file_info["g_mask"], - file_info["b_mask"], - ) - file_info["rgba_mask"] = ( - file_info["r_mask"], - file_info["g_mask"], - file_info["b_mask"], - file_info["a_mask"], - ) - else: - raise OSError(f"Unsupported BMP header type ({file_info['header_size']})") - - # ------------------ Special case : header is reported 40, which - # ---------------------- is shorter than real size for bpp >= 16 - self._size = file_info["width"], file_info["height"] - - # ------- If color count was not found in the header, compute from bits - file_info["colors"] = ( - file_info["colors"] - if file_info.get("colors", 0) - else (1 << file_info["bits"]) - ) - - # ---------------------- Check bit depth for unusual unsupported values - self.mode, raw_mode = BIT2MODE.get(file_info["bits"], (None, None)) - if self.mode is None: - raise OSError(f"Unsupported BMP pixel depth ({file_info['bits']})") - - # ---------------- Process BMP with Bitfields compression (not palette) - if file_info["compression"] == self.BITFIELDS: - SUPPORTED = { - 32: [ - (0xFF0000, 0xFF00, 0xFF, 0x0), - (0xFF0000, 0xFF00, 0xFF, 0xFF000000), - (0xFF, 0xFF00, 0xFF0000, 0xFF000000), - (0x0, 0x0, 0x0, 0x0), - (0xFF000000, 0xFF0000, 0xFF00, 0x0), - ], - 24: [(0xFF0000, 0xFF00, 0xFF)], - 16: [(0xF800, 0x7E0, 0x1F), (0x7C00, 0x3E0, 0x1F)], - } - MASK_MODES = { - (32, (0xFF0000, 0xFF00, 0xFF, 0x0)): "BGRX", - (32, (0xFF000000, 0xFF0000, 0xFF00, 0x0)): "XBGR", - (32, (0xFF, 0xFF00, 0xFF0000, 0xFF000000)): "RGBA", - (32, (0xFF0000, 0xFF00, 0xFF, 0xFF000000)): "BGRA", - (32, (0x0, 0x0, 0x0, 0x0)): "BGRA", - (24, (0xFF0000, 0xFF00, 0xFF)): "BGR", - (16, (0xF800, 0x7E0, 0x1F)): "BGR;16", - (16, (0x7C00, 0x3E0, 0x1F)): "BGR;15", - } - if file_info["bits"] in SUPPORTED: - if ( - file_info["bits"] == 32 - and file_info["rgba_mask"] in SUPPORTED[file_info["bits"]] - ): - raw_mode = MASK_MODES[(file_info["bits"], file_info["rgba_mask"])] - self.mode = "RGBA" if "A" in raw_mode else self.mode - elif ( - file_info["bits"] in (24, 16) - and file_info["rgb_mask"] in SUPPORTED[file_info["bits"]] - ): - raw_mode = MASK_MODES[(file_info["bits"], file_info["rgb_mask"])] - else: - raise OSError("Unsupported BMP bitfields layout") - else: - raise OSError("Unsupported BMP bitfields layout") - elif file_info["compression"] == self.RAW: - if file_info["bits"] == 32 and header == 22: # 32-bit .cur offset - raw_mode, self.mode = "BGRA", "RGBA" - else: - raise OSError(f"Unsupported BMP compression ({file_info['compression']})") - - # --------------- Once the header is processed, process the palette/LUT - if self.mode == "P": # Paletted for 1, 4 and 8 bit images - - # ---------------------------------------------------- 1-bit images - if not (0 < file_info["colors"] <= 65536): - raise OSError(f"Unsupported BMP Palette size ({file_info['colors']})") - else: - padding = file_info["palette_padding"] - palette = read(padding * file_info["colors"]) - greyscale = True - indices = ( - (0, 255) - if file_info["colors"] == 2 - else list(range(file_info["colors"])) - ) - - # ----------------- Check if greyscale and ignore palette if so - for ind, val in enumerate(indices): - rgb = palette[ind * padding : ind * padding + 3] - if rgb != o8(val) * 3: - greyscale = False - - # ------- If all colors are grey, white or black, ditch palette - if greyscale: - self.mode = "1" if file_info["colors"] == 2 else "L" - raw_mode = self.mode - else: - self.mode = "P" - self.palette = ImagePalette.raw( - "BGRX" if padding == 4 else "BGR", palette - ) - - # ---------------------------- Finally set the tile data for the plugin - self.info["compression"] = file_info["compression"] - self.tile = [ - ( - "raw", - (0, 0, file_info["width"], file_info["height"]), - offset or self.fp.tell(), - ( - raw_mode, - ((file_info["width"] * file_info["bits"] + 31) >> 3) & (~3), - file_info["direction"], - ), - ) - ] - - def _open(self): - """ Open file, check magic number and read header """ - # read 14 bytes: magic number, filesize, reserved, header final offset - head_data = self.fp.read(14) - # choke if the file does not have the required magic bytes - if not _accept(head_data): - raise SyntaxError("Not a BMP file") - # read the start position of the BMP image data (u32) - offset = i32(head_data, 10) - # load bitmap information (offset=raster info) - self._bitmap(offset=offset) - - -# ============================================================================= -# Image plugin for the DIB format (BMP alias) -# ============================================================================= -class DibImageFile(BmpImageFile): - - format = "DIB" - format_description = "Windows Bitmap" - - def _open(self): - self._bitmap() - - -# -# -------------------------------------------------------------------- -# Write BMP file - - -SAVE = { - "1": ("1", 1, 2), - "L": ("L", 8, 256), - "P": ("P", 8, 256), - "RGB": ("BGR", 24, 0), - "RGBA": ("BGRA", 32, 0), -} - - -def _dib_save(im, fp, filename): - _save(im, fp, filename, False) - - -def _save(im, fp, filename, bitmap_header=True): - try: - rawmode, bits, colors = SAVE[im.mode] - except KeyError as e: - raise OSError(f"cannot write mode {im.mode} as BMP") from e - - info = im.encoderinfo - - dpi = info.get("dpi", (96, 96)) - - # 1 meter == 39.3701 inches - ppm = tuple(map(lambda x: int(x * 39.3701 + 0.5), dpi)) - - stride = ((im.size[0] * bits + 7) // 8 + 3) & (~3) - header = 40 # or 64 for OS/2 version 2 - image = stride * im.size[1] - - # bitmap header - if bitmap_header: - offset = 14 + header + colors * 4 - file_size = offset + image - if file_size > 2 ** 32 - 1: - raise ValueError("File size is too large for the BMP format") - fp.write( - b"BM" # file type (magic) - + o32(file_size) # file size - + o32(0) # reserved - + o32(offset) # image data offset - ) - - # bitmap info header - fp.write( - o32(header) # info header size - + o32(im.size[0]) # width - + o32(im.size[1]) # height - + o16(1) # planes - + o16(bits) # depth - + o32(0) # compression (0=uncompressed) - + o32(image) # size of bitmap - + o32(ppm[0]) # resolution - + o32(ppm[1]) # resolution - + o32(colors) # colors used - + o32(colors) # colors important - ) - - fp.write(b"\0" * (header - 40)) # padding (for OS/2 format) - - if im.mode == "1": - for i in (0, 255): - fp.write(o8(i) * 4) - elif im.mode == "L": - for i in range(256): - fp.write(o8(i) * 4) - elif im.mode == "P": - fp.write(im.im.getpalette("RGB", "BGRX")) - - ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, stride, -1))]) - - -# -# -------------------------------------------------------------------- -# Registry - - -Image.register_open(BmpImageFile.format, BmpImageFile, _accept) -Image.register_save(BmpImageFile.format, _save) - -Image.register_extension(BmpImageFile.format, ".bmp") - -Image.register_mime(BmpImageFile.format, "image/bmp") - -Image.register_open(DibImageFile.format, DibImageFile, _dib_accept) -Image.register_save(DibImageFile.format, _dib_save) - -Image.register_extension(DibImageFile.format, ".dib") - -Image.register_mime(DibImageFile.format, "image/bmp") diff --git a/PIL/BufrStubImagePlugin.py b/PIL/BufrStubImagePlugin.py deleted file mode 100644 index 48f21e1..0000000 --- a/PIL/BufrStubImagePlugin.py +++ /dev/null @@ -1,73 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# BUFR stub adapter -# -# Copyright (c) 1996-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -from . import Image, ImageFile - -_handler = None - - -def register_handler(handler): - """ - Install application-specific BUFR image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -# -------------------------------------------------------------------- -# Image adapter - - -def _accept(prefix): - return prefix[:4] == b"BUFR" or prefix[:4] == b"ZCZC" - - -class BufrStubImageFile(ImageFile.StubImageFile): - - format = "BUFR" - format_description = "BUFR" - - def _open(self): - - offset = self.fp.tell() - - if not _accept(self.fp.read(4)): - raise SyntaxError("Not a BUFR file") - - self.fp.seek(offset) - - # make something up - self.mode = "F" - self._size = 1, 1 - - loader = self._load() - if loader: - loader.open(self) - - def _load(self): - return _handler - - -def _save(im, fp, filename): - if _handler is None or not hasattr("_handler", "save"): - raise OSError("BUFR save handler not installed") - _handler.save(im, fp, filename) - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(BufrStubImageFile.format, BufrStubImageFile, _accept) -Image.register_save(BufrStubImageFile.format, _save) - -Image.register_extension(BufrStubImageFile.format, ".bufr") diff --git a/PIL/ContainerIO.py b/PIL/ContainerIO.py deleted file mode 100644 index 45e80b3..0000000 --- a/PIL/ContainerIO.py +++ /dev/null @@ -1,120 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# a class to read from a container file -# -# History: -# 1995-06-18 fl Created -# 1995-09-07 fl Added readline(), readlines() -# -# Copyright (c) 1997-2001 by Secret Labs AB -# Copyright (c) 1995 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - - -import io - - -class ContainerIO: - """ - A file object that provides read access to a part of an existing - file (for example a TAR file). - """ - - def __init__(self, file, offset, length): - """ - Create file object. - - :param file: Existing file. - :param offset: Start of region, in bytes. - :param length: Size of region, in bytes. - """ - self.fh = file - self.pos = 0 - self.offset = offset - self.length = length - self.fh.seek(offset) - - ## - # Always false. - - def isatty(self): - return False - - def seek(self, offset, mode=io.SEEK_SET): - """ - Move file pointer. - - :param offset: Offset in bytes. - :param mode: Starting position. Use 0 for beginning of region, 1 - for current offset, and 2 for end of region. You cannot move - the pointer outside the defined region. - """ - if mode == 1: - self.pos = self.pos + offset - elif mode == 2: - self.pos = self.length + offset - else: - self.pos = offset - # clamp - self.pos = max(0, min(self.pos, self.length)) - self.fh.seek(self.offset + self.pos) - - def tell(self): - """ - Get current file pointer. - - :returns: Offset from start of region, in bytes. - """ - return self.pos - - def read(self, n=0): - """ - Read data. - - :param n: Number of bytes to read. If omitted or zero, - read until end of region. - :returns: An 8-bit string. - """ - if n: - n = min(n, self.length - self.pos) - else: - n = self.length - self.pos - if not n: # EOF - return b"" if "b" in self.fh.mode else "" - self.pos = self.pos + n - return self.fh.read(n) - - def readline(self): - """ - Read a line of text. - - :returns: An 8-bit string. - """ - s = b"" if "b" in self.fh.mode else "" - newline_character = b"\n" if "b" in self.fh.mode else "\n" - while True: - c = self.read(1) - if not c: - break - s = s + c - if c == newline_character: - break - return s - - def readlines(self): - """ - Read multiple lines of text. - - :returns: A list of 8-bit strings. - """ - lines = [] - while True: - s = self.readline() - if not s: - break - lines.append(s) - return lines diff --git a/PIL/CurImagePlugin.py b/PIL/CurImagePlugin.py deleted file mode 100644 index 42af5ca..0000000 --- a/PIL/CurImagePlugin.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Windows Cursor support for PIL -# -# notes: -# uses BmpImagePlugin.py to read the bitmap data. -# -# history: -# 96-05-27 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# -from . import BmpImagePlugin, Image -from ._binary import i16le as i16 -from ._binary import i32le as i32 - -# -# -------------------------------------------------------------------- - - -def _accept(prefix): - return prefix[:4] == b"\0\0\2\0" - - -## -# Image plugin for Windows Cursor files. - - -class CurImageFile(BmpImagePlugin.BmpImageFile): - - format = "CUR" - format_description = "Windows Cursor" - - def _open(self): - - offset = self.fp.tell() - - # check magic - s = self.fp.read(6) - if not _accept(s): - raise SyntaxError("not a CUR file") - - # pick the largest cursor in the file - m = b"" - for i in range(i16(s, 4)): - s = self.fp.read(16) - if not m: - m = s - elif s[0] > m[0] and s[1] > m[1]: - m = s - if not m: - raise TypeError("No cursors were found") - - # load as bitmap - self._bitmap(i32(m, 12) + offset) - - # patch up the bitmap height - self._size = self.size[0], self.size[1] // 2 - d, e, o, a = self.tile[0] - self.tile[0] = d, (0, 0) + self.size, o, a - - return - - -# -# -------------------------------------------------------------------- - -Image.register_open(CurImageFile.format, CurImageFile, _accept) - -Image.register_extension(CurImageFile.format, ".cur") diff --git a/PIL/DcxImagePlugin.py b/PIL/DcxImagePlugin.py deleted file mode 100644 index de21db8..0000000 --- a/PIL/DcxImagePlugin.py +++ /dev/null @@ -1,89 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# DCX file handling -# -# DCX is a container file format defined by Intel, commonly used -# for fax applications. Each DCX file consists of a directory -# (a list of file offsets) followed by a set of (usually 1-bit) -# PCX files. -# -# History: -# 1995-09-09 fl Created -# 1996-03-20 fl Properly derived from PcxImageFile. -# 1998-07-15 fl Renamed offset attribute to avoid name clash -# 2002-07-30 fl Fixed file handling -# -# Copyright (c) 1997-98 by Secret Labs AB. -# Copyright (c) 1995-96 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -from . import Image -from ._binary import i32le as i32 -from .PcxImagePlugin import PcxImageFile - -MAGIC = 0x3ADE68B1 # QUIZ: what's this value, then? - - -def _accept(prefix): - return len(prefix) >= 4 and i32(prefix) == MAGIC - - -## -# Image plugin for the Intel DCX format. - - -class DcxImageFile(PcxImageFile): - - format = "DCX" - format_description = "Intel DCX" - _close_exclusive_fp_after_loading = False - - def _open(self): - - # Header - s = self.fp.read(4) - if not _accept(s): - raise SyntaxError("not a DCX file") - - # Component directory - self._offset = [] - for i in range(1024): - offset = i32(self.fp.read(4)) - if not offset: - break - self._offset.append(offset) - - self.__fp = self.fp - self.frame = None - self.n_frames = len(self._offset) - self.is_animated = self.n_frames > 1 - self.seek(0) - - def seek(self, frame): - if not self._seek_check(frame): - return - self.frame = frame - self.fp = self.__fp - self.fp.seek(self._offset[frame]) - PcxImageFile._open(self) - - def tell(self): - return self.frame - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -Image.register_open(DcxImageFile.format, DcxImageFile, _accept) - -Image.register_extension(DcxImageFile.format, ".dcx") diff --git a/PIL/DdsImagePlugin.py b/PIL/DdsImagePlugin.py deleted file mode 100644 index df2d006..0000000 --- a/PIL/DdsImagePlugin.py +++ /dev/null @@ -1,190 +0,0 @@ -""" -A Pillow loader for .dds files (S3TC-compressed aka DXTC) -Jerome Leclanche - -Documentation: - https://web.archive.org/web/20170802060935/http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt - -The contents of this file are hereby released in the public domain (CC0) -Full text of the CC0 license: - https://creativecommons.org/publicdomain/zero/1.0/ -""" - -import struct -from io import BytesIO - -from . import Image, ImageFile - -# Magic ("DDS ") -DDS_MAGIC = 0x20534444 - -# DDS flags -DDSD_CAPS = 0x1 -DDSD_HEIGHT = 0x2 -DDSD_WIDTH = 0x4 -DDSD_PITCH = 0x8 -DDSD_PIXELFORMAT = 0x1000 -DDSD_MIPMAPCOUNT = 0x20000 -DDSD_LINEARSIZE = 0x80000 -DDSD_DEPTH = 0x800000 - -# DDS caps -DDSCAPS_COMPLEX = 0x8 -DDSCAPS_TEXTURE = 0x1000 -DDSCAPS_MIPMAP = 0x400000 - -DDSCAPS2_CUBEMAP = 0x200 -DDSCAPS2_CUBEMAP_POSITIVEX = 0x400 -DDSCAPS2_CUBEMAP_NEGATIVEX = 0x800 -DDSCAPS2_CUBEMAP_POSITIVEY = 0x1000 -DDSCAPS2_CUBEMAP_NEGATIVEY = 0x2000 -DDSCAPS2_CUBEMAP_POSITIVEZ = 0x4000 -DDSCAPS2_CUBEMAP_NEGATIVEZ = 0x8000 -DDSCAPS2_VOLUME = 0x200000 - -# Pixel Format -DDPF_ALPHAPIXELS = 0x1 -DDPF_ALPHA = 0x2 -DDPF_FOURCC = 0x4 -DDPF_PALETTEINDEXED8 = 0x20 -DDPF_RGB = 0x40 -DDPF_LUMINANCE = 0x20000 - - -# dds.h - -DDS_FOURCC = DDPF_FOURCC -DDS_RGB = DDPF_RGB -DDS_RGBA = DDPF_RGB | DDPF_ALPHAPIXELS -DDS_LUMINANCE = DDPF_LUMINANCE -DDS_LUMINANCEA = DDPF_LUMINANCE | DDPF_ALPHAPIXELS -DDS_ALPHA = DDPF_ALPHA -DDS_PAL8 = DDPF_PALETTEINDEXED8 - -DDS_HEADER_FLAGS_TEXTURE = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT -DDS_HEADER_FLAGS_MIPMAP = DDSD_MIPMAPCOUNT -DDS_HEADER_FLAGS_VOLUME = DDSD_DEPTH -DDS_HEADER_FLAGS_PITCH = DDSD_PITCH -DDS_HEADER_FLAGS_LINEARSIZE = DDSD_LINEARSIZE - -DDS_HEIGHT = DDSD_HEIGHT -DDS_WIDTH = DDSD_WIDTH - -DDS_SURFACE_FLAGS_TEXTURE = DDSCAPS_TEXTURE -DDS_SURFACE_FLAGS_MIPMAP = DDSCAPS_COMPLEX | DDSCAPS_MIPMAP -DDS_SURFACE_FLAGS_CUBEMAP = DDSCAPS_COMPLEX - -DDS_CUBEMAP_POSITIVEX = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEX -DDS_CUBEMAP_NEGATIVEX = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEX -DDS_CUBEMAP_POSITIVEY = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEY -DDS_CUBEMAP_NEGATIVEY = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEY -DDS_CUBEMAP_POSITIVEZ = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_POSITIVEZ -DDS_CUBEMAP_NEGATIVEZ = DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_NEGATIVEZ - - -# DXT1 -DXT1_FOURCC = 0x31545844 - -# DXT3 -DXT3_FOURCC = 0x33545844 - -# DXT5 -DXT5_FOURCC = 0x35545844 - - -# dxgiformat.h - -DXGI_FORMAT_R8G8B8A8_TYPELESS = 27 -DXGI_FORMAT_R8G8B8A8_UNORM = 28 -DXGI_FORMAT_R8G8B8A8_UNORM_SRGB = 29 -DXGI_FORMAT_BC7_TYPELESS = 97 -DXGI_FORMAT_BC7_UNORM = 98 -DXGI_FORMAT_BC7_UNORM_SRGB = 99 - - -class DdsImageFile(ImageFile.ImageFile): - format = "DDS" - format_description = "DirectDraw Surface" - - def _open(self): - magic, header_size = struct.unpack(" 0: - s = fp.read(min(lengthfile, 100 * 1024)) - if not s: - break - lengthfile -= len(s) - f.write(s) - - # Build Ghostscript command - command = [ - "gs", - "-q", # quiet mode - "-g%dx%d" % size, # set output geometry (pixels) - "-r%fx%f" % res, # set input DPI (dots per inch) - "-dBATCH", # exit after processing - "-dNOPAUSE", # don't pause between pages - "-dSAFER", # safe mode - "-sDEVICE=ppmraw", # ppm driver - f"-sOutputFile={outfile}", # output file - # adjust for image origin - "-c", - f"{-bbox[0]} {-bbox[1]} translate", - "-f", - infile, # input file - # showpage (see https://bugs.ghostscript.com/show_bug.cgi?id=698272) - "-c", - "showpage", - ] - - if gs_windows_binary is not None: - if not gs_windows_binary: - raise OSError("Unable to locate Ghostscript on paths") - command[0] = gs_windows_binary - - # push data through Ghostscript - try: - startupinfo = None - if sys.platform.startswith("win"): - startupinfo = subprocess.STARTUPINFO() - startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW - subprocess.check_call(command, startupinfo=startupinfo) - out_im = Image.open(outfile) - out_im.load() - finally: - try: - os.unlink(outfile) - if infile_temp: - os.unlink(infile_temp) - except OSError: - pass - - im = out_im.im.copy() - out_im.close() - return im - - -class PSFile: - """ - Wrapper for bytesio object that treats either CR or LF as end of line. - """ - - def __init__(self, fp): - self.fp = fp - self.char = None - - def seek(self, offset, whence=io.SEEK_SET): - self.char = None - self.fp.seek(offset, whence) - - def readline(self): - s = self.char or b"" - self.char = None - - c = self.fp.read(1) - while c not in b"\r\n": - s = s + c - c = self.fp.read(1) - - self.char = self.fp.read(1) - # line endings can be 1 or 2 of \r \n, in either order - if self.char in b"\r\n": - self.char = None - - return s.decode("latin-1") - - -def _accept(prefix): - return prefix[:4] == b"%!PS" or (len(prefix) >= 4 and i32(prefix) == 0xC6D3D0C5) - - -## -# Image plugin for Encapsulated PostScript. This plugin supports only -# a few variants of this format. - - -class EpsImageFile(ImageFile.ImageFile): - """EPS File Parser for the Python Imaging Library""" - - format = "EPS" - format_description = "Encapsulated Postscript" - - mode_map = {1: "L", 2: "LAB", 3: "RGB", 4: "CMYK"} - - def _open(self): - (length, offset) = self._find_offset(self.fp) - - # Rewrap the open file pointer in something that will - # convert line endings and decode to latin-1. - fp = PSFile(self.fp) - - # go to offset - start of "%!PS" - fp.seek(offset) - - box = None - - self.mode = "RGB" - self._size = 1, 1 # FIXME: huh? - - # - # Load EPS header - - s_raw = fp.readline() - s = s_raw.strip("\r\n") - - while s_raw: - if s: - if len(s) > 255: - raise SyntaxError("not an EPS file") - - try: - m = split.match(s) - except re.error as e: - raise SyntaxError("not an EPS file") from e - - if m: - k, v = m.group(1, 2) - self.info[k] = v - if k == "BoundingBox": - try: - # Note: The DSC spec says that BoundingBox - # fields should be integers, but some drivers - # put floating point values there anyway. - box = [int(float(i)) for i in v.split()] - self._size = box[2] - box[0], box[3] - box[1] - self.tile = [ - ("eps", (0, 0) + self.size, offset, (length, box)) - ] - except Exception: - pass - - else: - m = field.match(s) - if m: - k = m.group(1) - - if k == "EndComments": - break - if k[:8] == "PS-Adobe": - self.info[k[:8]] = k[9:] - else: - self.info[k] = "" - elif s[0] == "%": - # handle non-DSC PostScript comments that some - # tools mistakenly put in the Comments section - pass - else: - raise OSError("bad EPS header") - - s_raw = fp.readline() - s = s_raw.strip("\r\n") - - if s and s[:1] != "%": - break - - # - # Scan for an "ImageData" descriptor - - while s[:1] == "%": - - if len(s) > 255: - raise SyntaxError("not an EPS file") - - if s[:11] == "%ImageData:": - # Encoded bitmapped image. - x, y, bi, mo = s[11:].split(None, 7)[:4] - - if int(bi) != 8: - break - try: - self.mode = self.mode_map[int(mo)] - except ValueError: - break - - self._size = int(x), int(y) - return - - s = fp.readline().strip("\r\n") - if not s: - break - - if not box: - raise OSError("cannot determine EPS bounding box") - - def _find_offset(self, fp): - - s = fp.read(160) - - if s[:4] == b"%!PS": - # for HEAD without binary preview - fp.seek(0, io.SEEK_END) - length = fp.tell() - offset = 0 - elif i32(s, 0) == 0xC6D3D0C5: - # FIX for: Some EPS file not handled correctly / issue #302 - # EPS can contain binary data - # or start directly with latin coding - # more info see: - # https://web.archive.org/web/20160528181353/http://partners.adobe.com/public/developer/en/ps/5002.EPSF_Spec.pdf - offset = i32(s, 4) - length = i32(s, 8) - else: - raise SyntaxError("not an EPS file") - - return (length, offset) - - def load(self, scale=1): - # Load EPS via Ghostscript - if not self.tile: - return - self.im = Ghostscript(self.tile, self.size, self.fp, scale) - self.mode = self.im.mode - self._size = self.im.size - self.tile = [] - - def load_seek(self, *args, **kwargs): - # we can't incrementally load, so force ImageFile.parser to - # use our custom load method by defining this method. - pass - - -# -# -------------------------------------------------------------------- - - -def _save(im, fp, filename, eps=1): - """EPS Writer for the Python Imaging Library.""" - - # - # make sure image data is available - im.load() - - # - # determine PostScript image mode - if im.mode == "L": - operator = (8, 1, "image") - elif im.mode == "RGB": - operator = (8, 3, "false 3 colorimage") - elif im.mode == "CMYK": - operator = (8, 4, "false 4 colorimage") - else: - raise ValueError("image mode is not supported") - - base_fp = fp - wrapped_fp = False - if fp != sys.stdout: - fp = io.TextIOWrapper(fp, encoding="latin-1") - wrapped_fp = True - - try: - if eps: - # - # write EPS header - fp.write("%!PS-Adobe-3.0 EPSF-3.0\n") - fp.write("%%Creator: PIL 0.1 EpsEncode\n") - # fp.write("%%CreationDate: %s"...) - fp.write("%%%%BoundingBox: 0 0 %d %d\n" % im.size) - fp.write("%%Pages: 1\n") - fp.write("%%EndComments\n") - fp.write("%%Page: 1 1\n") - fp.write("%%ImageData: %d %d " % im.size) - fp.write('%d %d 0 1 1 "%s"\n' % operator) - - # - # image header - fp.write("gsave\n") - fp.write("10 dict begin\n") - fp.write(f"/buf {im.size[0] * operator[1]} string def\n") - fp.write("%d %d scale\n" % im.size) - fp.write("%d %d 8\n" % im.size) # <= bits - fp.write(f"[{im.size[0]} 0 0 -{im.size[1]} 0 {im.size[1]}]\n") - fp.write("{ currentfile buf readhexstring pop } bind\n") - fp.write(operator[2] + "\n") - if hasattr(fp, "flush"): - fp.flush() - - ImageFile._save(im, base_fp, [("eps", (0, 0) + im.size, 0, None)]) - - fp.write("\n%%%%EndBinary\n") - fp.write("grestore end\n") - if hasattr(fp, "flush"): - fp.flush() - finally: - if wrapped_fp: - fp.detach() - - -# -# -------------------------------------------------------------------- - - -Image.register_open(EpsImageFile.format, EpsImageFile, _accept) - -Image.register_save(EpsImageFile.format, _save) - -Image.register_extensions(EpsImageFile.format, [".ps", ".eps"]) - -Image.register_mime(EpsImageFile.format, "application/postscript") diff --git a/PIL/ExifTags.py b/PIL/ExifTags.py deleted file mode 100644 index f1c037e..0000000 --- a/PIL/ExifTags.py +++ /dev/null @@ -1,318 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# EXIF tags -# -# Copyright (c) 2003 by Secret Labs AB -# -# See the README file for information on usage and redistribution. -# - -""" -This module provides constants and clear-text names for various -well-known EXIF tags. -""" - - -TAGS = { - # possibly incomplete - 0x000B: "ProcessingSoftware", - 0x00FE: "NewSubfileType", - 0x00FF: "SubfileType", - 0x0100: "ImageWidth", - 0x0101: "ImageLength", - 0x0102: "BitsPerSample", - 0x0103: "Compression", - 0x0106: "PhotometricInterpretation", - 0x0107: "Thresholding", - 0x0108: "CellWidth", - 0x0109: "CellLength", - 0x010A: "FillOrder", - 0x010D: "DocumentName", - 0x010E: "ImageDescription", - 0x010F: "Make", - 0x0110: "Model", - 0x0111: "StripOffsets", - 0x0112: "Orientation", - 0x0115: "SamplesPerPixel", - 0x0116: "RowsPerStrip", - 0x0117: "StripByteCounts", - 0x0118: "MinSampleValue", - 0x0119: "MaxSampleValue", - 0x011A: "XResolution", - 0x011B: "YResolution", - 0x011C: "PlanarConfiguration", - 0x011D: "PageName", - 0x0120: "FreeOffsets", - 0x0121: "FreeByteCounts", - 0x0122: "GrayResponseUnit", - 0x0123: "GrayResponseCurve", - 0x0124: "T4Options", - 0x0125: "T6Options", - 0x0128: "ResolutionUnit", - 0x0129: "PageNumber", - 0x012D: "TransferFunction", - 0x0131: "Software", - 0x0132: "DateTime", - 0x013B: "Artist", - 0x013C: "HostComputer", - 0x013D: "Predictor", - 0x013E: "WhitePoint", - 0x013F: "PrimaryChromaticities", - 0x0140: "ColorMap", - 0x0141: "HalftoneHints", - 0x0142: "TileWidth", - 0x0143: "TileLength", - 0x0144: "TileOffsets", - 0x0145: "TileByteCounts", - 0x014A: "SubIFDs", - 0x014C: "InkSet", - 0x014D: "InkNames", - 0x014E: "NumberOfInks", - 0x0150: "DotRange", - 0x0151: "TargetPrinter", - 0x0152: "ExtraSamples", - 0x0153: "SampleFormat", - 0x0154: "SMinSampleValue", - 0x0155: "SMaxSampleValue", - 0x0156: "TransferRange", - 0x0157: "ClipPath", - 0x0158: "XClipPathUnits", - 0x0159: "YClipPathUnits", - 0x015A: "Indexed", - 0x015B: "JPEGTables", - 0x015F: "OPIProxy", - 0x0200: "JPEGProc", - 0x0201: "JpegIFOffset", - 0x0202: "JpegIFByteCount", - 0x0203: "JpegRestartInterval", - 0x0205: "JpegLosslessPredictors", - 0x0206: "JpegPointTransforms", - 0x0207: "JpegQTables", - 0x0208: "JpegDCTables", - 0x0209: "JpegACTables", - 0x0211: "YCbCrCoefficients", - 0x0212: "YCbCrSubSampling", - 0x0213: "YCbCrPositioning", - 0x0214: "ReferenceBlackWhite", - 0x02BC: "XMLPacket", - 0x1000: "RelatedImageFileFormat", - 0x1001: "RelatedImageWidth", - 0x1002: "RelatedImageLength", - 0x4746: "Rating", - 0x4749: "RatingPercent", - 0x800D: "ImageID", - 0x828D: "CFARepeatPatternDim", - 0x828E: "CFAPattern", - 0x828F: "BatteryLevel", - 0x8298: "Copyright", - 0x829A: "ExposureTime", - 0x829D: "FNumber", - 0x83BB: "IPTCNAA", - 0x8649: "ImageResources", - 0x8769: "ExifOffset", - 0x8773: "InterColorProfile", - 0x8822: "ExposureProgram", - 0x8824: "SpectralSensitivity", - 0x8825: "GPSInfo", - 0x8827: "ISOSpeedRatings", - 0x8828: "OECF", - 0x8829: "Interlace", - 0x882A: "TimeZoneOffset", - 0x882B: "SelfTimerMode", - 0x9000: "ExifVersion", - 0x9003: "DateTimeOriginal", - 0x9004: "DateTimeDigitized", - 0x9101: "ComponentsConfiguration", - 0x9102: "CompressedBitsPerPixel", - 0x9201: "ShutterSpeedValue", - 0x9202: "ApertureValue", - 0x9203: "BrightnessValue", - 0x9204: "ExposureBiasValue", - 0x9205: "MaxApertureValue", - 0x9206: "SubjectDistance", - 0x9207: "MeteringMode", - 0x9208: "LightSource", - 0x9209: "Flash", - 0x920A: "FocalLength", - 0x920B: "FlashEnergy", - 0x920C: "SpatialFrequencyResponse", - 0x920D: "Noise", - 0x9211: "ImageNumber", - 0x9212: "SecurityClassification", - 0x9213: "ImageHistory", - 0x9214: "SubjectLocation", - 0x9215: "ExposureIndex", - 0x9216: "TIFF/EPStandardID", - 0x927C: "MakerNote", - 0x9286: "UserComment", - 0x9290: "SubsecTime", - 0x9291: "SubsecTimeOriginal", - 0x9292: "SubsecTimeDigitized", - 0x9400: "AmbientTemperature", - 0x9401: "Humidity", - 0x9402: "Pressure", - 0x9403: "WaterDepth", - 0x9404: "Acceleration", - 0x9405: "CameraElevationAngle", - 0x9C9B: "XPTitle", - 0x9C9C: "XPComment", - 0x9C9D: "XPAuthor", - 0x9C9E: "XPKeywords", - 0x9C9F: "XPSubject", - 0xA000: "FlashPixVersion", - 0xA001: "ColorSpace", - 0xA002: "ExifImageWidth", - 0xA003: "ExifImageHeight", - 0xA004: "RelatedSoundFile", - 0xA005: "ExifInteroperabilityOffset", - 0xA20B: "FlashEnergy", - 0xA20C: "SpatialFrequencyResponse", - 0xA20E: "FocalPlaneXResolution", - 0xA20F: "FocalPlaneYResolution", - 0xA210: "FocalPlaneResolutionUnit", - 0xA214: "SubjectLocation", - 0xA215: "ExposureIndex", - 0xA217: "SensingMethod", - 0xA300: "FileSource", - 0xA301: "SceneType", - 0xA302: "CFAPattern", - 0xA401: "CustomRendered", - 0xA402: "ExposureMode", - 0xA403: "WhiteBalance", - 0xA404: "DigitalZoomRatio", - 0xA405: "FocalLengthIn35mmFilm", - 0xA406: "SceneCaptureType", - 0xA407: "GainControl", - 0xA408: "Contrast", - 0xA409: "Saturation", - 0xA40A: "Sharpness", - 0xA40B: "DeviceSettingDescription", - 0xA40C: "SubjectDistanceRange", - 0xA420: "ImageUniqueID", - 0xA430: "CameraOwnerName", - 0xA431: "BodySerialNumber", - 0xA432: "LensSpecification", - 0xA433: "LensMake", - 0xA434: "LensModel", - 0xA435: "LensSerialNumber", - 0xA500: "Gamma", - 0xC4A5: "PrintImageMatching", - 0xC612: "DNGVersion", - 0xC613: "DNGBackwardVersion", - 0xC614: "UniqueCameraModel", - 0xC615: "LocalizedCameraModel", - 0xC616: "CFAPlaneColor", - 0xC617: "CFALayout", - 0xC618: "LinearizationTable", - 0xC619: "BlackLevelRepeatDim", - 0xC61A: "BlackLevel", - 0xC61B: "BlackLevelDeltaH", - 0xC61C: "BlackLevelDeltaV", - 0xC61D: "WhiteLevel", - 0xC61E: "DefaultScale", - 0xC61F: "DefaultCropOrigin", - 0xC620: "DefaultCropSize", - 0xC621: "ColorMatrix1", - 0xC622: "ColorMatrix2", - 0xC623: "CameraCalibration1", - 0xC624: "CameraCalibration2", - 0xC625: "ReductionMatrix1", - 0xC626: "ReductionMatrix2", - 0xC627: "AnalogBalance", - 0xC628: "AsShotNeutral", - 0xC629: "AsShotWhiteXY", - 0xC62A: "BaselineExposure", - 0xC62B: "BaselineNoise", - 0xC62C: "BaselineSharpness", - 0xC62D: "BayerGreenSplit", - 0xC62E: "LinearResponseLimit", - 0xC62F: "CameraSerialNumber", - 0xC630: "LensInfo", - 0xC631: "ChromaBlurRadius", - 0xC632: "AntiAliasStrength", - 0xC633: "ShadowScale", - 0xC634: "DNGPrivateData", - 0xC635: "MakerNoteSafety", - 0xC65A: "CalibrationIlluminant1", - 0xC65B: "CalibrationIlluminant2", - 0xC65C: "BestQualityScale", - 0xC65D: "RawDataUniqueID", - 0xC68B: "OriginalRawFileName", - 0xC68C: "OriginalRawFileData", - 0xC68D: "ActiveArea", - 0xC68E: "MaskedAreas", - 0xC68F: "AsShotICCProfile", - 0xC690: "AsShotPreProfileMatrix", - 0xC691: "CurrentICCProfile", - 0xC692: "CurrentPreProfileMatrix", - 0xC6BF: "ColorimetricReference", - 0xC6F3: "CameraCalibrationSignature", - 0xC6F4: "ProfileCalibrationSignature", - 0xC6F6: "AsShotProfileName", - 0xC6F7: "NoiseReductionApplied", - 0xC6F8: "ProfileName", - 0xC6F9: "ProfileHueSatMapDims", - 0xC6FA: "ProfileHueSatMapData1", - 0xC6FB: "ProfileHueSatMapData2", - 0xC6FC: "ProfileToneCurve", - 0xC6FD: "ProfileEmbedPolicy", - 0xC6FE: "ProfileCopyright", - 0xC714: "ForwardMatrix1", - 0xC715: "ForwardMatrix2", - 0xC716: "PreviewApplicationName", - 0xC717: "PreviewApplicationVersion", - 0xC718: "PreviewSettingsName", - 0xC719: "PreviewSettingsDigest", - 0xC71A: "PreviewColorSpace", - 0xC71B: "PreviewDateTime", - 0xC71C: "RawImageDigest", - 0xC71D: "OriginalRawFileDigest", - 0xC71E: "SubTileBlockSize", - 0xC71F: "RowInterleaveFactor", - 0xC725: "ProfileLookTableDims", - 0xC726: "ProfileLookTableData", - 0xC740: "OpcodeList1", - 0xC741: "OpcodeList2", - 0xC74E: "OpcodeList3", - 0xC761: "NoiseProfile", -} -"""Maps EXIF tags to tag names.""" - - -GPSTAGS = { - 0: "GPSVersionID", - 1: "GPSLatitudeRef", - 2: "GPSLatitude", - 3: "GPSLongitudeRef", - 4: "GPSLongitude", - 5: "GPSAltitudeRef", - 6: "GPSAltitude", - 7: "GPSTimeStamp", - 8: "GPSSatellites", - 9: "GPSStatus", - 10: "GPSMeasureMode", - 11: "GPSDOP", - 12: "GPSSpeedRef", - 13: "GPSSpeed", - 14: "GPSTrackRef", - 15: "GPSTrack", - 16: "GPSImgDirectionRef", - 17: "GPSImgDirection", - 18: "GPSMapDatum", - 19: "GPSDestLatitudeRef", - 20: "GPSDestLatitude", - 21: "GPSDestLongitudeRef", - 22: "GPSDestLongitude", - 23: "GPSDestBearingRef", - 24: "GPSDestBearing", - 25: "GPSDestDistanceRef", - 26: "GPSDestDistance", - 27: "GPSProcessingMethod", - 28: "GPSAreaInformation", - 29: "GPSDateStamp", - 30: "GPSDifferential", - 31: "GPSHPositioningError", -} -"""Maps EXIF GPS tags to tag names.""" diff --git a/PIL/FitsStubImagePlugin.py b/PIL/FitsStubImagePlugin.py deleted file mode 100644 index c2ce865..0000000 --- a/PIL/FitsStubImagePlugin.py +++ /dev/null @@ -1,76 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# FITS stub adapter -# -# Copyright (c) 1998-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -from . import Image, ImageFile - -_handler = None - - -def register_handler(handler): - """ - Install application-specific FITS image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -# -------------------------------------------------------------------- -# Image adapter - - -def _accept(prefix): - return prefix[:6] == b"SIMPLE" - - -class FITSStubImageFile(ImageFile.StubImageFile): - - format = "FITS" - format_description = "FITS" - - def _open(self): - - offset = self.fp.tell() - - if not _accept(self.fp.read(6)): - raise SyntaxError("Not a FITS file") - - # FIXME: add more sanity checks here; mandatory header items - # include SIMPLE, BITPIX, NAXIS, etc. - - self.fp.seek(offset) - - # make something up - self.mode = "F" - self._size = 1, 1 - - loader = self._load() - if loader: - loader.open(self) - - def _load(self): - return _handler - - -def _save(im, fp, filename): - if _handler is None or not hasattr("_handler", "save"): - raise OSError("FITS save handler not installed") - _handler.save(im, fp, filename) - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(FITSStubImageFile.format, FITSStubImageFile, _accept) -Image.register_save(FITSStubImageFile.format, _save) - -Image.register_extensions(FITSStubImageFile.format, [".fit", ".fits"]) diff --git a/PIL/FliImagePlugin.py b/PIL/FliImagePlugin.py deleted file mode 100644 index f2d4857..0000000 --- a/PIL/FliImagePlugin.py +++ /dev/null @@ -1,171 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# FLI/FLC file handling. -# -# History: -# 95-09-01 fl Created -# 97-01-03 fl Fixed parser, setup decoder tile -# 98-07-15 fl Renamed offset attribute to avoid name clash -# -# Copyright (c) Secret Labs AB 1997-98. -# Copyright (c) Fredrik Lundh 1995-97. -# -# See the README file for information on usage and redistribution. -# - - -from . import Image, ImageFile, ImagePalette -from ._binary import i16le as i16 -from ._binary import i32le as i32 -from ._binary import o8 - -# -# decoder - - -def _accept(prefix): - return len(prefix) >= 6 and i16(prefix, 4) in [0xAF11, 0xAF12] - - -## -# Image plugin for the FLI/FLC animation format. Use the seek -# method to load individual frames. - - -class FliImageFile(ImageFile.ImageFile): - - format = "FLI" - format_description = "Autodesk FLI/FLC Animation" - _close_exclusive_fp_after_loading = False - - def _open(self): - - # HEAD - s = self.fp.read(128) - if not ( - _accept(s) - and i16(s, 14) in [0, 3] # flags - and s[20:22] == b"\x00\x00" # reserved - ): - raise SyntaxError("not an FLI/FLC file") - - # frames - self.n_frames = i16(s, 6) - self.is_animated = self.n_frames > 1 - - # image characteristics - self.mode = "P" - self._size = i16(s, 8), i16(s, 10) - - # animation speed - duration = i32(s, 16) - magic = i16(s, 4) - if magic == 0xAF11: - duration = (duration * 1000) // 70 - self.info["duration"] = duration - - # look for palette - palette = [(a, a, a) for a in range(256)] - - s = self.fp.read(16) - - self.__offset = 128 - - if i16(s, 4) == 0xF100: - # prefix chunk; ignore it - self.__offset = self.__offset + i32(s) - s = self.fp.read(16) - - if i16(s, 4) == 0xF1FA: - # look for palette chunk - s = self.fp.read(6) - if i16(s, 4) == 11: - self._palette(palette, 2) - elif i16(s, 4) == 4: - self._palette(palette, 0) - - palette = [o8(r) + o8(g) + o8(b) for (r, g, b) in palette] - self.palette = ImagePalette.raw("RGB", b"".join(palette)) - - # set things up to decode first frame - self.__frame = -1 - self.__fp = self.fp - self.__rewind = self.fp.tell() - self.seek(0) - - def _palette(self, palette, shift): - # load palette - - i = 0 - for e in range(i16(self.fp.read(2))): - s = self.fp.read(2) - i = i + s[0] - n = s[1] - if n == 0: - n = 256 - s = self.fp.read(n * 3) - for n in range(0, len(s), 3): - r = s[n] << shift - g = s[n + 1] << shift - b = s[n + 2] << shift - palette[i] = (r, g, b) - i += 1 - - def seek(self, frame): - if not self._seek_check(frame): - return - if frame < self.__frame: - self._seek(0) - - for f in range(self.__frame + 1, frame + 1): - self._seek(f) - - def _seek(self, frame): - if frame == 0: - self.__frame = -1 - self.__fp.seek(self.__rewind) - self.__offset = 128 - else: - # ensure that the previous frame was loaded - self.load() - - if frame != self.__frame + 1: - raise ValueError(f"cannot seek to frame {frame}") - self.__frame = frame - - # move to next frame - self.fp = self.__fp - self.fp.seek(self.__offset) - - s = self.fp.read(4) - if not s: - raise EOFError - - framesize = i32(s) - - self.decodermaxblock = framesize - self.tile = [("fli", (0, 0) + self.size, self.__offset, None)] - - self.__offset += framesize - - def tell(self): - return self.__frame - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -# -# registry - -Image.register_open(FliImageFile.format, FliImageFile, _accept) - -Image.register_extensions(FliImageFile.format, [".fli", ".flc"]) diff --git a/PIL/FontFile.py b/PIL/FontFile.py deleted file mode 100644 index c5fc80b..0000000 --- a/PIL/FontFile.py +++ /dev/null @@ -1,111 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# base class for raster font file parsers -# -# history: -# 1997-06-05 fl created -# 1997-08-19 fl restrict image width -# -# Copyright (c) 1997-1998 by Secret Labs AB -# Copyright (c) 1997-1998 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - - -import os - -from . import Image, _binary - -WIDTH = 800 - - -def puti16(fp, values): - """Write network order (big-endian) 16-bit sequence""" - for v in values: - if v < 0: - v += 65536 - fp.write(_binary.o16be(v)) - - -class FontFile: - """Base class for raster font file handlers.""" - - bitmap = None - - def __init__(self): - - self.info = {} - self.glyph = [None] * 256 - - def __getitem__(self, ix): - return self.glyph[ix] - - def compile(self): - """Create metrics and bitmap""" - - if self.bitmap: - return - - # create bitmap large enough to hold all data - h = w = maxwidth = 0 - lines = 1 - for glyph in self: - if glyph: - d, dst, src, im = glyph - h = max(h, src[3] - src[1]) - w = w + (src[2] - src[0]) - if w > WIDTH: - lines += 1 - w = src[2] - src[0] - maxwidth = max(maxwidth, w) - - xsize = maxwidth - ysize = lines * h - - if xsize == 0 and ysize == 0: - return "" - - self.ysize = h - - # paste glyphs into bitmap - self.bitmap = Image.new("1", (xsize, ysize)) - self.metrics = [None] * 256 - x = y = 0 - for i in range(256): - glyph = self[i] - if glyph: - d, dst, src, im = glyph - xx = src[2] - src[0] - # yy = src[3] - src[1] - x0, y0 = x, y - x = x + xx - if x > WIDTH: - x, y = 0, y + h - x0, y0 = x, y - x = xx - s = src[0] + x0, src[1] + y0, src[2] + x0, src[3] + y0 - self.bitmap.paste(im.crop(src), s) - self.metrics[i] = d, dst, s - - def save(self, filename): - """Save font""" - - self.compile() - - # font data - self.bitmap.save(os.path.splitext(filename)[0] + ".pbm", "PNG") - - # font metrics - with open(os.path.splitext(filename)[0] + ".pil", "wb") as fp: - fp.write(b"PILfont\n") - fp.write(f";;;;;;{self.ysize};\n".encode("ascii")) # HACK!!! - fp.write(b"DATA\n") - for id in range(256): - m = self.metrics[id] - if not m: - puti16(fp, [0] * 10) - else: - puti16(fp, m[0] + m[1] + m[2]) diff --git a/PIL/FpxImagePlugin.py b/PIL/FpxImagePlugin.py deleted file mode 100644 index 5e38546..0000000 --- a/PIL/FpxImagePlugin.py +++ /dev/null @@ -1,242 +0,0 @@ -# -# THIS IS WORK IN PROGRESS -# -# The Python Imaging Library. -# $Id$ -# -# FlashPix support for PIL -# -# History: -# 97-01-25 fl Created (reads uncompressed RGB images only) -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# -import olefile - -from . import Image, ImageFile -from ._binary import i32le as i32 - -# we map from colour field tuples to (mode, rawmode) descriptors -MODES = { - # opacity - (0x00007FFE): ("A", "L"), - # monochrome - (0x00010000,): ("L", "L"), - (0x00018000, 0x00017FFE): ("RGBA", "LA"), - # photo YCC - (0x00020000, 0x00020001, 0x00020002): ("RGB", "YCC;P"), - (0x00028000, 0x00028001, 0x00028002, 0x00027FFE): ("RGBA", "YCCA;P"), - # standard RGB (NIFRGB) - (0x00030000, 0x00030001, 0x00030002): ("RGB", "RGB"), - (0x00038000, 0x00038001, 0x00038002, 0x00037FFE): ("RGBA", "RGBA"), -} - - -# -# -------------------------------------------------------------------- - - -def _accept(prefix): - return prefix[:8] == olefile.MAGIC - - -## -# Image plugin for the FlashPix images. - - -class FpxImageFile(ImageFile.ImageFile): - - format = "FPX" - format_description = "FlashPix" - - def _open(self): - # - # read the OLE directory and see if this is a likely - # to be a FlashPix file - - try: - self.ole = olefile.OleFileIO(self.fp) - except OSError as e: - raise SyntaxError("not an FPX file; invalid OLE file") from e - - if self.ole.root.clsid != "56616700-C154-11CE-8553-00AA00A1F95B": - raise SyntaxError("not an FPX file; bad root CLSID") - - self._open_index(1) - - def _open_index(self, index=1): - # - # get the Image Contents Property Set - - prop = self.ole.getproperties( - [f"Data Object Store {index:06d}", "\005Image Contents"] - ) - - # size (highest resolution) - - self._size = prop[0x1000002], prop[0x1000003] - - size = max(self.size) - i = 1 - while size > 64: - size = size / 2 - i += 1 - self.maxid = i - 1 - - # mode. instead of using a single field for this, flashpix - # requires you to specify the mode for each channel in each - # resolution subimage, and leaves it to the decoder to make - # sure that they all match. for now, we'll cheat and assume - # that this is always the case. - - id = self.maxid << 16 - - s = prop[0x2000002 | id] - - colors = [] - bands = i32(s, 4) - if bands > 4: - raise OSError("Invalid number of bands") - for i in range(bands): - # note: for now, we ignore the "uncalibrated" flag - colors.append(i32(s, 8 + i * 4) & 0x7FFFFFFF) - - self.mode, self.rawmode = MODES[tuple(colors)] - - # load JPEG tables, if any - self.jpeg = {} - for i in range(256): - id = 0x3000001 | (i << 16) - if id in prop: - self.jpeg[i] = prop[id] - - self._open_subimage(1, self.maxid) - - def _open_subimage(self, index=1, subimage=0): - # - # setup tile descriptors for a given subimage - - stream = [ - f"Data Object Store {index:06d}", - f"Resolution {subimage:04d}", - "Subimage 0000 Header", - ] - - fp = self.ole.openstream(stream) - - # skip prefix - fp.read(28) - - # header stream - s = fp.read(36) - - size = i32(s, 4), i32(s, 8) - # tilecount = i32(s, 12) - tilesize = i32(s, 16), i32(s, 20) - # channels = i32(s, 24) - offset = i32(s, 28) - length = i32(s, 32) - - if size != self.size: - raise OSError("subimage mismatch") - - # get tile descriptors - fp.seek(28 + offset) - s = fp.read(i32(s, 12) * length) - - x = y = 0 - xsize, ysize = size - xtile, ytile = tilesize - self.tile = [] - - for i in range(0, len(s), length): - - compression = i32(s, i + 8) - - if compression == 0: - self.tile.append( - ( - "raw", - (x, y, x + xtile, y + ytile), - i32(s, i) + 28, - (self.rawmode), - ) - ) - - elif compression == 1: - - # FIXME: the fill decoder is not implemented - self.tile.append( - ( - "fill", - (x, y, x + xtile, y + ytile), - i32(s, i) + 28, - (self.rawmode, s[12:16]), - ) - ) - - elif compression == 2: - - internal_color_conversion = s[14] - jpeg_tables = s[15] - rawmode = self.rawmode - - if internal_color_conversion: - # The image is stored as usual (usually YCbCr). - if rawmode == "RGBA": - # For "RGBA", data is stored as YCbCrA based on - # negative RGB. The following trick works around - # this problem : - jpegmode, rawmode = "YCbCrK", "CMYK" - else: - jpegmode = None # let the decoder decide - - else: - # The image is stored as defined by rawmode - jpegmode = rawmode - - self.tile.append( - ( - "jpeg", - (x, y, x + xtile, y + ytile), - i32(s, i) + 28, - (rawmode, jpegmode), - ) - ) - - # FIXME: jpeg tables are tile dependent; the prefix - # data must be placed in the tile descriptor itself! - - if jpeg_tables: - self.tile_prefix = self.jpeg[jpeg_tables] - - else: - raise OSError("unknown/invalid compression") - - x = x + xtile - if x >= xsize: - x, y = 0, y + ytile - if y >= ysize: - break # isn't really required - - self.stream = stream - self.fp = None - - def load(self): - - if not self.fp: - self.fp = self.ole.openstream(self.stream[:2] + ["Subimage 0000 Data"]) - - return ImageFile.ImageFile.load(self) - - -# -# -------------------------------------------------------------------- - - -Image.register_open(FpxImageFile.format, FpxImageFile, _accept) - -Image.register_extension(FpxImageFile.format, ".fpx") diff --git a/PIL/FtexImagePlugin.py b/PIL/FtexImagePlugin.py deleted file mode 100644 index 9006612..0000000 --- a/PIL/FtexImagePlugin.py +++ /dev/null @@ -1,106 +0,0 @@ -""" -A Pillow loader for .ftc and .ftu files (FTEX) -Jerome Leclanche - -The contents of this file are hereby released in the public domain (CC0) -Full text of the CC0 license: - https://creativecommons.org/publicdomain/zero/1.0/ - -Independence War 2: Edge Of Chaos - Texture File Format - 16 October 2001 - -The textures used for 3D objects in Independence War 2: Edge Of Chaos are in a -packed custom format called FTEX. This file format uses file extensions FTC -and FTU. -* FTC files are compressed textures (using standard texture compression). -* FTU files are not compressed. -Texture File Format -The FTC and FTU texture files both use the same format. This -has the following structure: -{header} -{format_directory} -{data} -Where: -{header} = { - u32:magic, - u32:version, - u32:width, - u32:height, - u32:mipmap_count, - u32:format_count -} - -* The "magic" number is "FTEX". -* "width" and "height" are the dimensions of the texture. -* "mipmap_count" is the number of mipmaps in the texture. -* "format_count" is the number of texture formats (different versions of the -same texture) in this file. - -{format_directory} = format_count * { u32:format, u32:where } - -The format value is 0 for DXT1 compressed textures and 1 for 24-bit RGB -uncompressed textures. -The texture data for a format starts at the position "where" in the file. - -Each set of texture data in the file has the following structure: -{data} = format_count * { u32:mipmap_size, mipmap_size * { u8 } } -* "mipmap_size" is the number of bytes in that mip level. For compressed -textures this is the size of the texture data compressed with DXT1. For 24 bit -uncompressed textures, this is 3 * width * height. Following this are the image -bytes for that mipmap level. - -Note: All data is stored in little-Endian (Intel) byte order. -""" - -import struct -from io import BytesIO - -from . import Image, ImageFile - -MAGIC = b"FTEX" -FORMAT_DXT1 = 0 -FORMAT_UNCOMPRESSED = 1 - - -class FtexImageFile(ImageFile.ImageFile): - format = "FTEX" - format_description = "Texture File Format (IW2:EOC)" - - def _open(self): - struct.unpack("= 8 and i32(prefix, 0) >= 20 and i32(prefix, 4) in (1, 2) - - -## -# Image plugin for the GIMP brush format. - - -class GbrImageFile(ImageFile.ImageFile): - - format = "GBR" - format_description = "GIMP brush file" - - def _open(self): - header_size = i32(self.fp.read(4)) - version = i32(self.fp.read(4)) - if header_size < 20: - raise SyntaxError("not a GIMP brush") - if version not in (1, 2): - raise SyntaxError(f"Unsupported GIMP brush version: {version}") - - width = i32(self.fp.read(4)) - height = i32(self.fp.read(4)) - color_depth = i32(self.fp.read(4)) - if width <= 0 or height <= 0: - raise SyntaxError("not a GIMP brush") - if color_depth not in (1, 4): - raise SyntaxError(f"Unsupported GIMP brush color depth: {color_depth}") - - if version == 1: - comment_length = header_size - 20 - else: - comment_length = header_size - 28 - magic_number = self.fp.read(4) - if magic_number != b"GIMP": - raise SyntaxError("not a GIMP brush, bad magic number") - self.info["spacing"] = i32(self.fp.read(4)) - - comment = self.fp.read(comment_length)[:-1] - - if color_depth == 1: - self.mode = "L" - else: - self.mode = "RGBA" - - self._size = width, height - - self.info["comment"] = comment - - # Image might not be small - Image._decompression_bomb_check(self.size) - - # Data is an uncompressed block of w * h * bytes/pixel - self._data_size = width * height * color_depth - - def load(self): - if self.im: - # Already loaded - return - - self.im = Image.core.new(self.mode, self.size) - self.frombytes(self.fp.read(self._data_size)) - - -# -# registry - - -Image.register_open(GbrImageFile.format, GbrImageFile, _accept) -Image.register_extension(GbrImageFile.format, ".gbr") diff --git a/PIL/GdImageFile.py b/PIL/GdImageFile.py deleted file mode 100644 index 9c34ada..0000000 --- a/PIL/GdImageFile.py +++ /dev/null @@ -1,90 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# GD file handling -# -# History: -# 1996-04-12 fl Created -# -# Copyright (c) 1997 by Secret Labs AB. -# Copyright (c) 1996 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - - -""" -.. note:: - This format cannot be automatically recognized, so the - class is not registered for use with :py:func:`PIL.Image.open()`. To open a - gd file, use the :py:func:`PIL.GdImageFile.open()` function instead. - -.. warning:: - THE GD FORMAT IS NOT DESIGNED FOR DATA INTERCHANGE. This - implementation is provided for convenience and demonstrational - purposes only. -""" - - -from . import ImageFile, ImagePalette, UnidentifiedImageError -from ._binary import i16be as i16 -from ._binary import i32be as i32 - - -class GdImageFile(ImageFile.ImageFile): - """ - Image plugin for the GD uncompressed format. Note that this format - is not supported by the standard :py:func:`PIL.Image.open()` function. To use - this plugin, you have to import the :py:mod:`PIL.GdImageFile` module and - use the :py:func:`PIL.GdImageFile.open()` function. - """ - - format = "GD" - format_description = "GD uncompressed images" - - def _open(self): - - # Header - s = self.fp.read(1037) - - if not i16(s) in [65534, 65535]: - raise SyntaxError("Not a valid GD 2.x .gd file") - - self.mode = "L" # FIXME: "P" - self._size = i16(s, 2), i16(s, 4) - - trueColor = s[6] - trueColorOffset = 2 if trueColor else 0 - - # transparency index - tindex = i32(s, 7 + trueColorOffset) - if tindex < 256: - self.info["transparency"] = tindex - - self.palette = ImagePalette.raw( - "XBGR", s[7 + trueColorOffset + 4 : 7 + trueColorOffset + 4 + 256 * 4] - ) - - self.tile = [ - ("raw", (0, 0) + self.size, 7 + trueColorOffset + 4 + 256 * 4, ("L", 0, 1)) - ] - - -def open(fp, mode="r"): - """ - Load texture from a GD image file. - - :param filename: GD file name, or an opened file handle. - :param mode: Optional mode. In this version, if the mode argument - is given, it must be "r". - :returns: An image instance. - :raises OSError: If the image could not be read. - """ - if mode != "r": - raise ValueError("bad mode") - - try: - return GdImageFile(fp) - except SyntaxError as e: - raise UnidentifiedImageError("cannot identify this image file") from e diff --git a/PIL/GifImagePlugin.py b/PIL/GifImagePlugin.py deleted file mode 100644 index 7c083bd..0000000 --- a/PIL/GifImagePlugin.py +++ /dev/null @@ -1,888 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# GIF file handling -# -# History: -# 1995-09-01 fl Created -# 1996-12-14 fl Added interlace support -# 1996-12-30 fl Added animation support -# 1997-01-05 fl Added write support, fixed local colour map bug -# 1997-02-23 fl Make sure to load raster data in getdata() -# 1997-07-05 fl Support external decoder (0.4) -# 1998-07-09 fl Handle all modes when saving (0.5) -# 1998-07-15 fl Renamed offset attribute to avoid name clash -# 2001-04-16 fl Added rewind support (seek to frame 0) (0.6) -# 2001-04-17 fl Added palette optimization (0.7) -# 2002-06-06 fl Added transparency support for save (0.8) -# 2004-02-24 fl Disable interlacing for small images -# -# Copyright (c) 1997-2004 by Secret Labs AB -# Copyright (c) 1995-2004 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import itertools -import math -import os -import subprocess - -from . import Image, ImageChops, ImageFile, ImagePalette, ImageSequence -from ._binary import i16le as i16 -from ._binary import o8 -from ._binary import o16le as o16 - -# -------------------------------------------------------------------- -# Identify/read GIF files - - -def _accept(prefix): - return prefix[:6] in [b"GIF87a", b"GIF89a"] - - -## -# Image plugin for GIF images. This plugin supports both GIF87 and -# GIF89 images. - - -class GifImageFile(ImageFile.ImageFile): - - format = "GIF" - format_description = "Compuserve GIF" - _close_exclusive_fp_after_loading = False - - global_palette = None - - def data(self): - s = self.fp.read(1) - if s and s[0]: - return self.fp.read(s[0]) - return None - - def _open(self): - - # Screen - s = self.fp.read(13) - if not _accept(s): - raise SyntaxError("not a GIF file") - - self.info["version"] = s[:6] - self._size = i16(s, 6), i16(s, 8) - self.tile = [] - flags = s[10] - bits = (flags & 7) + 1 - - if flags & 128: - # get global palette - self.info["background"] = s[11] - # check if palette contains colour indices - p = self.fp.read(3 << bits) - for i in range(0, len(p), 3): - if not (i // 3 == p[i] == p[i + 1] == p[i + 2]): - p = ImagePalette.raw("RGB", p) - self.global_palette = self.palette = p - break - - self.__fp = self.fp # FIXME: hack - self.__rewind = self.fp.tell() - self._n_frames = None - self._is_animated = None - self._seek(0) # get ready to read first frame - - @property - def n_frames(self): - if self._n_frames is None: - current = self.tell() - try: - while True: - self.seek(self.tell() + 1) - except EOFError: - self._n_frames = self.tell() + 1 - self.seek(current) - return self._n_frames - - @property - def is_animated(self): - if self._is_animated is None: - if self._n_frames is not None: - self._is_animated = self._n_frames != 1 - else: - current = self.tell() - - try: - self.seek(1) - self._is_animated = True - except EOFError: - self._is_animated = False - - self.seek(current) - return self._is_animated - - def seek(self, frame): - if not self._seek_check(frame): - return - if frame < self.__frame: - if frame != 0: - self.im = None - self._seek(0) - - last_frame = self.__frame - for f in range(self.__frame + 1, frame + 1): - try: - self._seek(f) - except EOFError as e: - self.seek(last_frame) - raise EOFError("no more images in GIF file") from e - - def _seek(self, frame): - - if frame == 0: - # rewind - self.__offset = 0 - self.dispose = None - self.dispose_extent = [0, 0, 0, 0] # x0, y0, x1, y1 - self.__frame = -1 - self.__fp.seek(self.__rewind) - self._prev_im = None - self.disposal_method = 0 - else: - # ensure that the previous frame was loaded - if not self.im: - self.load() - - if frame != self.__frame + 1: - raise ValueError(f"cannot seek to frame {frame}") - self.__frame = frame - - self.tile = [] - - self.fp = self.__fp - if self.__offset: - # backup to last frame - self.fp.seek(self.__offset) - while self.data(): - pass - self.__offset = 0 - - if self.dispose: - self.im.paste(self.dispose, self.dispose_extent) - - from copy import copy - - self.palette = copy(self.global_palette) - - info = {} - while True: - - s = self.fp.read(1) - if not s or s == b";": - break - - elif s == b"!": - # - # extensions - # - s = self.fp.read(1) - block = self.data() - if s[0] == 249: - # - # graphic control extension - # - flags = block[0] - if flags & 1: - info["transparency"] = block[3] - info["duration"] = i16(block, 1) * 10 - - # disposal method - find the value of bits 4 - 6 - dispose_bits = 0b00011100 & flags - dispose_bits = dispose_bits >> 2 - if dispose_bits: - # only set the dispose if it is not - # unspecified. I'm not sure if this is - # correct, but it seems to prevent the last - # frame from looking odd for some animations - self.disposal_method = dispose_bits - elif s[0] == 254: - # - # comment extension - # - while block: - if "comment" in info: - info["comment"] += block - else: - info["comment"] = block - block = self.data() - continue - elif s[0] == 255: - # - # application extension - # - info["extension"] = block, self.fp.tell() - if block[:11] == b"NETSCAPE2.0": - block = self.data() - if len(block) >= 3 and block[0] == 1: - info["loop"] = i16(block, 1) - while self.data(): - pass - - elif s == b",": - # - # local image - # - s = self.fp.read(9) - - # extent - x0, y0 = i16(s, 0), i16(s, 2) - x1, y1 = x0 + i16(s, 4), y0 + i16(s, 6) - if x1 > self.size[0] or y1 > self.size[1]: - self._size = max(x1, self.size[0]), max(y1, self.size[1]) - self.dispose_extent = x0, y0, x1, y1 - flags = s[8] - - interlace = (flags & 64) != 0 - - if flags & 128: - bits = (flags & 7) + 1 - self.palette = ImagePalette.raw("RGB", self.fp.read(3 << bits)) - - # image data - bits = self.fp.read(1)[0] - self.__offset = self.fp.tell() - self.tile = [ - ("gif", (x0, y0, x1, y1), self.__offset, (bits, interlace)) - ] - break - - else: - pass - # raise OSError, "illegal GIF tag `%x`" % s[0] - - try: - if self.disposal_method < 2: - # do not dispose or none specified - self.dispose = None - elif self.disposal_method == 2: - # replace with background colour - Image._decompression_bomb_check(self.size) - self.dispose = Image.core.fill("P", self.size, self.info["background"]) - else: - # replace with previous contents - if self.im: - self.dispose = self.im.copy() - - # only dispose the extent in this frame - if self.dispose: - self.dispose = self._crop(self.dispose, self.dispose_extent) - except (AttributeError, KeyError): - pass - - if not self.tile: - # self.__fp = None - raise EOFError - - for k in ["transparency", "duration", "comment", "extension", "loop"]: - if k in info: - self.info[k] = info[k] - elif k in self.info: - del self.info[k] - - self.mode = "L" - if self.palette: - self.mode = "P" - - def tell(self): - return self.__frame - - def load_end(self): - ImageFile.ImageFile.load_end(self) - - # if the disposal method is 'do not dispose', transparent - # pixels should show the content of the previous frame - if self._prev_im and self._prev_disposal_method == 1: - # we do this by pasting the updated area onto the previous - # frame which we then use as the current image content - updated = self._crop(self.im, self.dispose_extent) - self._prev_im.paste(updated, self.dispose_extent, updated.convert("RGBA")) - self.im = self._prev_im - self._prev_im = self.im.copy() - self._prev_disposal_method = self.disposal_method - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -# -------------------------------------------------------------------- -# Write GIF files - - -RAWMODE = {"1": "L", "L": "L", "P": "P"} - - -def _normalize_mode(im, initial_call=False): - """ - Takes an image (or frame), returns an image in a mode that is appropriate - for saving in a Gif. - - It may return the original image, or it may return an image converted to - palette or 'L' mode. - - UNDONE: What is the point of mucking with the initial call palette, for - an image that shouldn't have a palette, or it would be a mode 'P' and - get returned in the RAWMODE clause. - - :param im: Image object - :param initial_call: Default false, set to true for a single frame. - :returns: Image object - """ - if im.mode in RAWMODE: - im.load() - return im - if Image.getmodebase(im.mode) == "RGB": - if initial_call: - palette_size = 256 - if im.palette: - palette_size = len(im.palette.getdata()[1]) // 3 - return im.convert("P", palette=Image.ADAPTIVE, colors=palette_size) - else: - return im.convert("P") - return im.convert("L") - - -def _normalize_palette(im, palette, info): - """ - Normalizes the palette for image. - - Sets the palette to the incoming palette, if provided. - - Ensures that there's a palette for L mode images - - Optimizes the palette if necessary/desired. - - :param im: Image object - :param palette: bytes object containing the source palette, or .... - :param info: encoderinfo - :returns: Image object - """ - source_palette = None - if palette: - # a bytes palette - if isinstance(palette, (bytes, bytearray, list)): - source_palette = bytearray(palette[:768]) - if isinstance(palette, ImagePalette.ImagePalette): - source_palette = bytearray( - itertools.chain.from_iterable( - zip( - palette.palette[:256], - palette.palette[256:512], - palette.palette[512:768], - ) - ) - ) - - if im.mode == "P": - if not source_palette: - source_palette = im.im.getpalette("RGB")[:768] - else: # L-mode - if not source_palette: - source_palette = bytearray(i // 3 for i in range(768)) - im.palette = ImagePalette.ImagePalette("RGB", palette=source_palette) - - used_palette_colors = _get_optimize(im, info) - if used_palette_colors is not None: - return im.remap_palette(used_palette_colors, source_palette) - - im.palette.palette = source_palette - return im - - -def _write_single_frame(im, fp, palette): - im_out = _normalize_mode(im, True) - for k, v in im_out.info.items(): - im.encoderinfo.setdefault(k, v) - im_out = _normalize_palette(im_out, palette, im.encoderinfo) - - for s in _get_global_header(im_out, im.encoderinfo): - fp.write(s) - - # local image header - flags = 0 - if get_interlace(im): - flags = flags | 64 - _write_local_header(fp, im, (0, 0), flags) - - im_out.encoderconfig = (8, get_interlace(im)) - ImageFile._save(im_out, fp, [("gif", (0, 0) + im.size, 0, RAWMODE[im_out.mode])]) - - fp.write(b"\0") # end of image data - - -def _write_multiple_frames(im, fp, palette): - - duration = im.encoderinfo.get("duration", im.info.get("duration")) - disposal = im.encoderinfo.get("disposal", im.info.get("disposal")) - - im_frames = [] - frame_count = 0 - background_im = None - for imSequence in itertools.chain([im], im.encoderinfo.get("append_images", [])): - for im_frame in ImageSequence.Iterator(imSequence): - # a copy is required here since seek can still mutate the image - im_frame = _normalize_mode(im_frame.copy()) - if frame_count == 0: - for k, v in im_frame.info.items(): - im.encoderinfo.setdefault(k, v) - im_frame = _normalize_palette(im_frame, palette, im.encoderinfo) - - encoderinfo = im.encoderinfo.copy() - if isinstance(duration, (list, tuple)): - encoderinfo["duration"] = duration[frame_count] - if isinstance(disposal, (list, tuple)): - encoderinfo["disposal"] = disposal[frame_count] - frame_count += 1 - - if im_frames: - # delta frame - previous = im_frames[-1] - if encoderinfo.get("disposal") == 2: - if background_im is None: - background = _get_background( - im, - im.encoderinfo.get("background", im.info.get("background")), - ) - background_im = Image.new("P", im_frame.size, background) - background_im.putpalette(im_frames[0]["im"].palette) - base_im = background_im - else: - base_im = previous["im"] - if _get_palette_bytes(im_frame) == _get_palette_bytes(base_im): - delta = ImageChops.subtract_modulo(im_frame, base_im) - else: - delta = ImageChops.subtract_modulo( - im_frame.convert("RGB"), base_im.convert("RGB") - ) - bbox = delta.getbbox() - if not bbox: - # This frame is identical to the previous frame - if duration: - previous["encoderinfo"]["duration"] += encoderinfo["duration"] - continue - else: - bbox = None - im_frames.append({"im": im_frame, "bbox": bbox, "encoderinfo": encoderinfo}) - - if len(im_frames) > 1: - for frame_data in im_frames: - im_frame = frame_data["im"] - if not frame_data["bbox"]: - # global header - for s in _get_global_header(im_frame, frame_data["encoderinfo"]): - fp.write(s) - offset = (0, 0) - else: - # compress difference - frame_data["encoderinfo"]["include_color_table"] = True - - im_frame = im_frame.crop(frame_data["bbox"]) - offset = frame_data["bbox"][:2] - _write_frame_data(fp, im_frame, offset, frame_data["encoderinfo"]) - return True - elif "duration" in im.encoderinfo and isinstance( - im.encoderinfo["duration"], (list, tuple) - ): - # Since multiple frames will not be written, add together the frame durations - im.encoderinfo["duration"] = sum(im.encoderinfo["duration"]) - - -def _save_all(im, fp, filename): - _save(im, fp, filename, save_all=True) - - -def _save(im, fp, filename, save_all=False): - # header - if "palette" in im.encoderinfo or "palette" in im.info: - palette = im.encoderinfo.get("palette", im.info.get("palette")) - else: - palette = None - im.encoderinfo["optimize"] = im.encoderinfo.get("optimize", True) - - if not save_all or not _write_multiple_frames(im, fp, palette): - _write_single_frame(im, fp, palette) - - fp.write(b";") # end of file - - if hasattr(fp, "flush"): - fp.flush() - - -def get_interlace(im): - interlace = im.encoderinfo.get("interlace", 1) - - # workaround for @PIL153 - if min(im.size) < 16: - interlace = 0 - - return interlace - - -def _write_local_header(fp, im, offset, flags): - transparent_color_exists = False - try: - transparency = im.encoderinfo["transparency"] - except KeyError: - pass - else: - transparency = int(transparency) - # optimize the block away if transparent color is not used - transparent_color_exists = True - - used_palette_colors = _get_optimize(im, im.encoderinfo) - if used_palette_colors is not None: - # adjust the transparency index after optimize - try: - transparency = used_palette_colors.index(transparency) - except ValueError: - transparent_color_exists = False - - if "duration" in im.encoderinfo: - duration = int(im.encoderinfo["duration"] / 10) - else: - duration = 0 - - disposal = int(im.encoderinfo.get("disposal", 0)) - - if transparent_color_exists or duration != 0 or disposal: - packed_flag = 1 if transparent_color_exists else 0 - packed_flag |= disposal << 2 - if not transparent_color_exists: - transparency = 0 - - fp.write( - b"!" - + o8(249) # extension intro - + o8(4) # length - + o8(packed_flag) # packed fields - + o16(duration) # duration - + o8(transparency) # transparency index - + o8(0) - ) - - if "comment" in im.encoderinfo and 1 <= len(im.encoderinfo["comment"]): - fp.write(b"!" + o8(254)) # extension intro - comment = im.encoderinfo["comment"] - if isinstance(comment, str): - comment = comment.encode() - for i in range(0, len(comment), 255): - subblock = comment[i : i + 255] - fp.write(o8(len(subblock)) + subblock) - fp.write(o8(0)) - if "loop" in im.encoderinfo: - number_of_loops = im.encoderinfo["loop"] - fp.write( - b"!" - + o8(255) # extension intro - + o8(11) - + b"NETSCAPE2.0" - + o8(3) - + o8(1) - + o16(number_of_loops) # number of loops - + o8(0) - ) - include_color_table = im.encoderinfo.get("include_color_table") - if include_color_table: - palette_bytes = _get_palette_bytes(im) - color_table_size = _get_color_table_size(palette_bytes) - if color_table_size: - flags = flags | 128 # local color table flag - flags = flags | color_table_size - - fp.write( - b"," - + o16(offset[0]) # offset - + o16(offset[1]) - + o16(im.size[0]) # size - + o16(im.size[1]) - + o8(flags) # flags - ) - if include_color_table and color_table_size: - fp.write(_get_header_palette(palette_bytes)) - fp.write(o8(8)) # bits - - -def _save_netpbm(im, fp, filename): - - # Unused by default. - # To use, uncomment the register_save call at the end of the file. - # - # If you need real GIF compression and/or RGB quantization, you - # can use the external NETPBM/PBMPLUS utilities. See comments - # below for information on how to enable this. - tempfile = im._dump() - - try: - with open(filename, "wb") as f: - if im.mode != "RGB": - subprocess.check_call( - ["ppmtogif", tempfile], stdout=f, stderr=subprocess.DEVNULL - ) - else: - # Pipe ppmquant output into ppmtogif - # "ppmquant 256 %s | ppmtogif > %s" % (tempfile, filename) - quant_cmd = ["ppmquant", "256", tempfile] - togif_cmd = ["ppmtogif"] - quant_proc = subprocess.Popen( - quant_cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL - ) - togif_proc = subprocess.Popen( - togif_cmd, - stdin=quant_proc.stdout, - stdout=f, - stderr=subprocess.DEVNULL, - ) - - # Allow ppmquant to receive SIGPIPE if ppmtogif exits - quant_proc.stdout.close() - - retcode = quant_proc.wait() - if retcode: - raise subprocess.CalledProcessError(retcode, quant_cmd) - - retcode = togif_proc.wait() - if retcode: - raise subprocess.CalledProcessError(retcode, togif_cmd) - finally: - try: - os.unlink(tempfile) - except OSError: - pass - - -# Force optimization so that we can test performance against -# cases where it took lots of memory and time previously. -_FORCE_OPTIMIZE = False - - -def _get_optimize(im, info): - """ - Palette optimization is a potentially expensive operation. - - This function determines if the palette should be optimized using - some heuristics, then returns the list of palette entries in use. - - :param im: Image object - :param info: encoderinfo - :returns: list of indexes of palette entries in use, or None - """ - if im.mode in ("P", "L") and info and info.get("optimize", 0): - # Potentially expensive operation. - - # The palette saves 3 bytes per color not used, but palette - # lengths are restricted to 3*(2**N) bytes. Max saving would - # be 768 -> 6 bytes if we went all the way down to 2 colors. - # * If we're over 128 colors, we can't save any space. - # * If there aren't any holes, it's not worth collapsing. - # * If we have a 'large' image, the palette is in the noise. - - # create the new palette if not every color is used - optimise = _FORCE_OPTIMIZE or im.mode == "L" - if optimise or im.width * im.height < 512 * 512: - # check which colors are used - used_palette_colors = [] - for i, count in enumerate(im.histogram()): - if count: - used_palette_colors.append(i) - - if optimise or ( - len(used_palette_colors) <= 128 - and max(used_palette_colors) > len(used_palette_colors) - ): - return used_palette_colors - - -def _get_color_table_size(palette_bytes): - # calculate the palette size for the header - if not palette_bytes: - return 0 - elif len(palette_bytes) < 9: - return 1 - else: - return math.ceil(math.log(len(palette_bytes) // 3, 2)) - 1 - - -def _get_header_palette(palette_bytes): - """ - Returns the palette, null padded to the next power of 2 (*3) bytes - suitable for direct inclusion in the GIF header - - :param palette_bytes: Unpadded palette bytes, in RGBRGB form - :returns: Null padded palette - """ - color_table_size = _get_color_table_size(palette_bytes) - - # add the missing amount of bytes - # the palette has to be 2< 0: - palette_bytes += o8(0) * 3 * actual_target_size_diff - return palette_bytes - - -def _get_palette_bytes(im): - """ - Gets the palette for inclusion in the gif header - - :param im: Image object - :returns: Bytes, len<=768 suitable for inclusion in gif header - """ - return im.palette.palette - - -def _get_background(im, infoBackground): - background = 0 - if infoBackground: - background = infoBackground - if isinstance(background, tuple): - # WebPImagePlugin stores an RGBA value in info["background"] - # So it must be converted to the same format as GifImagePlugin's - # info["background"] - a global color table index - background = im.palette.getcolor(background) - return background - - -def _get_global_header(im, info): - """Return a list of strings representing a GIF header""" - - # Header Block - # http://www.matthewflickinger.com/lab/whatsinagif/bits_and_bytes.asp - - version = b"87a" - for extensionKey in ["transparency", "duration", "loop", "comment"]: - if info and extensionKey in info: - if (extensionKey == "duration" and info[extensionKey] == 0) or ( - extensionKey == "comment" and not (1 <= len(info[extensionKey]) <= 255) - ): - continue - version = b"89a" - break - else: - if im.info.get("version") == b"89a": - version = b"89a" - - background = _get_background(im, info.get("background")) - - palette_bytes = _get_palette_bytes(im) - color_table_size = _get_color_table_size(palette_bytes) - - return [ - b"GIF" # signature - + version # version - + o16(im.size[0]) # canvas width - + o16(im.size[1]), # canvas height - # Logical Screen Descriptor - # size of global color table + global color table flag - o8(color_table_size + 128), # packed fields - # background + reserved/aspect - o8(background) + o8(0), - # Global Color Table - _get_header_palette(palette_bytes), - ] - - -def _write_frame_data(fp, im_frame, offset, params): - try: - im_frame.encoderinfo = params - - # local image header - _write_local_header(fp, im_frame, offset, 0) - - ImageFile._save( - im_frame, fp, [("gif", (0, 0) + im_frame.size, 0, RAWMODE[im_frame.mode])] - ) - - fp.write(b"\0") # end of image data - finally: - del im_frame.encoderinfo - - -# -------------------------------------------------------------------- -# Legacy GIF utilities - - -def getheader(im, palette=None, info=None): - """ - Legacy Method to get Gif data from image. - - Warning:: May modify image data. - - :param im: Image object - :param palette: bytes object containing the source palette, or .... - :param info: encoderinfo - :returns: tuple of(list of header items, optimized palette) - - """ - used_palette_colors = _get_optimize(im, info) - - if info is None: - info = {} - - if "background" not in info and "background" in im.info: - info["background"] = im.info["background"] - - im_mod = _normalize_palette(im, palette, info) - im.palette = im_mod.palette - im.im = im_mod.im - header = _get_global_header(im, info) - - return header, used_palette_colors - - -# To specify duration, add the time in milliseconds to getdata(), -# e.g. getdata(im_frame, duration=1000) -def getdata(im, offset=(0, 0), **params): - """ - Legacy Method - - Return a list of strings representing this image. - The first string is a local image header, the rest contains - encoded image data. - - :param im: Image object - :param offset: Tuple of (x, y) pixels. Defaults to (0,0) - :param \\**params: E.g. duration or other encoder info parameters - :returns: List of Bytes containing gif encoded frame data - - """ - - class Collector: - data = [] - - def write(self, data): - self.data.append(data) - - im.load() # make sure raster data is available - - fp = Collector() - - _write_frame_data(fp, im, offset, params) - - return fp.data - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(GifImageFile.format, GifImageFile, _accept) -Image.register_save(GifImageFile.format, _save) -Image.register_save_all(GifImageFile.format, _save_all) -Image.register_extension(GifImageFile.format, ".gif") -Image.register_mime(GifImageFile.format, "image/gif") - -# -# Uncomment the following line if you wish to use NETPBM/PBMPLUS -# instead of the built-in "uncompressed" GIF encoder - -# Image.register_save(GifImageFile.format, _save_netpbm) diff --git a/PIL/GimpGradientFile.py b/PIL/GimpGradientFile.py deleted file mode 100644 index 7ab7f99..0000000 --- a/PIL/GimpGradientFile.py +++ /dev/null @@ -1,140 +0,0 @@ -# -# Python Imaging Library -# $Id$ -# -# stuff to read (and render) GIMP gradient files -# -# History: -# 97-08-23 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# - -""" -Stuff to translate curve segments to palette values (derived from -the corresponding code in GIMP, written by Federico Mena Quintero. -See the GIMP distribution for more information.) -""" - - -from math import log, pi, sin, sqrt - -from ._binary import o8 - -EPSILON = 1e-10 -"""""" # Enable auto-doc for data member - - -def linear(middle, pos): - if pos <= middle: - if middle < EPSILON: - return 0.0 - else: - return 0.5 * pos / middle - else: - pos = pos - middle - middle = 1.0 - middle - if middle < EPSILON: - return 1.0 - else: - return 0.5 + 0.5 * pos / middle - - -def curved(middle, pos): - return pos ** (log(0.5) / log(max(middle, EPSILON))) - - -def sine(middle, pos): - return (sin((-pi / 2.0) + pi * linear(middle, pos)) + 1.0) / 2.0 - - -def sphere_increasing(middle, pos): - return sqrt(1.0 - (linear(middle, pos) - 1.0) ** 2) - - -def sphere_decreasing(middle, pos): - return 1.0 - sqrt(1.0 - linear(middle, pos) ** 2) - - -SEGMENTS = [linear, curved, sine, sphere_increasing, sphere_decreasing] -"""""" # Enable auto-doc for data member - - -class GradientFile: - - gradient = None - - def getpalette(self, entries=256): - - palette = [] - - ix = 0 - x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] - - for i in range(entries): - - x = i / (entries - 1) - - while x1 < x: - ix += 1 - x0, x1, xm, rgb0, rgb1, segment = self.gradient[ix] - - w = x1 - x0 - - if w < EPSILON: - scale = segment(0.5, 0.5) - else: - scale = segment((xm - x0) / w, (x - x0) / w) - - # expand to RGBA - r = o8(int(255 * ((rgb1[0] - rgb0[0]) * scale + rgb0[0]) + 0.5)) - g = o8(int(255 * ((rgb1[1] - rgb0[1]) * scale + rgb0[1]) + 0.5)) - b = o8(int(255 * ((rgb1[2] - rgb0[2]) * scale + rgb0[2]) + 0.5)) - a = o8(int(255 * ((rgb1[3] - rgb0[3]) * scale + rgb0[3]) + 0.5)) - - # add to palette - palette.append(r + g + b + a) - - return b"".join(palette), "RGBA" - - -class GimpGradientFile(GradientFile): - """File handler for GIMP's gradient format.""" - - def __init__(self, fp): - - if fp.readline()[:13] != b"GIMP Gradient": - raise SyntaxError("not a GIMP gradient file") - - line = fp.readline() - - # GIMP 1.2 gradient files don't contain a name, but GIMP 1.3 files do - if line.startswith(b"Name: "): - line = fp.readline().strip() - - count = int(line) - - gradient = [] - - for i in range(count): - - s = fp.readline().split() - w = [float(x) for x in s[:11]] - - x0, x1 = w[0], w[2] - xm = w[1] - rgb0 = w[3:7] - rgb1 = w[7:11] - - segment = SEGMENTS[int(s[11])] - cspace = int(s[12]) - - if cspace != 0: - raise OSError("cannot handle HSV colour space") - - gradient.append((x0, x1, xm, rgb0, rgb1, segment)) - - self.gradient = gradient diff --git a/PIL/GimpPaletteFile.py b/PIL/GimpPaletteFile.py deleted file mode 100644 index 10fd3ad..0000000 --- a/PIL/GimpPaletteFile.py +++ /dev/null @@ -1,56 +0,0 @@ -# -# Python Imaging Library -# $Id$ -# -# stuff to read GIMP palette files -# -# History: -# 1997-08-23 fl Created -# 2004-09-07 fl Support GIMP 2.0 palette files. -# -# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. -# Copyright (c) Fredrik Lundh 1997-2004. -# -# See the README file for information on usage and redistribution. -# - -import re - -from ._binary import o8 - - -class GimpPaletteFile: - """File handler for GIMP's palette format.""" - - rawmode = "RGB" - - def __init__(self, fp): - - self.palette = [o8(i) * 3 for i in range(256)] - - if fp.readline()[:12] != b"GIMP Palette": - raise SyntaxError("not a GIMP palette file") - - for i in range(256): - - s = fp.readline() - if not s: - break - - # skip fields and comment lines - if re.match(br"\w+:|#", s): - continue - if len(s) > 100: - raise SyntaxError("bad palette file") - - v = tuple(map(int, s.split()[:3])) - if len(v) != 3: - raise ValueError("bad palette entry") - - self.palette[i] = o8(v[0]) + o8(v[1]) + o8(v[2]) - - self.palette = b"".join(self.palette) - - def getpalette(self): - - return self.palette, self.rawmode diff --git a/PIL/GribStubImagePlugin.py b/PIL/GribStubImagePlugin.py deleted file mode 100644 index b9bdd16..0000000 --- a/PIL/GribStubImagePlugin.py +++ /dev/null @@ -1,73 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# GRIB stub adapter -# -# Copyright (c) 1996-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -from . import Image, ImageFile - -_handler = None - - -def register_handler(handler): - """ - Install application-specific GRIB image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -# -------------------------------------------------------------------- -# Image adapter - - -def _accept(prefix): - return prefix[0:4] == b"GRIB" and prefix[7] == 1 - - -class GribStubImageFile(ImageFile.StubImageFile): - - format = "GRIB" - format_description = "GRIB" - - def _open(self): - - offset = self.fp.tell() - - if not _accept(self.fp.read(8)): - raise SyntaxError("Not a GRIB file") - - self.fp.seek(offset) - - # make something up - self.mode = "F" - self._size = 1, 1 - - loader = self._load() - if loader: - loader.open(self) - - def _load(self): - return _handler - - -def _save(im, fp, filename): - if _handler is None or not hasattr("_handler", "save"): - raise OSError("GRIB save handler not installed") - _handler.save(im, fp, filename) - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(GribStubImageFile.format, GribStubImageFile, _accept) -Image.register_save(GribStubImageFile.format, _save) - -Image.register_extension(GribStubImageFile.format, ".grib") diff --git a/PIL/Hdf5StubImagePlugin.py b/PIL/Hdf5StubImagePlugin.py deleted file mode 100644 index 362f2d3..0000000 --- a/PIL/Hdf5StubImagePlugin.py +++ /dev/null @@ -1,73 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# HDF5 stub adapter -# -# Copyright (c) 2000-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -from . import Image, ImageFile - -_handler = None - - -def register_handler(handler): - """ - Install application-specific HDF5 image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -# -------------------------------------------------------------------- -# Image adapter - - -def _accept(prefix): - return prefix[:8] == b"\x89HDF\r\n\x1a\n" - - -class HDF5StubImageFile(ImageFile.StubImageFile): - - format = "HDF5" - format_description = "HDF5" - - def _open(self): - - offset = self.fp.tell() - - if not _accept(self.fp.read(8)): - raise SyntaxError("Not an HDF file") - - self.fp.seek(offset) - - # make something up - self.mode = "F" - self._size = 1, 1 - - loader = self._load() - if loader: - loader.open(self) - - def _load(self): - return _handler - - -def _save(im, fp, filename): - if _handler is None or not hasattr("_handler", "save"): - raise OSError("HDF5 save handler not installed") - _handler.save(im, fp, filename) - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(HDF5StubImageFile.format, HDF5StubImageFile, _accept) -Image.register_save(HDF5StubImageFile.format, _save) - -Image.register_extensions(HDF5StubImageFile.format, [".h5", ".hdf"]) diff --git a/PIL/IcnsImagePlugin.py b/PIL/IcnsImagePlugin.py deleted file mode 100644 index 2a63d75..0000000 --- a/PIL/IcnsImagePlugin.py +++ /dev/null @@ -1,383 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# macOS icns file decoder, based on icns.py by Bob Ippolito. -# -# history: -# 2004-10-09 fl Turned into a PIL plugin; removed 2.3 dependencies. -# -# Copyright (c) 2004 by Bob Ippolito. -# Copyright (c) 2004 by Secret Labs. -# Copyright (c) 2004 by Fredrik Lundh. -# Copyright (c) 2014 by Alastair Houghton. -# -# See the README file for information on usage and redistribution. -# - -import io -import os -import shutil -import struct -import subprocess -import sys -import tempfile - -from PIL import Image, ImageFile, PngImagePlugin, features - -enable_jpeg2k = features.check_codec("jpg_2000") -if enable_jpeg2k: - from PIL import Jpeg2KImagePlugin - -HEADERSIZE = 8 - - -def nextheader(fobj): - return struct.unpack(">4sI", fobj.read(HEADERSIZE)) - - -def read_32t(fobj, start_length, size): - # The 128x128 icon seems to have an extra header for some reason. - (start, length) = start_length - fobj.seek(start) - sig = fobj.read(4) - if sig != b"\x00\x00\x00\x00": - raise SyntaxError("Unknown signature, expecting 0x00000000") - return read_32(fobj, (start + 4, length - 4), size) - - -def read_32(fobj, start_length, size): - """ - Read a 32bit RGB icon resource. Seems to be either uncompressed or - an RLE packbits-like scheme. - """ - (start, length) = start_length - fobj.seek(start) - pixel_size = (size[0] * size[2], size[1] * size[2]) - sizesq = pixel_size[0] * pixel_size[1] - if length == sizesq * 3: - # uncompressed ("RGBRGBGB") - indata = fobj.read(length) - im = Image.frombuffer("RGB", pixel_size, indata, "raw", "RGB", 0, 1) - else: - # decode image - im = Image.new("RGB", pixel_size, None) - for band_ix in range(3): - data = [] - bytesleft = sizesq - while bytesleft > 0: - byte = fobj.read(1) - if not byte: - break - byte = byte[0] - if byte & 0x80: - blocksize = byte - 125 - byte = fobj.read(1) - for i in range(blocksize): - data.append(byte) - else: - blocksize = byte + 1 - data.append(fobj.read(blocksize)) - bytesleft -= blocksize - if bytesleft <= 0: - break - if bytesleft != 0: - raise SyntaxError(f"Error reading channel [{repr(bytesleft)} left]") - band = Image.frombuffer("L", pixel_size, b"".join(data), "raw", "L", 0, 1) - im.im.putband(band.im, band_ix) - return {"RGB": im} - - -def read_mk(fobj, start_length, size): - # Alpha masks seem to be uncompressed - start = start_length[0] - fobj.seek(start) - pixel_size = (size[0] * size[2], size[1] * size[2]) - sizesq = pixel_size[0] * pixel_size[1] - band = Image.frombuffer("L", pixel_size, fobj.read(sizesq), "raw", "L", 0, 1) - return {"A": band} - - -def read_png_or_jpeg2000(fobj, start_length, size): - (start, length) = start_length - fobj.seek(start) - sig = fobj.read(12) - if sig[:8] == b"\x89PNG\x0d\x0a\x1a\x0a": - fobj.seek(start) - im = PngImagePlugin.PngImageFile(fobj) - return {"RGBA": im} - elif ( - sig[:4] == b"\xff\x4f\xff\x51" - or sig[:4] == b"\x0d\x0a\x87\x0a" - or sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a" - ): - if not enable_jpeg2k: - raise ValueError( - "Unsupported icon subimage format (rebuild PIL " - "with JPEG 2000 support to fix this)" - ) - # j2k, jpc or j2c - fobj.seek(start) - jp2kstream = fobj.read(length) - f = io.BytesIO(jp2kstream) - im = Jpeg2KImagePlugin.Jpeg2KImageFile(f) - if im.mode != "RGBA": - im = im.convert("RGBA") - return {"RGBA": im} - else: - raise ValueError("Unsupported icon subimage format") - - -class IcnsFile: - - SIZES = { - (512, 512, 2): [(b"ic10", read_png_or_jpeg2000)], - (512, 512, 1): [(b"ic09", read_png_or_jpeg2000)], - (256, 256, 2): [(b"ic14", read_png_or_jpeg2000)], - (256, 256, 1): [(b"ic08", read_png_or_jpeg2000)], - (128, 128, 2): [(b"ic13", read_png_or_jpeg2000)], - (128, 128, 1): [ - (b"ic07", read_png_or_jpeg2000), - (b"it32", read_32t), - (b"t8mk", read_mk), - ], - (64, 64, 1): [(b"icp6", read_png_or_jpeg2000)], - (32, 32, 2): [(b"ic12", read_png_or_jpeg2000)], - (48, 48, 1): [(b"ih32", read_32), (b"h8mk", read_mk)], - (32, 32, 1): [ - (b"icp5", read_png_or_jpeg2000), - (b"il32", read_32), - (b"l8mk", read_mk), - ], - (16, 16, 2): [(b"ic11", read_png_or_jpeg2000)], - (16, 16, 1): [ - (b"icp4", read_png_or_jpeg2000), - (b"is32", read_32), - (b"s8mk", read_mk), - ], - } - - def __init__(self, fobj): - """ - fobj is a file-like object as an icns resource - """ - # signature : (start, length) - self.dct = dct = {} - self.fobj = fobj - sig, filesize = nextheader(fobj) - if sig != b"icns": - raise SyntaxError("not an icns file") - i = HEADERSIZE - while i < filesize: - sig, blocksize = nextheader(fobj) - if blocksize <= 0: - raise SyntaxError("invalid block header") - i += HEADERSIZE - blocksize -= HEADERSIZE - dct[sig] = (i, blocksize) - fobj.seek(blocksize, io.SEEK_CUR) - i += blocksize - - def itersizes(self): - sizes = [] - for size, fmts in self.SIZES.items(): - for (fmt, reader) in fmts: - if fmt in self.dct: - sizes.append(size) - break - return sizes - - def bestsize(self): - sizes = self.itersizes() - if not sizes: - raise SyntaxError("No 32bit icon resources found") - return max(sizes) - - def dataforsize(self, size): - """ - Get an icon resource as {channel: array}. Note that - the arrays are bottom-up like windows bitmaps and will likely - need to be flipped or transposed in some way. - """ - dct = {} - for code, reader in self.SIZES[size]: - desc = self.dct.get(code) - if desc is not None: - dct.update(reader(self.fobj, desc, size)) - return dct - - def getimage(self, size=None): - if size is None: - size = self.bestsize() - if len(size) == 2: - size = (size[0], size[1], 1) - channels = self.dataforsize(size) - - im = channels.get("RGBA", None) - if im: - return im - - im = channels.get("RGB").copy() - try: - im.putalpha(channels["A"]) - except KeyError: - pass - return im - - -## -# Image plugin for Mac OS icons. - - -class IcnsImageFile(ImageFile.ImageFile): - """ - PIL image support for Mac OS .icns files. - Chooses the best resolution, but will possibly load - a different size image if you mutate the size attribute - before calling 'load'. - - The info dictionary has a key 'sizes' that is a list - of sizes that the icns file has. - """ - - format = "ICNS" - format_description = "Mac OS icns resource" - - def _open(self): - self.icns = IcnsFile(self.fp) - self.mode = "RGBA" - self.info["sizes"] = self.icns.itersizes() - self.best_size = self.icns.bestsize() - self.size = ( - self.best_size[0] * self.best_size[2], - self.best_size[1] * self.best_size[2], - ) - - @property - def size(self): - return self._size - - @size.setter - def size(self, value): - info_size = value - if info_size not in self.info["sizes"] and len(info_size) == 2: - info_size = (info_size[0], info_size[1], 1) - if ( - info_size not in self.info["sizes"] - and len(info_size) == 3 - and info_size[2] == 1 - ): - simple_sizes = [ - (size[0] * size[2], size[1] * size[2]) for size in self.info["sizes"] - ] - if value in simple_sizes: - info_size = self.info["sizes"][simple_sizes.index(value)] - if info_size not in self.info["sizes"]: - raise ValueError("This is not one of the allowed sizes of this image") - self._size = value - - def load(self): - if len(self.size) == 3: - self.best_size = self.size - self.size = ( - self.best_size[0] * self.best_size[2], - self.best_size[1] * self.best_size[2], - ) - - Image.Image.load(self) - if self.im and self.im.size == self.size: - # Already loaded - return - self.load_prepare() - # This is likely NOT the best way to do it, but whatever. - im = self.icns.getimage(self.best_size) - - # If this is a PNG or JPEG 2000, it won't be loaded yet - im.load() - - self.im = im.im - self.mode = im.mode - self.size = im.size - self.load_end() - - -def _save(im, fp, filename): - """ - Saves the image as a series of PNG files, - that are then converted to a .icns file - using the macOS command line utility 'iconutil'. - - macOS only. - """ - if hasattr(fp, "flush"): - fp.flush() - - # create the temporary set of pngs - with tempfile.TemporaryDirectory(".iconset") as iconset: - provided_images = { - im.width: im for im in im.encoderinfo.get("append_images", []) - } - last_w = None - second_path = None - for w in [16, 32, 128, 256, 512]: - prefix = f"icon_{w}x{w}" - - first_path = os.path.join(iconset, prefix + ".png") - if last_w == w: - shutil.copyfile(second_path, first_path) - else: - im_w = provided_images.get(w, im.resize((w, w), Image.LANCZOS)) - im_w.save(first_path) - - second_path = os.path.join(iconset, prefix + "@2x.png") - im_w2 = provided_images.get(w * 2, im.resize((w * 2, w * 2), Image.LANCZOS)) - im_w2.save(second_path) - last_w = w * 2 - - # iconutil -c icns -o {} {} - - fp_only = not filename - if fp_only: - f, filename = tempfile.mkstemp(".icns") - os.close(f) - convert_cmd = ["iconutil", "-c", "icns", "-o", filename, iconset] - convert_proc = subprocess.Popen( - convert_cmd, stdout=subprocess.PIPE, stderr=subprocess.DEVNULL - ) - - convert_proc.stdout.close() - - retcode = convert_proc.wait() - - if retcode: - raise subprocess.CalledProcessError(retcode, convert_cmd) - - if fp_only: - with open(filename, "rb") as f: - fp.write(f.read()) - - -Image.register_open(IcnsImageFile.format, IcnsImageFile, lambda x: x[:4] == b"icns") -Image.register_extension(IcnsImageFile.format, ".icns") - -if sys.platform == "darwin": - Image.register_save(IcnsImageFile.format, _save) - - Image.register_mime(IcnsImageFile.format, "image/icns") - - -if __name__ == "__main__": - - if len(sys.argv) < 2: - print("Syntax: python IcnsImagePlugin.py [file]") - sys.exit() - - with open(sys.argv[1], "rb") as fp: - imf = IcnsImageFile(fp) - for size in imf.info["sizes"]: - imf.size = size - imf.save("out-%s-%s-%s.png" % size) - with Image.open(sys.argv[1]) as im: - im.save("out.png") - if sys.platform == "windows": - os.startfile("out.png") diff --git a/PIL/IcoImagePlugin.py b/PIL/IcoImagePlugin.py deleted file mode 100644 index e1bfa7a..0000000 --- a/PIL/IcoImagePlugin.py +++ /dev/null @@ -1,328 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Windows Icon support for PIL -# -# History: -# 96-05-27 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# - -# This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis -# . -# https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki -# -# Icon format references: -# * https://en.wikipedia.org/wiki/ICO_(file_format) -# * https://msdn.microsoft.com/en-us/library/ms997538.aspx - - -import struct -import warnings -from io import BytesIO -from math import ceil, log - -from . import BmpImagePlugin, Image, ImageFile, PngImagePlugin -from ._binary import i16le as i16 -from ._binary import i32le as i32 - -# -# -------------------------------------------------------------------- - -_MAGIC = b"\0\0\1\0" - - -def _save(im, fp, filename): - fp.write(_MAGIC) # (2+2) - sizes = im.encoderinfo.get( - "sizes", - [(16, 16), (24, 24), (32, 32), (48, 48), (64, 64), (128, 128), (256, 256)], - ) - width, height = im.size - sizes = filter( - lambda x: False - if (x[0] > width or x[1] > height or x[0] > 256 or x[1] > 256) - else True, - sizes, - ) - sizes = list(sizes) - fp.write(struct.pack("=8bpp) - "reserved": s[3], - "planes": i16(s, 4), - "bpp": i16(s, 6), - "size": i32(s, 8), - "offset": i32(s, 12), - } - - # See Wikipedia - for j in ("width", "height"): - if not icon_header[j]: - icon_header[j] = 256 - - # See Wikipedia notes about color depth. - # We need this just to differ images with equal sizes - icon_header["color_depth"] = ( - icon_header["bpp"] - or ( - icon_header["nb_color"] != 0 - and ceil(log(icon_header["nb_color"], 2)) - ) - or 256 - ) - - icon_header["dim"] = (icon_header["width"], icon_header["height"]) - icon_header["square"] = icon_header["width"] * icon_header["height"] - - self.entry.append(icon_header) - - self.entry = sorted(self.entry, key=lambda x: x["color_depth"]) - # ICO images are usually squares - # self.entry = sorted(self.entry, key=lambda x: x['width']) - self.entry = sorted(self.entry, key=lambda x: x["square"]) - self.entry.reverse() - - def sizes(self): - """ - Get a list of all available icon sizes and color depths. - """ - return {(h["width"], h["height"]) for h in self.entry} - - def getentryindex(self, size, bpp=False): - for (i, h) in enumerate(self.entry): - if size == h["dim"] and (bpp is False or bpp == h["color_depth"]): - return i - return 0 - - def getimage(self, size, bpp=False): - """ - Get an image from the icon - """ - return self.frame(self.getentryindex(size, bpp)) - - def frame(self, idx): - """ - Get an image from frame idx - """ - - header = self.entry[idx] - - self.buf.seek(header["offset"]) - data = self.buf.read(8) - self.buf.seek(header["offset"]) - - if data[:8] == PngImagePlugin._MAGIC: - # png frame - im = PngImagePlugin.PngImageFile(self.buf) - else: - # XOR + AND mask bmp frame - im = BmpImagePlugin.DibImageFile(self.buf) - Image._decompression_bomb_check(im.size) - - # change tile dimension to only encompass XOR image - im._size = (im.size[0], int(im.size[1] / 2)) - d, e, o, a = im.tile[0] - im.tile[0] = d, (0, 0) + im.size, o, a - - # figure out where AND mask image starts - mode = a[0] - bpp = 8 - for k, v in BmpImagePlugin.BIT2MODE.items(): - if mode == v[1]: - bpp = k - break - - if 32 == bpp: - # 32-bit color depth icon image allows semitransparent areas - # PIL's DIB format ignores transparency bits, recover them. - # The DIB is packed in BGRX byte order where X is the alpha - # channel. - - # Back up to start of bmp data - self.buf.seek(o) - # extract every 4th byte (eg. 3,7,11,15,...) - alpha_bytes = self.buf.read(im.size[0] * im.size[1] * 4)[3::4] - - # convert to an 8bpp grayscale image - mask = Image.frombuffer( - "L", # 8bpp - im.size, # (w, h) - alpha_bytes, # source chars - "raw", # raw decoder - ("L", 0, -1), # 8bpp inverted, unpadded, reversed - ) - else: - # get AND image from end of bitmap - w = im.size[0] - if (w % 32) > 0: - # bitmap row data is aligned to word boundaries - w += 32 - (im.size[0] % 32) - - # the total mask data is - # padded row size * height / bits per char - - and_mask_offset = o + int(im.size[0] * im.size[1] * (bpp / 8.0)) - total_bytes = int((w * im.size[1]) / 8) - - self.buf.seek(and_mask_offset) - mask_data = self.buf.read(total_bytes) - - # convert raw data to image - mask = Image.frombuffer( - "1", # 1 bpp - im.size, # (w, h) - mask_data, # source chars - "raw", # raw decoder - ("1;I", int(w / 8), -1), # 1bpp inverted, padded, reversed - ) - - # now we have two images, im is XOR image and mask is AND image - - # apply mask image as alpha channel - im = im.convert("RGBA") - im.putalpha(mask) - - return im - - -## -# Image plugin for Windows Icon files. - - -class IcoImageFile(ImageFile.ImageFile): - """ - PIL read-only image support for Microsoft Windows .ico files. - - By default the largest resolution image in the file will be loaded. This - can be changed by altering the 'size' attribute before calling 'load'. - - The info dictionary has a key 'sizes' that is a list of the sizes available - in the icon file. - - Handles classic, XP and Vista icon formats. - - When saving, PNG compression is used. Support for this was only added in - Windows Vista. - - This plugin is a refactored version of Win32IconImagePlugin by Bryan Davis - . - https://code.google.com/archive/p/casadebender/wikis/Win32IconImagePlugin.wiki - """ - - format = "ICO" - format_description = "Windows Icon" - - def _open(self): - self.ico = IcoFile(self.fp) - self.info["sizes"] = self.ico.sizes() - self.size = self.ico.entry[0]["dim"] - self.load() - - @property - def size(self): - return self._size - - @size.setter - def size(self, value): - if value not in self.info["sizes"]: - raise ValueError("This is not one of the allowed sizes of this image") - self._size = value - - def load(self): - if self.im and self.im.size == self.size: - # Already loaded - return - im = self.ico.getimage(self.size) - # if tile is PNG, it won't really be loaded yet - im.load() - self.im = im.im - self.mode = im.mode - if im.size != self.size: - warnings.warn("Image was not the expected size") - - index = self.ico.getentryindex(self.size) - sizes = list(self.info["sizes"]) - sizes[index] = im.size - self.info["sizes"] = set(sizes) - - self.size = im.size - - def load_seek(self): - # Flag the ImageFile.Parser so that it - # just does all the decode at the end. - pass - - -# -# -------------------------------------------------------------------- - - -Image.register_open(IcoImageFile.format, IcoImageFile, _accept) -Image.register_save(IcoImageFile.format, _save) -Image.register_extension(IcoImageFile.format, ".ico") - -Image.register_mime(IcoImageFile.format, "image/x-icon") diff --git a/PIL/ImImagePlugin.py b/PIL/ImImagePlugin.py deleted file mode 100644 index 1dfc808..0000000 --- a/PIL/ImImagePlugin.py +++ /dev/null @@ -1,376 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# IFUNC IM file handling for PIL -# -# history: -# 1995-09-01 fl Created. -# 1997-01-03 fl Save palette images -# 1997-01-08 fl Added sequence support -# 1997-01-23 fl Added P and RGB save support -# 1997-05-31 fl Read floating point images -# 1997-06-22 fl Save floating point images -# 1997-08-27 fl Read and save 1-bit images -# 1998-06-25 fl Added support for RGB+LUT images -# 1998-07-02 fl Added support for YCC images -# 1998-07-15 fl Renamed offset attribute to avoid name clash -# 1998-12-29 fl Added I;16 support -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) -# 2003-09-26 fl Added LA/PA support -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-2001 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - - -import os -import re - -from . import Image, ImageFile, ImagePalette - -# -------------------------------------------------------------------- -# Standard tags - -COMMENT = "Comment" -DATE = "Date" -EQUIPMENT = "Digitalization equipment" -FRAMES = "File size (no of images)" -LUT = "Lut" -NAME = "Name" -SCALE = "Scale (x,y)" -SIZE = "Image size (x*y)" -MODE = "Image type" - -TAGS = { - COMMENT: 0, - DATE: 0, - EQUIPMENT: 0, - FRAMES: 0, - LUT: 0, - NAME: 0, - SCALE: 0, - SIZE: 0, - MODE: 0, -} - -OPEN = { - # ifunc93/p3cfunc formats - "0 1 image": ("1", "1"), - "L 1 image": ("1", "1"), - "Greyscale image": ("L", "L"), - "Grayscale image": ("L", "L"), - "RGB image": ("RGB", "RGB;L"), - "RLB image": ("RGB", "RLB"), - "RYB image": ("RGB", "RLB"), - "B1 image": ("1", "1"), - "B2 image": ("P", "P;2"), - "B4 image": ("P", "P;4"), - "X 24 image": ("RGB", "RGB"), - "L 32 S image": ("I", "I;32"), - "L 32 F image": ("F", "F;32"), - # old p3cfunc formats - "RGB3 image": ("RGB", "RGB;T"), - "RYB3 image": ("RGB", "RYB;T"), - # extensions - "LA image": ("LA", "LA;L"), - "PA image": ("LA", "PA;L"), - "RGBA image": ("RGBA", "RGBA;L"), - "RGBX image": ("RGBX", "RGBX;L"), - "CMYK image": ("CMYK", "CMYK;L"), - "YCC image": ("YCbCr", "YCbCr;L"), -} - -# ifunc95 extensions -for i in ["8", "8S", "16", "16S", "32", "32F"]: - OPEN[f"L {i} image"] = ("F", f"F;{i}") - OPEN[f"L*{i} image"] = ("F", f"F;{i}") -for i in ["16", "16L", "16B"]: - OPEN[f"L {i} image"] = (f"I;{i}", f"I;{i}") - OPEN[f"L*{i} image"] = (f"I;{i}", f"I;{i}") -for i in ["32S"]: - OPEN[f"L {i} image"] = ("I", f"I;{i}") - OPEN[f"L*{i} image"] = ("I", f"I;{i}") -for i in range(2, 33): - OPEN[f"L*{i} image"] = ("F", f"F;{i}") - - -# -------------------------------------------------------------------- -# Read IM directory - -split = re.compile(br"^([A-Za-z][^:]*):[ \t]*(.*)[ \t]*$") - - -def number(s): - try: - return int(s) - except ValueError: - return float(s) - - -## -# Image plugin for the IFUNC IM file format. - - -class ImImageFile(ImageFile.ImageFile): - - format = "IM" - format_description = "IFUNC Image Memory" - _close_exclusive_fp_after_loading = False - - def _open(self): - - # Quick rejection: if there's not an LF among the first - # 100 bytes, this is (probably) not a text header. - - if b"\n" not in self.fp.read(100): - raise SyntaxError("not an IM file") - self.fp.seek(0) - - n = 0 - - # Default values - self.info[MODE] = "L" - self.info[SIZE] = (512, 512) - self.info[FRAMES] = 1 - - self.rawmode = "L" - - while True: - - s = self.fp.read(1) - - # Some versions of IFUNC uses \n\r instead of \r\n... - if s == b"\r": - continue - - if not s or s == b"\0" or s == b"\x1A": - break - - # FIXME: this may read whole file if not a text file - s = s + self.fp.readline() - - if len(s) > 100: - raise SyntaxError("not an IM file") - - if s[-2:] == b"\r\n": - s = s[:-2] - elif s[-1:] == b"\n": - s = s[:-1] - - try: - m = split.match(s) - except re.error as e: - raise SyntaxError("not an IM file") from e - - if m: - - k, v = m.group(1, 2) - - # Don't know if this is the correct encoding, - # but a decent guess (I guess) - k = k.decode("latin-1", "replace") - v = v.decode("latin-1", "replace") - - # Convert value as appropriate - if k in [FRAMES, SCALE, SIZE]: - v = v.replace("*", ",") - v = tuple(map(number, v.split(","))) - if len(v) == 1: - v = v[0] - elif k == MODE and v in OPEN: - v, self.rawmode = OPEN[v] - - # Add to dictionary. Note that COMMENT tags are - # combined into a list of strings. - if k == COMMENT: - if k in self.info: - self.info[k].append(v) - else: - self.info[k] = [v] - else: - self.info[k] = v - - if k in TAGS: - n += 1 - - else: - - raise SyntaxError( - "Syntax error in IM header: " + s.decode("ascii", "replace") - ) - - if not n: - raise SyntaxError("Not an IM file") - - # Basic attributes - self._size = self.info[SIZE] - self.mode = self.info[MODE] - - # Skip forward to start of image data - while s and s[0:1] != b"\x1A": - s = self.fp.read(1) - if not s: - raise SyntaxError("File truncated") - - if LUT in self.info: - # convert lookup table to palette or lut attribute - palette = self.fp.read(768) - greyscale = 1 # greyscale palette - linear = 1 # linear greyscale palette - for i in range(256): - if palette[i] == palette[i + 256] == palette[i + 512]: - if palette[i] != i: - linear = 0 - else: - greyscale = 0 - if self.mode in ["L", "LA", "P", "PA"]: - if greyscale: - if not linear: - self.lut = list(palette[:256]) - else: - if self.mode in ["L", "P"]: - self.mode = self.rawmode = "P" - elif self.mode in ["LA", "PA"]: - self.mode = "PA" - self.rawmode = "PA;L" - self.palette = ImagePalette.raw("RGB;L", palette) - elif self.mode == "RGB": - if not greyscale or not linear: - self.lut = list(palette) - - self.frame = 0 - - self.__offset = offs = self.fp.tell() - - self.__fp = self.fp # FIXME: hack - - if self.rawmode[:2] == "F;": - - # ifunc95 formats - try: - # use bit decoder (if necessary) - bits = int(self.rawmode[2:]) - if bits not in [8, 16, 32]: - self.tile = [("bit", (0, 0) + self.size, offs, (bits, 8, 3, 0, -1))] - return - except ValueError: - pass - - if self.rawmode in ["RGB;T", "RYB;T"]: - # Old LabEye/3PC files. Would be very surprised if anyone - # ever stumbled upon such a file ;-) - size = self.size[0] * self.size[1] - self.tile = [ - ("raw", (0, 0) + self.size, offs, ("G", 0, -1)), - ("raw", (0, 0) + self.size, offs + size, ("R", 0, -1)), - ("raw", (0, 0) + self.size, offs + 2 * size, ("B", 0, -1)), - ] - else: - # LabEye/IFUNC files - self.tile = [("raw", (0, 0) + self.size, offs, (self.rawmode, 0, -1))] - - @property - def n_frames(self): - return self.info[FRAMES] - - @property - def is_animated(self): - return self.info[FRAMES] > 1 - - def seek(self, frame): - if not self._seek_check(frame): - return - - self.frame = frame - - if self.mode == "1": - bits = 1 - else: - bits = 8 * len(self.mode) - - size = ((self.size[0] * bits + 7) // 8) * self.size[1] - offs = self.__offset + frame * size - - self.fp = self.__fp - - self.tile = [("raw", (0, 0) + self.size, offs, (self.rawmode, 0, -1))] - - def tell(self): - return self.frame - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -# -# -------------------------------------------------------------------- -# Save IM files - - -SAVE = { - # mode: (im type, raw mode) - "1": ("0 1", "1"), - "L": ("Greyscale", "L"), - "LA": ("LA", "LA;L"), - "P": ("Greyscale", "P"), - "PA": ("LA", "PA;L"), - "I": ("L 32S", "I;32S"), - "I;16": ("L 16", "I;16"), - "I;16L": ("L 16L", "I;16L"), - "I;16B": ("L 16B", "I;16B"), - "F": ("L 32F", "F;32F"), - "RGB": ("RGB", "RGB;L"), - "RGBA": ("RGBA", "RGBA;L"), - "RGBX": ("RGBX", "RGBX;L"), - "CMYK": ("CMYK", "CMYK;L"), - "YCbCr": ("YCC", "YCbCr;L"), -} - - -def _save(im, fp, filename): - - try: - image_type, rawmode = SAVE[im.mode] - except KeyError as e: - raise ValueError(f"Cannot save {im.mode} images as IM") from e - - frames = im.encoderinfo.get("frames", 1) - - fp.write(f"Image type: {image_type} image\r\n".encode("ascii")) - if filename: - # Each line must be 100 characters or less, - # or: SyntaxError("not an IM file") - # 8 characters are used for "Name: " and "\r\n" - # Keep just the filename, ditch the potentially overlong path - name, ext = os.path.splitext(os.path.basename(filename)) - name = "".join([name[: 92 - len(ext)], ext]) - - fp.write(f"Name: {name}\r\n".encode("ascii")) - fp.write(("Image size (x*y): %d*%d\r\n" % im.size).encode("ascii")) - fp.write(f"File size (no of images): {frames}\r\n".encode("ascii")) - if im.mode in ["P", "PA"]: - fp.write(b"Lut: 1\r\n") - fp.write(b"\000" * (511 - fp.tell()) + b"\032") - if im.mode in ["P", "PA"]: - fp.write(im.im.getpalette("RGB", "RGB;L")) # 768 bytes - ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, -1))]) - - -# -# -------------------------------------------------------------------- -# Registry - - -Image.register_open(ImImageFile.format, ImImageFile) -Image.register_save(ImImageFile.format, _save) - -Image.register_extension(ImImageFile.format, ".im") diff --git a/PIL/Image.py b/PIL/Image.py deleted file mode 100644 index e2540a2..0000000 --- a/PIL/Image.py +++ /dev/null @@ -1,3491 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# the Image class wrapper -# -# partial release history: -# 1995-09-09 fl Created -# 1996-03-11 fl PIL release 0.0 (proof of concept) -# 1996-04-30 fl PIL release 0.1b1 -# 1999-07-28 fl PIL release 1.0 final -# 2000-06-07 fl PIL release 1.1 -# 2000-10-20 fl PIL release 1.1.1 -# 2001-05-07 fl PIL release 1.1.2 -# 2002-03-15 fl PIL release 1.1.3 -# 2003-05-10 fl PIL release 1.1.4 -# 2005-03-28 fl PIL release 1.1.5 -# 2006-12-02 fl PIL release 1.1.6 -# 2009-11-15 fl PIL release 1.1.7 -# -# Copyright (c) 1997-2009 by Secret Labs AB. All rights reserved. -# Copyright (c) 1995-2009 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -import atexit -import builtins -import io -import logging -import math -import numbers -import os -import struct -import sys -import tempfile -import warnings -import xml.etree.ElementTree -from collections.abc import Callable, MutableMapping -from pathlib import Path - -# VERSION was removed in Pillow 6.0.0. -# PILLOW_VERSION is deprecated and will be removed in a future release. -# Use __version__ instead. -from . import ( - ImageMode, - TiffTags, - UnidentifiedImageError, - __version__, - _plugins, - _raise_version_warning, -) -from ._binary import i32le -from ._util import deferred_error, isPath - -if sys.version_info >= (3, 7): - - def __getattr__(name): - if name == "PILLOW_VERSION": - _raise_version_warning() - return __version__ - raise AttributeError(f"module '{__name__}' has no attribute '{name}'") - - -else: - - from . import PILLOW_VERSION - - # Silence warning - assert PILLOW_VERSION - - -logger = logging.getLogger(__name__) - - -class DecompressionBombWarning(RuntimeWarning): - pass - - -class DecompressionBombError(Exception): - pass - - -# Limit to around a quarter gigabyte for a 24-bit (3 bpp) image -MAX_IMAGE_PIXELS = int(1024 * 1024 * 1024 // 4 // 3) - - -try: - # If the _imaging C module is not present, Pillow will not load. - # Note that other modules should not refer to _imaging directly; - # import Image and use the Image.core variable instead. - # Also note that Image.core is not a publicly documented interface, - # and should be considered private and subject to change. - from . import _imaging as core - - if __version__ != getattr(core, "PILLOW_VERSION", None): - raise ImportError( - "The _imaging extension was built for another version of Pillow or PIL:\n" - f"Core version: {getattr(core, 'PILLOW_VERSION', None)}\n" - f"Pillow version: {__version__}" - ) - -except ImportError as v: - core = deferred_error(ImportError("The _imaging C module is not installed.")) - # Explanations for ways that we know we might have an import error - if str(v).startswith("Module use of python"): - # The _imaging C module is present, but not compiled for - # the right version (windows only). Print a warning, if - # possible. - warnings.warn( - "The _imaging extension was built for another version of Python.", - RuntimeWarning, - ) - elif str(v).startswith("The _imaging extension"): - warnings.warn(str(v), RuntimeWarning) - # Fail here anyway. Don't let people run with a mostly broken Pillow. - # see docs/porting.rst - raise - - -# works everywhere, win for pypy, not cpython -USE_CFFI_ACCESS = hasattr(sys, "pypy_version_info") -try: - import cffi -except ImportError: - cffi = None - - -def isImageType(t): - """ - Checks if an object is an image object. - - .. warning:: - - This function is for internal use only. - - :param t: object to check if it's an image - :returns: True if the object is an image - """ - return hasattr(t, "im") - - -# -# Constants - -NONE = 0 - -# transpose -FLIP_LEFT_RIGHT = 0 -FLIP_TOP_BOTTOM = 1 -ROTATE_90 = 2 -ROTATE_180 = 3 -ROTATE_270 = 4 -TRANSPOSE = 5 -TRANSVERSE = 6 - -# transforms (also defined in Imaging.h) -AFFINE = 0 -EXTENT = 1 -PERSPECTIVE = 2 -QUAD = 3 -MESH = 4 - -# resampling filters (also defined in Imaging.h) -NEAREST = NONE = 0 -BOX = 4 -BILINEAR = LINEAR = 2 -HAMMING = 5 -BICUBIC = CUBIC = 3 -LANCZOS = ANTIALIAS = 1 - -_filters_support = {BOX: 0.5, BILINEAR: 1.0, HAMMING: 1.0, BICUBIC: 2.0, LANCZOS: 3.0} - - -# dithers -NEAREST = NONE = 0 -ORDERED = 1 # Not yet implemented -RASTERIZE = 2 # Not yet implemented -FLOYDSTEINBERG = 3 # default - -# palettes/quantizers -WEB = 0 -ADAPTIVE = 1 - -MEDIANCUT = 0 -MAXCOVERAGE = 1 -FASTOCTREE = 2 -LIBIMAGEQUANT = 3 - -# categories -NORMAL = 0 -SEQUENCE = 1 -CONTAINER = 2 - -if hasattr(core, "DEFAULT_STRATEGY"): - DEFAULT_STRATEGY = core.DEFAULT_STRATEGY - FILTERED = core.FILTERED - HUFFMAN_ONLY = core.HUFFMAN_ONLY - RLE = core.RLE - FIXED = core.FIXED - - -# -------------------------------------------------------------------- -# Registries - -ID = [] -OPEN = {} -MIME = {} -SAVE = {} -SAVE_ALL = {} -EXTENSION = {} -DECODERS = {} -ENCODERS = {} - -# -------------------------------------------------------------------- -# Modes supported by this version - -_MODEINFO = { - # NOTE: this table will be removed in future versions. use - # getmode* functions or ImageMode descriptors instead. - # official modes - "1": ("L", "L", ("1",)), - "L": ("L", "L", ("L",)), - "I": ("L", "I", ("I",)), - "F": ("L", "F", ("F",)), - "P": ("P", "L", ("P",)), - "RGB": ("RGB", "L", ("R", "G", "B")), - "RGBX": ("RGB", "L", ("R", "G", "B", "X")), - "RGBA": ("RGB", "L", ("R", "G", "B", "A")), - "CMYK": ("RGB", "L", ("C", "M", "Y", "K")), - "YCbCr": ("RGB", "L", ("Y", "Cb", "Cr")), - "LAB": ("RGB", "L", ("L", "A", "B")), - "HSV": ("RGB", "L", ("H", "S", "V")), - # Experimental modes include I;16, I;16L, I;16B, RGBa, BGR;15, and - # BGR;24. Use these modes only if you know exactly what you're - # doing... -} - -if sys.byteorder == "little": - _ENDIAN = "<" -else: - _ENDIAN = ">" - -_MODE_CONV = { - # official modes - "1": ("|b1", None), # Bits need to be extended to bytes - "L": ("|u1", None), - "LA": ("|u1", 2), - "I": (_ENDIAN + "i4", None), - "F": (_ENDIAN + "f4", None), - "P": ("|u1", None), - "RGB": ("|u1", 3), - "RGBX": ("|u1", 4), - "RGBA": ("|u1", 4), - "CMYK": ("|u1", 4), - "YCbCr": ("|u1", 3), - "LAB": ("|u1", 3), # UNDONE - unsigned |u1i1i1 - "HSV": ("|u1", 3), - # I;16 == I;16L, and I;32 == I;32L - "I;16": ("u2", None), - "I;16L": ("i2", None), - "I;16LS": ("u4", None), - "I;32L": ("i4", None), - "I;32LS": ("= 1: - return - - try: - from . import BmpImagePlugin - - assert BmpImagePlugin - except ImportError: - pass - try: - from . import GifImagePlugin - - assert GifImagePlugin - except ImportError: - pass - try: - from . import JpegImagePlugin - - assert JpegImagePlugin - except ImportError: - pass - try: - from . import PpmImagePlugin - - assert PpmImagePlugin - except ImportError: - pass - try: - from . import PngImagePlugin - - assert PngImagePlugin - except ImportError: - pass - # try: - # import TiffImagePlugin - # assert TiffImagePlugin - # except ImportError: - # pass - - _initialized = 1 - - -def init(): - """ - Explicitly initializes the Python Imaging Library. This function - loads all available file format drivers. - """ - - global _initialized - if _initialized >= 2: - return 0 - - for plugin in _plugins: - try: - logger.debug("Importing %s", plugin) - __import__(f"PIL.{plugin}", globals(), locals(), []) - except ImportError as e: - logger.debug("Image: failed to import %s: %s", plugin, e) - - if OPEN or SAVE: - _initialized = 2 - return 1 - - -# -------------------------------------------------------------------- -# Codec factories (used by tobytes/frombytes and ImageFile.load) - - -def _getdecoder(mode, decoder_name, args, extra=()): - - # tweak arguments - if args is None: - args = () - elif not isinstance(args, tuple): - args = (args,) - - try: - decoder = DECODERS[decoder_name] - except KeyError: - pass - else: - return decoder(mode, *args + extra) - - try: - # get decoder - decoder = getattr(core, decoder_name + "_decoder") - except AttributeError as e: - raise OSError(f"decoder {decoder_name} not available") from e - return decoder(mode, *args + extra) - - -def _getencoder(mode, encoder_name, args, extra=()): - - # tweak arguments - if args is None: - args = () - elif not isinstance(args, tuple): - args = (args,) - - try: - encoder = ENCODERS[encoder_name] - except KeyError: - pass - else: - return encoder(mode, *args + extra) - - try: - # get encoder - encoder = getattr(core, encoder_name + "_encoder") - except AttributeError as e: - raise OSError(f"encoder {encoder_name} not available") from e - return encoder(mode, *args + extra) - - -# -------------------------------------------------------------------- -# Simple expression analyzer - - -def coerce_e(value): - return value if isinstance(value, _E) else _E(value) - - -class _E: - def __init__(self, data): - self.data = data - - def __add__(self, other): - return _E((self.data, "__add__", coerce_e(other).data)) - - def __mul__(self, other): - return _E((self.data, "__mul__", coerce_e(other).data)) - - -def _getscaleoffset(expr): - stub = ["stub"] - data = expr(_E(stub)).data - try: - (a, b, c) = data # simplified syntax - if a is stub and b == "__mul__" and isinstance(c, numbers.Number): - return c, 0.0 - if a is stub and b == "__add__" and isinstance(c, numbers.Number): - return 1.0, c - except TypeError: - pass - try: - ((a, b, c), d, e) = data # full syntax - if ( - a is stub - and b == "__mul__" - and isinstance(c, numbers.Number) - and d == "__add__" - and isinstance(e, numbers.Number) - ): - return c, e - except TypeError: - pass - raise ValueError("illegal expression") - - -# -------------------------------------------------------------------- -# Implementation wrapper - - -class Image: - """ - This class represents an image object. To create - :py:class:`~PIL.Image.Image` objects, use the appropriate factory - functions. There's hardly ever any reason to call the Image constructor - directly. - - * :py:func:`~PIL.Image.open` - * :py:func:`~PIL.Image.new` - * :py:func:`~PIL.Image.frombytes` - """ - - format = None - format_description = None - _close_exclusive_fp_after_loading = True - - def __init__(self): - # FIXME: take "new" parameters / other image? - # FIXME: turn mode and size into delegating properties? - self.im = None - self.mode = "" - self._size = (0, 0) - self.palette = None - self.info = {} - self.category = NORMAL - self.readonly = 0 - self.pyaccess = None - self._exif = None - - @property - def width(self): - return self.size[0] - - @property - def height(self): - return self.size[1] - - @property - def size(self): - return self._size - - def _new(self, im): - new = Image() - new.im = im - new.mode = im.mode - new._size = im.size - if im.mode in ("P", "PA"): - if self.palette: - new.palette = self.palette.copy() - else: - from . import ImagePalette - - new.palette = ImagePalette.ImagePalette() - new.info = self.info.copy() - return new - - # Context manager support - def __enter__(self): - return self - - def __exit__(self, *args): - if hasattr(self, "fp") and getattr(self, "_exclusive_fp", False): - if hasattr(self, "_close__fp"): - self._close__fp() - if self.fp: - self.fp.close() - self.fp = None - - def close(self): - """ - Closes the file pointer, if possible. - - This operation will destroy the image core and release its memory. - The image data will be unusable afterward. - - This function is only required to close images that have not - had their file read and closed by the - :py:meth:`~PIL.Image.Image.load` method. See - :ref:`file-handling` for more information. - """ - try: - if hasattr(self, "_close__fp"): - self._close__fp() - if self.fp: - self.fp.close() - self.fp = None - except Exception as msg: - logger.debug("Error closing: %s", msg) - - if getattr(self, "map", None): - self.map = None - - # Instead of simply setting to None, we're setting up a - # deferred error that will better explain that the core image - # object is gone. - self.im = deferred_error(ValueError("Operation on closed image")) - - def _copy(self): - self.load() - self.im = self.im.copy() - self.pyaccess = None - self.readonly = 0 - - def _ensure_mutable(self): - if self.readonly: - self._copy() - else: - self.load() - - def _dump(self, file=None, format=None, **options): - suffix = "" - if format: - suffix = "." + format - - if not file: - f, filename = tempfile.mkstemp(suffix) - os.close(f) - else: - filename = file - if not filename.endswith(suffix): - filename = filename + suffix - - self.load() - - if not format or format == "PPM": - self.im.save_ppm(filename) - else: - self.save(filename, format, **options) - - return filename - - def __eq__(self, other): - return ( - self.__class__ is other.__class__ - and self.mode == other.mode - and self.size == other.size - and self.info == other.info - and self.category == other.category - and self.readonly == other.readonly - and self.getpalette() == other.getpalette() - and self.tobytes() == other.tobytes() - ) - - def __repr__(self): - return "<%s.%s image mode=%s size=%dx%d at 0x%X>" % ( - self.__class__.__module__, - self.__class__.__name__, - self.mode, - self.size[0], - self.size[1], - id(self), - ) - - def _repr_png_(self): - """iPython display hook support - - :returns: png version of the image as bytes - """ - b = io.BytesIO() - try: - self.save(b, "PNG") - except Exception as e: - raise ValueError("Could not save to PNG for display") from e - return b.getvalue() - - @property - def __array_interface__(self): - # numpy array interface support - new = {} - shape, typestr = _conv_type_shape(self) - new["shape"] = shape - new["typestr"] = typestr - new["version"] = 3 - if self.mode == "1": - # Binary images need to be extended from bits to bytes - # See: https://github.com/python-pillow/Pillow/issues/350 - new["data"] = self.tobytes("raw", "L") - else: - new["data"] = self.tobytes() - return new - - def __getstate__(self): - return [self.info, self.mode, self.size, self.getpalette(), self.tobytes()] - - def __setstate__(self, state): - Image.__init__(self) - self.tile = [] - info, mode, size, palette, data = state - self.info = info - self.mode = mode - self._size = size - self.im = core.new(mode, size) - if mode in ("L", "LA", "P", "PA") and palette: - self.putpalette(palette) - self.frombytes(data) - - def tobytes(self, encoder_name="raw", *args): - """ - Return image as a bytes object. - - .. warning:: - - This method returns the raw image data from the internal - storage. For compressed image data (e.g. PNG, JPEG) use - :meth:`~.save`, with a BytesIO parameter for in-memory - data. - - :param encoder_name: What encoder to use. The default is to - use the standard "raw" encoder. - :param args: Extra arguments to the encoder. - :returns: A :py:class:`bytes` object. - """ - - # may pass tuple instead of argument list - if len(args) == 1 and isinstance(args[0], tuple): - args = args[0] - - if encoder_name == "raw" and args == (): - args = self.mode - - self.load() - - # unpack data - e = _getencoder(self.mode, encoder_name, args) - e.setimage(self.im) - - bufsize = max(65536, self.size[0] * 4) # see RawEncode.c - - data = [] - while True: - l, s, d = e.encode(bufsize) - data.append(d) - if s: - break - if s < 0: - raise RuntimeError(f"encoder error {s} in tobytes") - - return b"".join(data) - - def tobitmap(self, name="image"): - """ - Returns the image converted to an X11 bitmap. - - .. note:: This method only works for mode "1" images. - - :param name: The name prefix to use for the bitmap variables. - :returns: A string containing an X11 bitmap. - :raises ValueError: If the mode is not "1" - """ - - self.load() - if self.mode != "1": - raise ValueError("not a bitmap") - data = self.tobytes("xbm") - return b"".join( - [ - f"#define {name}_width {self.size[0]}\n".encode("ascii"), - f"#define {name}_height {self.size[1]}\n".encode("ascii"), - f"static char {name}_bits[] = {{\n".encode("ascii"), - data, - b"};", - ] - ) - - def frombytes(self, data, decoder_name="raw", *args): - """ - Loads this image with pixel data from a bytes object. - - This method is similar to the :py:func:`~PIL.Image.frombytes` function, - but loads data into this image instead of creating a new image object. - """ - - # may pass tuple instead of argument list - if len(args) == 1 and isinstance(args[0], tuple): - args = args[0] - - # default format - if decoder_name == "raw" and args == (): - args = self.mode - - # unpack data - d = _getdecoder(self.mode, decoder_name, args) - d.setimage(self.im) - s = d.decode(data) - - if s[0] >= 0: - raise ValueError("not enough image data") - if s[1] != 0: - raise ValueError("cannot decode image data") - - def load(self): - """ - Allocates storage for the image and loads the pixel data. In - normal cases, you don't need to call this method, since the - Image class automatically loads an opened image when it is - accessed for the first time. - - If the file associated with the image was opened by Pillow, then this - method will close it. The exception to this is if the image has - multiple frames, in which case the file will be left open for seek - operations. See :ref:`file-handling` for more information. - - :returns: An image access object. - :rtype: :ref:`PixelAccess` or :py:class:`PIL.PyAccess` - """ - if self.im and self.palette and self.palette.dirty: - # realize palette - mode, arr = self.palette.getdata() - if mode == "RGBA": - mode = "RGB" - self.info["transparency"] = arr[3::4] - arr = bytes( - value for (index, value) in enumerate(arr) if index % 4 != 3 - ) - self.im.putpalette(mode, arr) - self.palette.dirty = 0 - self.palette.rawmode = None - if "transparency" in self.info: - if isinstance(self.info["transparency"], int): - self.im.putpalettealpha(self.info["transparency"], 0) - else: - self.im.putpalettealphas(self.info["transparency"]) - self.palette.mode = "RGBA" - else: - self.palette.mode = "RGB" - - if self.im: - if cffi and USE_CFFI_ACCESS: - if self.pyaccess: - return self.pyaccess - from . import PyAccess - - self.pyaccess = PyAccess.new(self, self.readonly) - if self.pyaccess: - return self.pyaccess - return self.im.pixel_access(self.readonly) - - def verify(self): - """ - Verifies the contents of a file. For data read from a file, this - method attempts to determine if the file is broken, without - actually decoding the image data. If this method finds any - problems, it raises suitable exceptions. If you need to load - the image after using this method, you must reopen the image - file. - """ - pass - - def convert(self, mode=None, matrix=None, dither=None, palette=WEB, colors=256): - """ - Returns a converted copy of this image. For the "P" mode, this - method translates pixels through the palette. If mode is - omitted, a mode is chosen so that all information in the image - and the palette can be represented without a palette. - - The current version supports all possible conversions between - "L", "RGB" and "CMYK." The ``matrix`` argument only supports "L" - and "RGB". - - When translating a color image to greyscale (mode "L"), - the library uses the ITU-R 601-2 luma transform:: - - L = R * 299/1000 + G * 587/1000 + B * 114/1000 - - The default method of converting a greyscale ("L") or "RGB" - image into a bilevel (mode "1") image uses Floyd-Steinberg - dither to approximate the original image luminosity levels. If - dither is :data:`NONE`, all values larger than 128 are set to 255 (white), - all other values to 0 (black). To use other thresholds, use the - :py:meth:`~PIL.Image.Image.point` method. - - When converting from "RGBA" to "P" without a ``matrix`` argument, - this passes the operation to :py:meth:`~PIL.Image.Image.quantize`, - and ``dither`` and ``palette`` are ignored. - - :param mode: The requested mode. See: :ref:`concept-modes`. - :param matrix: An optional conversion matrix. If given, this - should be 4- or 12-tuple containing floating point values. - :param dither: Dithering method, used when converting from - mode "RGB" to "P" or from "RGB" or "L" to "1". - Available methods are :data:`NONE` or :data:`FLOYDSTEINBERG` (default). - Note that this is not used when ``matrix`` is supplied. - :param palette: Palette to use when converting from mode "RGB" - to "P". Available palettes are :data:`WEB` or :data:`ADAPTIVE`. - :param colors: Number of colors to use for the :data:`ADAPTIVE` palette. - Defaults to 256. - :rtype: :py:class:`~PIL.Image.Image` - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - self.load() - - if not mode and self.mode == "P": - # determine default mode - if self.palette: - mode = self.palette.mode - else: - mode = "RGB" - if not mode or (mode == self.mode and not matrix): - return self.copy() - - has_transparency = self.info.get("transparency") is not None - if matrix: - # matrix conversion - if mode not in ("L", "RGB"): - raise ValueError("illegal conversion") - im = self.im.convert_matrix(mode, matrix) - new = self._new(im) - if has_transparency and self.im.bands == 3: - transparency = new.info["transparency"] - - def convert_transparency(m, v): - v = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3] * 0.5 - return max(0, min(255, int(v))) - - if mode == "L": - transparency = convert_transparency(matrix, transparency) - elif len(mode) == 3: - transparency = tuple( - [ - convert_transparency( - matrix[i * 4 : i * 4 + 4], transparency - ) - for i in range(0, len(transparency)) - ] - ) - new.info["transparency"] = transparency - return new - - if mode == "P" and self.mode == "RGBA": - return self.quantize(colors) - - trns = None - delete_trns = False - # transparency handling - if has_transparency: - if self.mode in ("1", "L", "I", "RGB") and mode == "RGBA": - # Use transparent conversion to promote from transparent - # color to an alpha channel. - new_im = self._new( - self.im.convert_transparent(mode, self.info["transparency"]) - ) - del new_im.info["transparency"] - return new_im - elif self.mode in ("L", "RGB", "P") and mode in ("L", "RGB", "P"): - t = self.info["transparency"] - if isinstance(t, bytes): - # Dragons. This can't be represented by a single color - warnings.warn( - "Palette images with Transparency expressed in bytes should be " - "converted to RGBA images" - ) - delete_trns = True - else: - # get the new transparency color. - # use existing conversions - trns_im = Image()._new(core.new(self.mode, (1, 1))) - if self.mode == "P": - trns_im.putpalette(self.palette) - if isinstance(t, tuple): - try: - t = trns_im.palette.getcolor(t) - except Exception as e: - raise ValueError( - "Couldn't allocate a palette color for transparency" - ) from e - trns_im.putpixel((0, 0), t) - - if mode in ("L", "RGB"): - trns_im = trns_im.convert(mode) - else: - # can't just retrieve the palette number, got to do it - # after quantization. - trns_im = trns_im.convert("RGB") - trns = trns_im.getpixel((0, 0)) - - elif self.mode == "P" and mode == "RGBA": - t = self.info["transparency"] - delete_trns = True - - if isinstance(t, bytes): - self.im.putpalettealphas(t) - elif isinstance(t, int): - self.im.putpalettealpha(t, 0) - else: - raise ValueError("Transparency for P mode should be bytes or int") - - if mode == "P" and palette == ADAPTIVE: - im = self.im.quantize(colors) - new = self._new(im) - from . import ImagePalette - - new.palette = ImagePalette.raw("RGB", new.im.getpalette("RGB")) - if delete_trns: - # This could possibly happen if we requantize to fewer colors. - # The transparency would be totally off in that case. - del new.info["transparency"] - if trns is not None: - try: - new.info["transparency"] = new.palette.getcolor(trns) - except Exception: - # if we can't make a transparent color, don't leave the old - # transparency hanging around to mess us up. - del new.info["transparency"] - warnings.warn("Couldn't allocate palette entry for transparency") - return new - - # colorspace conversion - if dither is None: - dither = FLOYDSTEINBERG - - try: - im = self.im.convert(mode, dither) - except ValueError: - try: - # normalize source image and try again - im = self.im.convert(getmodebase(self.mode)) - im = im.convert(mode, dither) - except KeyError as e: - raise ValueError("illegal conversion") from e - - new_im = self._new(im) - if delete_trns: - # crash fail if we leave a bytes transparency in an rgb/l mode. - del new_im.info["transparency"] - if trns is not None: - if new_im.mode == "P": - try: - new_im.info["transparency"] = new_im.palette.getcolor(trns) - except Exception: - del new_im.info["transparency"] - warnings.warn("Couldn't allocate palette entry for transparency") - else: - new_im.info["transparency"] = trns - return new_im - - def quantize(self, colors=256, method=None, kmeans=0, palette=None, dither=1): - """ - Convert the image to 'P' mode with the specified number - of colors. - - :param colors: The desired number of colors, <= 256 - :param method: :data:`MEDIANCUT` (median cut), - :data:`MAXCOVERAGE` (maximum coverage), - :data:`FASTOCTREE` (fast octree), - :data:`LIBIMAGEQUANT` (libimagequant; check support using - :py:func:`PIL.features.check_feature` - with ``feature="libimagequant"``). - :param kmeans: Integer - :param palette: Quantize to the palette of given - :py:class:`PIL.Image.Image`. - :param dither: Dithering method, used when converting from - mode "RGB" to "P" or from "RGB" or "L" to "1". - Available methods are :data:`NONE` or :data:`FLOYDSTEINBERG` (default). - Default: 1 (legacy setting) - :returns: A new image - - """ - - self.load() - - if method is None: - # defaults: - method = 0 - if self.mode == "RGBA": - method = 2 - - if self.mode == "RGBA" and method not in (2, 3): - # Caller specified an invalid mode. - raise ValueError( - "Fast Octree (method == 2) and libimagequant (method == 3) " - "are the only valid methods for quantizing RGBA images" - ) - - if palette: - # use palette from reference image - palette.load() - if palette.mode != "P": - raise ValueError("bad mode for palette image") - if self.mode != "RGB" and self.mode != "L": - raise ValueError( - "only RGB or L mode images can be quantized to a palette" - ) - im = self.im.convert("P", dither, palette.im) - return self._new(im) - - im = self._new(self.im.quantize(colors, method, kmeans)) - - from . import ImagePalette - - mode = im.im.getpalettemode() - im.palette = ImagePalette.ImagePalette(mode, im.im.getpalette(mode, mode)) - - return im - - def copy(self): - """ - Copies this image. Use this method if you wish to paste things - into an image, but still retain the original. - - :rtype: :py:class:`~PIL.Image.Image` - :returns: An :py:class:`~PIL.Image.Image` object. - """ - self.load() - return self._new(self.im.copy()) - - __copy__ = copy - - def crop(self, box=None): - """ - Returns a rectangular region from this image. The box is a - 4-tuple defining the left, upper, right, and lower pixel - coordinate. See :ref:`coordinate-system`. - - Note: Prior to Pillow 3.4.0, this was a lazy operation. - - :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. - :rtype: :py:class:`~PIL.Image.Image` - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if box is None: - return self.copy() - - self.load() - return self._new(self._crop(self.im, box)) - - def _crop(self, im, box): - """ - Returns a rectangular region from the core image object im. - - This is equivalent to calling im.crop((x0, y0, x1, y1)), but - includes additional sanity checks. - - :param im: a core image object - :param box: The crop rectangle, as a (left, upper, right, lower)-tuple. - :returns: A core image object. - """ - - x0, y0, x1, y1 = map(int, map(round, box)) - - absolute_values = (abs(x1 - x0), abs(y1 - y0)) - - _decompression_bomb_check(absolute_values) - - return im.crop((x0, y0, x1, y1)) - - def draft(self, mode, size): - """ - Configures the image file loader so it returns a version of the - image that as closely as possible matches the given mode and - size. For example, you can use this method to convert a color - JPEG to greyscale while loading it. - - If any changes are made, returns a tuple with the chosen ``mode`` and - ``box`` with coordinates of the original image within the altered one. - - Note that this method modifies the :py:class:`~PIL.Image.Image` object - in place. If the image has already been loaded, this method has no - effect. - - Note: This method is not implemented for most images. It is - currently implemented only for JPEG and MPO images. - - :param mode: The requested mode. - :param size: The requested size. - """ - pass - - def _expand(self, xmargin, ymargin=None): - if ymargin is None: - ymargin = xmargin - self.load() - return self._new(self.im.expand(xmargin, ymargin, 0)) - - def filter(self, filter): - """ - Filters this image using the given filter. For a list of - available filters, see the :py:mod:`~PIL.ImageFilter` module. - - :param filter: Filter kernel. - :returns: An :py:class:`~PIL.Image.Image` object.""" - - from . import ImageFilter - - self.load() - - if isinstance(filter, Callable): - filter = filter() - if not hasattr(filter, "filter"): - raise TypeError( - "filter argument should be ImageFilter.Filter instance or class" - ) - - multiband = isinstance(filter, ImageFilter.MultibandFilter) - if self.im.bands == 1 or multiband: - return self._new(filter.filter(self.im)) - - ims = [] - for c in range(self.im.bands): - ims.append(self._new(filter.filter(self.im.getband(c)))) - return merge(self.mode, ims) - - def getbands(self): - """ - Returns a tuple containing the name of each band in this image. - For example, ``getbands`` on an RGB image returns ("R", "G", "B"). - - :returns: A tuple containing band names. - :rtype: tuple - """ - return ImageMode.getmode(self.mode).bands - - def getbbox(self): - """ - Calculates the bounding box of the non-zero regions in the - image. - - :returns: The bounding box is returned as a 4-tuple defining the - left, upper, right, and lower pixel coordinate. See - :ref:`coordinate-system`. If the image is completely empty, this - method returns None. - - """ - - self.load() - return self.im.getbbox() - - def getcolors(self, maxcolors=256): - """ - Returns a list of colors used in this image. - - :param maxcolors: Maximum number of colors. If this number is - exceeded, this method returns None. The default limit is - 256 colors. - :returns: An unsorted list of (count, pixel) values. - """ - - self.load() - if self.mode in ("1", "L", "P"): - h = self.im.histogram() - out = [] - for i in range(256): - if h[i]: - out.append((h[i], i)) - if len(out) > maxcolors: - return None - return out - return self.im.getcolors(maxcolors) - - def getdata(self, band=None): - """ - Returns the contents of this image as a sequence object - containing pixel values. The sequence object is flattened, so - that values for line one follow directly after the values of - line zero, and so on. - - Note that the sequence object returned by this method is an - internal PIL data type, which only supports certain sequence - operations. To convert it to an ordinary sequence (e.g. for - printing), use ``list(im.getdata())``. - - :param band: What band to return. The default is to return - all bands. To return a single band, pass in the index - value (e.g. 0 to get the "R" band from an "RGB" image). - :returns: A sequence-like object. - """ - - self.load() - if band is not None: - return self.im.getband(band) - return self.im # could be abused - - def getextrema(self): - """ - Gets the the minimum and maximum pixel values for each band in - the image. - - :returns: For a single-band image, a 2-tuple containing the - minimum and maximum pixel value. For a multi-band image, - a tuple containing one 2-tuple for each band. - """ - - self.load() - if self.im.bands > 1: - extrema = [] - for i in range(self.im.bands): - extrema.append(self.im.getband(i).getextrema()) - return tuple(extrema) - return self.im.getextrema() - - def getexif(self): - if self._exif is None: - self._exif = Exif() - - exif_info = self.info.get("exif") - if exif_info is None and "Raw profile type exif" in self.info: - exif_info = bytes.fromhex( - "".join(self.info["Raw profile type exif"].split("\n")[3:]) - ) - self._exif.load(exif_info) - - # XMP tags - if 0x0112 not in self._exif: - xmp_tags = self.info.get("XML:com.adobe.xmp") - if xmp_tags: - root = xml.etree.ElementTree.fromstring(xmp_tags) - for elem in root.iter(): - if elem.tag.endswith("}Description"): - orientation = elem.attrib.get( - "{http://ns.adobe.com/tiff/1.0/}Orientation" - ) - if orientation: - self._exif[0x0112] = int(orientation) - break - - return self._exif - - def getim(self): - """ - Returns a capsule that points to the internal image memory. - - :returns: A capsule object. - """ - - self.load() - return self.im.ptr - - def getpalette(self): - """ - Returns the image palette as a list. - - :returns: A list of color values [r, g, b, ...], or None if the - image has no palette. - """ - - self.load() - try: - return list(self.im.getpalette()) - except ValueError: - return None # no palette - - def getpixel(self, xy): - """ - Returns the pixel value at a given position. - - :param xy: The coordinate, given as (x, y). See - :ref:`coordinate-system`. - :returns: The pixel value. If the image is a multi-layer image, - this method returns a tuple. - """ - - self.load() - if self.pyaccess: - return self.pyaccess.getpixel(xy) - return self.im.getpixel(xy) - - def getprojection(self): - """ - Get projection to x and y axes - - :returns: Two sequences, indicating where there are non-zero - pixels along the X-axis and the Y-axis, respectively. - """ - - self.load() - x, y = self.im.getprojection() - return list(x), list(y) - - def histogram(self, mask=None, extrema=None): - """ - Returns a histogram for the image. The histogram is returned as - a list of pixel counts, one for each pixel value in the source - image. If the image has more than one band, the histograms for - all bands are concatenated (for example, the histogram for an - "RGB" image contains 768 values). - - A bilevel image (mode "1") is treated as a greyscale ("L") image - by this method. - - If a mask is provided, the method returns a histogram for those - parts of the image where the mask image is non-zero. The mask - image must have the same size as the image, and be either a - bi-level image (mode "1") or a greyscale image ("L"). - - :param mask: An optional mask. - :param extrema: An optional tuple of manually-specified extrema. - :returns: A list containing pixel counts. - """ - self.load() - if mask: - mask.load() - return self.im.histogram((0, 0), mask.im) - if self.mode in ("I", "F"): - if extrema is None: - extrema = self.getextrema() - return self.im.histogram(extrema) - return self.im.histogram() - - def entropy(self, mask=None, extrema=None): - """ - Calculates and returns the entropy for the image. - - A bilevel image (mode "1") is treated as a greyscale ("L") - image by this method. - - If a mask is provided, the method employs the histogram for - those parts of the image where the mask image is non-zero. - The mask image must have the same size as the image, and be - either a bi-level image (mode "1") or a greyscale image ("L"). - - :param mask: An optional mask. - :param extrema: An optional tuple of manually-specified extrema. - :returns: A float value representing the image entropy - """ - self.load() - if mask: - mask.load() - return self.im.entropy((0, 0), mask.im) - if self.mode in ("I", "F"): - if extrema is None: - extrema = self.getextrema() - return self.im.entropy(extrema) - return self.im.entropy() - - def paste(self, im, box=None, mask=None): - """ - Pastes another image into this image. The box argument is either - a 2-tuple giving the upper left corner, a 4-tuple defining the - left, upper, right, and lower pixel coordinate, or None (same as - (0, 0)). See :ref:`coordinate-system`. If a 4-tuple is given, the size - of the pasted image must match the size of the region. - - If the modes don't match, the pasted image is converted to the mode of - this image (see the :py:meth:`~PIL.Image.Image.convert` method for - details). - - Instead of an image, the source can be a integer or tuple - containing pixel values. The method then fills the region - with the given color. When creating RGB images, you can - also use color strings as supported by the ImageColor module. - - If a mask is given, this method updates only the regions - indicated by the mask. You can use either "1", "L" or "RGBA" - images (in the latter case, the alpha band is used as mask). - Where the mask is 255, the given image is copied as is. Where - the mask is 0, the current value is preserved. Intermediate - values will mix the two images together, including their alpha - channels if they have them. - - See :py:meth:`~PIL.Image.Image.alpha_composite` if you want to - combine images with respect to their alpha channels. - - :param im: Source image or pixel value (integer or tuple). - :param box: An optional 4-tuple giving the region to paste into. - If a 2-tuple is used instead, it's treated as the upper left - corner. If omitted or None, the source is pasted into the - upper left corner. - - If an image is given as the second argument and there is no - third, the box defaults to (0, 0), and the second argument - is interpreted as a mask image. - :param mask: An optional mask image. - """ - - if isImageType(box) and mask is None: - # abbreviated paste(im, mask) syntax - mask = box - box = None - - if box is None: - box = (0, 0) - - if len(box) == 2: - # upper left corner given; get size from image or mask - if isImageType(im): - size = im.size - elif isImageType(mask): - size = mask.size - else: - # FIXME: use self.size here? - raise ValueError("cannot determine region size; use 4-item box") - box += (box[0] + size[0], box[1] + size[1]) - - if isinstance(im, str): - from . import ImageColor - - im = ImageColor.getcolor(im, self.mode) - - elif isImageType(im): - im.load() - if self.mode != im.mode: - if self.mode != "RGB" or im.mode not in ("RGBA", "RGBa"): - # should use an adapter for this! - im = im.convert(self.mode) - im = im.im - - self._ensure_mutable() - - if mask: - mask.load() - self.im.paste(im, box, mask.im) - else: - self.im.paste(im, box) - - def alpha_composite(self, im, dest=(0, 0), source=(0, 0)): - """'In-place' analog of Image.alpha_composite. Composites an image - onto this image. - - :param im: image to composite over this one - :param dest: Optional 2 tuple (left, top) specifying the upper - left corner in this (destination) image. - :param source: Optional 2 (left, top) tuple for the upper left - corner in the overlay source image, or 4 tuple (left, top, right, - bottom) for the bounds of the source rectangle - - Performance Note: Not currently implemented in-place in the core layer. - """ - - if not isinstance(source, (list, tuple)): - raise ValueError("Source must be a tuple") - if not isinstance(dest, (list, tuple)): - raise ValueError("Destination must be a tuple") - if not len(source) in (2, 4): - raise ValueError("Source must be a 2 or 4-tuple") - if not len(dest) == 2: - raise ValueError("Destination must be a 2-tuple") - if min(source) < 0: - raise ValueError("Source must be non-negative") - if min(dest) < 0: - raise ValueError("Destination must be non-negative") - - if len(source) == 2: - source = source + im.size - - # over image, crop if it's not the whole thing. - if source == (0, 0) + im.size: - overlay = im - else: - overlay = im.crop(source) - - # target for the paste - box = dest + (dest[0] + overlay.width, dest[1] + overlay.height) - - # destination image. don't copy if we're using the whole image. - if box == (0, 0) + self.size: - background = self - else: - background = self.crop(box) - - result = alpha_composite(background, overlay) - self.paste(result, box) - - def point(self, lut, mode=None): - """ - Maps this image through a lookup table or function. - - :param lut: A lookup table, containing 256 (or 65536 if - self.mode=="I" and mode == "L") values per band in the - image. A function can be used instead, it should take a - single argument. The function is called once for each - possible pixel value, and the resulting table is applied to - all bands of the image. - - It may also be an :py:class:`~PIL.Image.ImagePointHandler` - object:: - - class Example(Image.ImagePointHandler): - def point(self, data): - # Return result - :param mode: Output mode (default is same as input). In the - current version, this can only be used if the source image - has mode "L" or "P", and the output has mode "1" or the - source image mode is "I" and the output mode is "L". - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - self.load() - - if isinstance(lut, ImagePointHandler): - return lut.point(self) - - if callable(lut): - # if it isn't a list, it should be a function - if self.mode in ("I", "I;16", "F"): - # check if the function can be used with point_transform - # UNDONE wiredfool -- I think this prevents us from ever doing - # a gamma function point transform on > 8bit images. - scale, offset = _getscaleoffset(lut) - return self._new(self.im.point_transform(scale, offset)) - # for other modes, convert the function to a table - lut = [lut(i) for i in range(256)] * self.im.bands - - if self.mode == "F": - # FIXME: _imaging returns a confusing error message for this case - raise ValueError("point operation not supported for this mode") - - return self._new(self.im.point(lut, mode)) - - def putalpha(self, alpha): - """ - Adds or replaces the alpha layer in this image. If the image - does not have an alpha layer, it's converted to "LA" or "RGBA". - The new layer must be either "L" or "1". - - :param alpha: The new alpha layer. This can either be an "L" or "1" - image having the same size as this image, or an integer or - other color value. - """ - - self._ensure_mutable() - - if self.mode not in ("LA", "PA", "RGBA"): - # attempt to promote self to a matching alpha mode - try: - mode = getmodebase(self.mode) + "A" - try: - self.im.setmode(mode) - except (AttributeError, ValueError) as e: - # do things the hard way - im = self.im.convert(mode) - if im.mode not in ("LA", "PA", "RGBA"): - raise ValueError from e # sanity check - self.im = im - self.pyaccess = None - self.mode = self.im.mode - except KeyError as e: - raise ValueError("illegal image mode") from e - - if self.mode in ("LA", "PA"): - band = 1 - else: - band = 3 - - if isImageType(alpha): - # alpha layer - if alpha.mode not in ("1", "L"): - raise ValueError("illegal image mode") - alpha.load() - if alpha.mode == "1": - alpha = alpha.convert("L") - else: - # constant alpha - try: - self.im.fillband(band, alpha) - except (AttributeError, ValueError): - # do things the hard way - alpha = new("L", self.size, alpha) - else: - return - - self.im.putband(alpha.im, band) - - def putdata(self, data, scale=1.0, offset=0.0): - """ - Copies pixel data to this image. This method copies data from a - sequence object into the image, starting at the upper left - corner (0, 0), and continuing until either the image or the - sequence ends. The scale and offset values are used to adjust - the sequence values: **pixel = value*scale + offset**. - - :param data: A sequence object. - :param scale: An optional scale value. The default is 1.0. - :param offset: An optional offset value. The default is 0.0. - """ - - self._ensure_mutable() - - self.im.putdata(data, scale, offset) - - def putpalette(self, data, rawmode="RGB"): - """ - Attaches a palette to this image. The image must be a "P", "PA", "L" - or "LA" image. - - The palette sequence must contain either 768 integer values, or 1024 - integer values if alpha is included. Each group of values represents - the red, green, blue (and alpha if included) values for the - corresponding pixel index. Instead of an integer sequence, you can use - an 8-bit string. - - :param data: A palette sequence (either a list or a string). - :param rawmode: The raw mode of the palette. - """ - from . import ImagePalette - - if self.mode not in ("L", "LA", "P", "PA"): - raise ValueError("illegal image mode") - self.load() - if isinstance(data, ImagePalette.ImagePalette): - palette = ImagePalette.raw(data.rawmode, data.palette) - else: - if not isinstance(data, bytes): - data = bytes(data) - palette = ImagePalette.raw(rawmode, data) - self.mode = "PA" if "A" in self.mode else "P" - self.palette = palette - self.palette.mode = "RGB" - self.load() # install new palette - - def putpixel(self, xy, value): - """ - Modifies the pixel at the given position. The color is given as - a single numerical value for single-band images, and a tuple for - multi-band images. In addition to this, RGB and RGBA tuples are - accepted for P images. - - Note that this method is relatively slow. For more extensive changes, - use :py:meth:`~PIL.Image.Image.paste` or the :py:mod:`~PIL.ImageDraw` - module instead. - - See: - - * :py:meth:`~PIL.Image.Image.paste` - * :py:meth:`~PIL.Image.Image.putdata` - * :py:mod:`~PIL.ImageDraw` - - :param xy: The pixel coordinate, given as (x, y). See - :ref:`coordinate-system`. - :param value: The pixel value. - """ - - if self.readonly: - self._copy() - self.load() - - if self.pyaccess: - return self.pyaccess.putpixel(xy, value) - - if ( - self.mode == "P" - and isinstance(value, (list, tuple)) - and len(value) in [3, 4] - ): - # RGB or RGBA value for a P image - value = self.palette.getcolor(value) - return self.im.putpixel(xy, value) - - def remap_palette(self, dest_map, source_palette=None): - """ - Rewrites the image to reorder the palette. - - :param dest_map: A list of indexes into the original palette. - e.g. ``[1,0]`` would swap a two item palette, and ``list(range(256))`` - is the identity transform. - :param source_palette: Bytes or None. - :returns: An :py:class:`~PIL.Image.Image` object. - - """ - from . import ImagePalette - - if self.mode not in ("L", "P"): - raise ValueError("illegal image mode") - - if source_palette is None: - if self.mode == "P": - real_source_palette = self.im.getpalette("RGB")[:768] - else: # L-mode - real_source_palette = bytearray(i // 3 for i in range(768)) - else: - real_source_palette = source_palette - - palette_bytes = b"" - new_positions = [0] * 256 - - # pick only the used colors from the palette - for i, oldPosition in enumerate(dest_map): - palette_bytes += real_source_palette[oldPosition * 3 : oldPosition * 3 + 3] - new_positions[oldPosition] = i - - # replace the palette color id of all pixel with the new id - - # Palette images are [0..255], mapped through a 1 or 3 - # byte/color map. We need to remap the whole image - # from palette 1 to palette 2. New_positions is - # an array of indexes into palette 1. Palette 2 is - # palette 1 with any holes removed. - - # We're going to leverage the convert mechanism to use the - # C code to remap the image from palette 1 to palette 2, - # by forcing the source image into 'L' mode and adding a - # mapping 'L' mode palette, then converting back to 'L' - # sans palette thus converting the image bytes, then - # assigning the optimized RGB palette. - - # perf reference, 9500x4000 gif, w/~135 colors - # 14 sec prepatch, 1 sec postpatch with optimization forced. - - mapping_palette = bytearray(new_positions) - - m_im = self.copy() - m_im.mode = "P" - - m_im.palette = ImagePalette.ImagePalette( - "RGB", palette=mapping_palette * 3, size=768 - ) - # possibly set palette dirty, then - # m_im.putpalette(mapping_palette, 'L') # converts to 'P' - # or just force it. - # UNDONE -- this is part of the general issue with palettes - m_im.im.putpalette(*m_im.palette.getdata()) - - m_im = m_im.convert("L") - - # Internally, we require 768 bytes for a palette. - new_palette_bytes = palette_bytes + (768 - len(palette_bytes)) * b"\x00" - m_im.putpalette(new_palette_bytes) - m_im.palette = ImagePalette.ImagePalette( - "RGB", palette=palette_bytes, size=len(palette_bytes) - ) - - return m_im - - def _get_safe_box(self, size, resample, box): - """Expands the box so it includes adjacent pixels - that may be used by resampling with the given resampling filter. - """ - filter_support = _filters_support[resample] - 0.5 - scale_x = (box[2] - box[0]) / size[0] - scale_y = (box[3] - box[1]) / size[1] - support_x = filter_support * scale_x - support_y = filter_support * scale_y - - return ( - max(0, int(box[0] - support_x)), - max(0, int(box[1] - support_y)), - min(self.size[0], math.ceil(box[2] + support_x)), - min(self.size[1], math.ceil(box[3] + support_y)), - ) - - def resize(self, size, resample=BICUBIC, box=None, reducing_gap=None): - """ - Returns a resized copy of this image. - - :param size: The requested size in pixels, as a 2-tuple: - (width, height). - :param resample: An optional resampling filter. This can be - one of :py:data:`PIL.Image.NEAREST`, :py:data:`PIL.Image.BOX`, - :py:data:`PIL.Image.BILINEAR`, :py:data:`PIL.Image.HAMMING`, - :py:data:`PIL.Image.BICUBIC` or :py:data:`PIL.Image.LANCZOS`. - Default filter is :py:data:`PIL.Image.BICUBIC`. - If the image has mode "1" or "P", it is - always set to :py:data:`PIL.Image.NEAREST`. - See: :ref:`concept-filters`. - :param box: An optional 4-tuple of floats providing - the source image region to be scaled. - The values must be within (0, 0, width, height) rectangle. - If omitted or None, the entire source is used. - :param reducing_gap: Apply optimization by resizing the image - in two steps. First, reducing the image by integer times - using :py:meth:`~PIL.Image.Image.reduce`. - Second, resizing using regular resampling. The last step - changes size no less than by ``reducing_gap`` times. - ``reducing_gap`` may be None (no first step is performed) - or should be greater than 1.0. The bigger ``reducing_gap``, - the closer the result to the fair resampling. - The smaller ``reducing_gap``, the faster resizing. - With ``reducing_gap`` greater or equal to 3.0, the result is - indistinguishable from fair resampling in most cases. - The default value is None (no optimization). - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if resample not in (NEAREST, BILINEAR, BICUBIC, LANCZOS, BOX, HAMMING): - message = f"Unknown resampling filter ({resample})." - - filters = [ - "{} ({})".format(filter[1], filter[0]) - for filter in ( - (NEAREST, "Image.NEAREST"), - (LANCZOS, "Image.LANCZOS"), - (BILINEAR, "Image.BILINEAR"), - (BICUBIC, "Image.BICUBIC"), - (BOX, "Image.BOX"), - (HAMMING, "Image.HAMMING"), - ) - ] - raise ValueError( - message + " Use " + ", ".join(filters[:-1]) + " or " + filters[-1] - ) - - if reducing_gap is not None and reducing_gap < 1.0: - raise ValueError("reducing_gap must be 1.0 or greater") - - size = tuple(size) - - if box is None: - box = (0, 0) + self.size - else: - box = tuple(box) - - if self.size == size and box == (0, 0) + self.size: - return self.copy() - - if self.mode in ("1", "P"): - resample = NEAREST - - if self.mode in ["LA", "RGBA"]: - im = self.convert(self.mode[:-1] + "a") - im = im.resize(size, resample, box) - return im.convert(self.mode) - - self.load() - - if reducing_gap is not None and resample != NEAREST: - factor_x = int((box[2] - box[0]) / size[0] / reducing_gap) or 1 - factor_y = int((box[3] - box[1]) / size[1] / reducing_gap) or 1 - if factor_x > 1 or factor_y > 1: - reduce_box = self._get_safe_box(size, resample, box) - factor = (factor_x, factor_y) - if callable(self.reduce): - self = self.reduce(factor, box=reduce_box) - else: - self = Image.reduce(self, factor, box=reduce_box) - box = ( - (box[0] - reduce_box[0]) / factor_x, - (box[1] - reduce_box[1]) / factor_y, - (box[2] - reduce_box[0]) / factor_x, - (box[3] - reduce_box[1]) / factor_y, - ) - - return self._new(self.im.resize(size, resample, box)) - - def reduce(self, factor, box=None): - """ - Returns a copy of the image reduced ``factor`` times. - If the size of the image is not dividable by ``factor``, - the resulting size will be rounded up. - - :param factor: A greater than 0 integer or tuple of two integers - for width and height separately. - :param box: An optional 4-tuple of ints providing - the source image region to be reduced. - The values must be within ``(0, 0, width, height)`` rectangle. - If omitted or ``None``, the entire source is used. - """ - if not isinstance(factor, (list, tuple)): - factor = (factor, factor) - - if box is None: - box = (0, 0) + self.size - else: - box = tuple(box) - - if factor == (1, 1) and box == (0, 0) + self.size: - return self.copy() - - if self.mode in ["LA", "RGBA"]: - im = self.convert(self.mode[:-1] + "a") - im = im.reduce(factor, box) - return im.convert(self.mode) - - self.load() - - return self._new(self.im.reduce(factor, box)) - - def rotate( - self, - angle, - resample=NEAREST, - expand=0, - center=None, - translate=None, - fillcolor=None, - ): - """ - Returns a rotated copy of this image. This method returns a - copy of this image, rotated the given number of degrees counter - clockwise around its centre. - - :param angle: In degrees counter clockwise. - :param resample: An optional resampling filter. This can be - one of :py:data:`PIL.Image.NEAREST` (use nearest neighbour), - :py:data:`PIL.Image.BILINEAR` (linear interpolation in a 2x2 - environment), or :py:data:`PIL.Image.BICUBIC` - (cubic spline interpolation in a 4x4 environment). - If omitted, or if the image has mode "1" or "P", it is - set to :py:data:`PIL.Image.NEAREST`. See :ref:`concept-filters`. - :param expand: Optional expansion flag. If true, expands the output - image to make it large enough to hold the entire rotated image. - If false or omitted, make the output image the same size as the - input image. Note that the expand flag assumes rotation around - the center and no translation. - :param center: Optional center of rotation (a 2-tuple). Origin is - the upper left corner. Default is the center of the image. - :param translate: An optional post-rotate translation (a 2-tuple). - :param fillcolor: An optional color for area outside the rotated image. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - angle = angle % 360.0 - - # Fast paths regardless of filter, as long as we're not - # translating or changing the center. - if not (center or translate): - if angle == 0: - return self.copy() - if angle == 180: - return self.transpose(ROTATE_180) - if angle == 90 and expand: - return self.transpose(ROTATE_90) - if angle == 270 and expand: - return self.transpose(ROTATE_270) - - # Calculate the affine matrix. Note that this is the reverse - # transformation (from destination image to source) because we - # want to interpolate the (discrete) destination pixel from - # the local area around the (floating) source pixel. - - # The matrix we actually want (note that it operates from the right): - # (1, 0, tx) (1, 0, cx) ( cos a, sin a, 0) (1, 0, -cx) - # (0, 1, ty) * (0, 1, cy) * (-sin a, cos a, 0) * (0, 1, -cy) - # (0, 0, 1) (0, 0, 1) ( 0, 0, 1) (0, 0, 1) - - # The reverse matrix is thus: - # (1, 0, cx) ( cos -a, sin -a, 0) (1, 0, -cx) (1, 0, -tx) - # (0, 1, cy) * (-sin -a, cos -a, 0) * (0, 1, -cy) * (0, 1, -ty) - # (0, 0, 1) ( 0, 0, 1) (0, 0, 1) (0, 0, 1) - - # In any case, the final translation may be updated at the end to - # compensate for the expand flag. - - w, h = self.size - - if translate is None: - post_trans = (0, 0) - else: - post_trans = translate - if center is None: - # FIXME These should be rounded to ints? - rotn_center = (w / 2.0, h / 2.0) - else: - rotn_center = center - - angle = -math.radians(angle) - matrix = [ - round(math.cos(angle), 15), - round(math.sin(angle), 15), - 0.0, - round(-math.sin(angle), 15), - round(math.cos(angle), 15), - 0.0, - ] - - def transform(x, y, matrix): - (a, b, c, d, e, f) = matrix - return a * x + b * y + c, d * x + e * y + f - - matrix[2], matrix[5] = transform( - -rotn_center[0] - post_trans[0], -rotn_center[1] - post_trans[1], matrix - ) - matrix[2] += rotn_center[0] - matrix[5] += rotn_center[1] - - if expand: - # calculate output size - xx = [] - yy = [] - for x, y in ((0, 0), (w, 0), (w, h), (0, h)): - x, y = transform(x, y, matrix) - xx.append(x) - yy.append(y) - nw = math.ceil(max(xx)) - math.floor(min(xx)) - nh = math.ceil(max(yy)) - math.floor(min(yy)) - - # We multiply a translation matrix from the right. Because of its - # special form, this is the same as taking the image of the - # translation vector as new translation vector. - matrix[2], matrix[5] = transform(-(nw - w) / 2.0, -(nh - h) / 2.0, matrix) - w, h = nw, nh - - return self.transform((w, h), AFFINE, matrix, resample, fillcolor=fillcolor) - - def save(self, fp, format=None, **params): - """ - Saves this image under the given filename. If no format is - specified, the format to use is determined from the filename - extension, if possible. - - Keyword options can be used to provide additional instructions - to the writer. If a writer doesn't recognise an option, it is - silently ignored. The available options are described in the - :doc:`image format documentation - <../handbook/image-file-formats>` for each writer. - - You can use a file object instead of a filename. In this case, - you must always specify the format. The file object must - implement the ``seek``, ``tell``, and ``write`` - methods, and be opened in binary mode. - - :param fp: A filename (string), pathlib.Path object or file object. - :param format: Optional format override. If omitted, the - format to use is determined from the filename extension. - If a file object was used instead of a filename, this - parameter should always be used. - :param params: Extra parameters to the image writer. - :returns: None - :exception ValueError: If the output format could not be determined - from the file name. Use the format option to solve this. - :exception OSError: If the file could not be written. The file - may have been created, and may contain partial data. - """ - - filename = "" - open_fp = False - if isPath(fp): - filename = fp - open_fp = True - elif isinstance(fp, Path): - filename = str(fp) - open_fp = True - if not filename and hasattr(fp, "name") and isPath(fp.name): - # only set the name for metadata purposes - filename = fp.name - - # may mutate self! - self._ensure_mutable() - - save_all = params.pop("save_all", False) - self.encoderinfo = params - self.encoderconfig = () - - preinit() - - ext = os.path.splitext(filename)[1].lower() - - if not format: - if ext not in EXTENSION: - init() - try: - format = EXTENSION[ext] - except KeyError as e: - raise ValueError(f"unknown file extension: {ext}") from e - - if format.upper() not in SAVE: - init() - if save_all: - save_handler = SAVE_ALL[format.upper()] - else: - save_handler = SAVE[format.upper()] - - if open_fp: - if params.get("append", False): - # Open also for reading ("+"), because TIFF save_all - # writer needs to go back and edit the written data. - fp = builtins.open(filename, "r+b") - else: - fp = builtins.open(filename, "w+b") - - try: - save_handler(self, fp, filename) - finally: - # do what we can to clean up - if open_fp: - fp.close() - - def seek(self, frame): - """ - Seeks to the given frame in this sequence file. If you seek - beyond the end of the sequence, the method raises an - ``EOFError`` exception. When a sequence file is opened, the - library automatically seeks to frame 0. - - See :py:meth:`~PIL.Image.Image.tell`. - - If defined, :attr:`~PIL.Image.Image.n_frames` refers to the - number of available frames. - - :param frame: Frame number, starting at 0. - :exception EOFError: If the call attempts to seek beyond the end - of the sequence. - """ - - # overridden by file handlers - if frame != 0: - raise EOFError - - def show(self, title=None, command=None): - """ - Displays this image. This method is mainly intended for debugging purposes. - - This method calls :py:func:`PIL.ImageShow.show` internally. You can use - :py:func:`PIL.ImageShow.register` to override its default behaviour. - - The image is first saved to a temporary file. By default, it will be in - PNG format. - - On Unix, the image is then opened using the **display**, **eog** or - **xv** utility, depending on which one can be found. - - On macOS, the image is opened with the native Preview application. - - On Windows, the image is opened with the standard PNG display utility. - - :param title: Optional title to use for the image window, where possible. - """ - - if command is not None: - warnings.warn( - "The command parameter is deprecated and will be removed in Pillow 9 " - "(2022-01-02). Use a subclass of ImageShow.Viewer instead.", - DeprecationWarning, - ) - - _show(self, title=title, command=command) - - def split(self): - """ - Split this image into individual bands. This method returns a - tuple of individual image bands from an image. For example, - splitting an "RGB" image creates three new images each - containing a copy of one of the original bands (red, green, - blue). - - If you need only one band, :py:meth:`~PIL.Image.Image.getchannel` - method can be more convenient and faster. - - :returns: A tuple containing bands. - """ - - self.load() - if self.im.bands == 1: - ims = [self.copy()] - else: - ims = map(self._new, self.im.split()) - return tuple(ims) - - def getchannel(self, channel): - """ - Returns an image containing a single channel of the source image. - - :param channel: What channel to return. Could be index - (0 for "R" channel of "RGB") or channel name - ("A" for alpha channel of "RGBA"). - :returns: An image in "L" mode. - - .. versionadded:: 4.3.0 - """ - self.load() - - if isinstance(channel, str): - try: - channel = self.getbands().index(channel) - except ValueError as e: - raise ValueError(f'The image has no channel "{channel}"') from e - - return self._new(self.im.getband(channel)) - - def tell(self): - """ - Returns the current frame number. See :py:meth:`~PIL.Image.Image.seek`. - - If defined, :attr:`~PIL.Image.Image.n_frames` refers to the - number of available frames. - - :returns: Frame number, starting with 0. - """ - return 0 - - def thumbnail(self, size, resample=BICUBIC, reducing_gap=2.0): - """ - Make this image into a thumbnail. This method modifies the - image to contain a thumbnail version of itself, no larger than - the given size. This method calculates an appropriate thumbnail - size to preserve the aspect of the image, calls the - :py:meth:`~PIL.Image.Image.draft` method to configure the file reader - (where applicable), and finally resizes the image. - - Note that this function modifies the :py:class:`~PIL.Image.Image` - object in place. If you need to use the full resolution image as well, - apply this method to a :py:meth:`~PIL.Image.Image.copy` of the original - image. - - :param size: Requested size. - :param resample: Optional resampling filter. This can be one - of :py:data:`PIL.Image.NEAREST`, :py:data:`PIL.Image.BOX`, - :py:data:`PIL.Image.BILINEAR`, :py:data:`PIL.Image.HAMMING`, - :py:data:`PIL.Image.BICUBIC` or :py:data:`PIL.Image.LANCZOS`. - If omitted, it defaults to :py:data:`PIL.Image.BICUBIC`. - (was :py:data:`PIL.Image.NEAREST` prior to version 2.5.0). - See: :ref:`concept-filters`. - :param reducing_gap: Apply optimization by resizing the image - in two steps. First, reducing the image by integer times - using :py:meth:`~PIL.Image.Image.reduce` or - :py:meth:`~PIL.Image.Image.draft` for JPEG images. - Second, resizing using regular resampling. The last step - changes size no less than by ``reducing_gap`` times. - ``reducing_gap`` may be None (no first step is performed) - or should be greater than 1.0. The bigger ``reducing_gap``, - the closer the result to the fair resampling. - The smaller ``reducing_gap``, the faster resizing. - With ``reducing_gap`` greater or equal to 3.0, the result is - indistinguishable from fair resampling in most cases. - The default value is 2.0 (very close to fair resampling - while still being faster in many cases). - :returns: None - """ - - x, y = map(math.floor, size) - if x >= self.width and y >= self.height: - return - - def round_aspect(number, key): - return max(min(math.floor(number), math.ceil(number), key=key), 1) - - # preserve aspect ratio - aspect = self.width / self.height - if x / y >= aspect: - x = round_aspect(y * aspect, key=lambda n: abs(aspect - n / y)) - else: - y = round_aspect( - x / aspect, key=lambda n: 0 if n == 0 else abs(aspect - x / n) - ) - size = (x, y) - - box = None - if reducing_gap is not None: - res = self.draft(None, (size[0] * reducing_gap, size[1] * reducing_gap)) - if res is not None: - box = res[1] - - if self.size != size: - im = self.resize(size, resample, box=box, reducing_gap=reducing_gap) - - self.im = im.im - self._size = size - self.mode = self.im.mode - - self.readonly = 0 - self.pyaccess = None - - # FIXME: the different transform methods need further explanation - # instead of bloating the method docs, add a separate chapter. - def transform( - self, size, method, data=None, resample=NEAREST, fill=1, fillcolor=None - ): - """ - Transforms this image. This method creates a new image with the - given size, and the same mode as the original, and copies data - to the new image using the given transform. - - :param size: The output size. - :param method: The transformation method. This is one of - :py:data:`PIL.Image.EXTENT` (cut out a rectangular subregion), - :py:data:`PIL.Image.AFFINE` (affine transform), - :py:data:`PIL.Image.PERSPECTIVE` (perspective transform), - :py:data:`PIL.Image.QUAD` (map a quadrilateral to a rectangle), or - :py:data:`PIL.Image.MESH` (map a number of source quadrilaterals - in one operation). - - It may also be an :py:class:`~PIL.Image.ImageTransformHandler` - object:: - - class Example(Image.ImageTransformHandler): - def transform(self, size, data, resample, fill=1): - # Return result - - It may also be an object with a ``method.getdata`` method - that returns a tuple supplying new ``method`` and ``data`` values:: - - class Example: - def getdata(self): - method = Image.EXTENT - data = (0, 0, 100, 100) - return method, data - :param data: Extra data to the transformation method. - :param resample: Optional resampling filter. It can be one of - :py:data:`PIL.Image.NEAREST` (use nearest neighbour), - :py:data:`PIL.Image.BILINEAR` (linear interpolation in a 2x2 - environment), or :py:data:`PIL.Image.BICUBIC` (cubic spline - interpolation in a 4x4 environment). If omitted, or if the image - has mode "1" or "P", it is set to :py:data:`PIL.Image.NEAREST`. - See: :ref:`concept-filters`. - :param fill: If ``method`` is an - :py:class:`~PIL.Image.ImageTransformHandler` object, this is one of - the arguments passed to it. Otherwise, it is unused. - :param fillcolor: Optional fill color for the area outside the - transform in the output image. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if self.mode == "LA": - return ( - self.convert("La") - .transform(size, method, data, resample, fill, fillcolor) - .convert("LA") - ) - - if self.mode == "RGBA": - return ( - self.convert("RGBa") - .transform(size, method, data, resample, fill, fillcolor) - .convert("RGBA") - ) - - if isinstance(method, ImageTransformHandler): - return method.transform(size, self, resample=resample, fill=fill) - - if hasattr(method, "getdata"): - # compatibility w. old-style transform objects - method, data = method.getdata() - - if data is None: - raise ValueError("missing method data") - - im = new(self.mode, size, fillcolor) - im.info = self.info.copy() - if method == MESH: - # list of quads - for box, quad in data: - im.__transformer(box, self, QUAD, quad, resample, fillcolor is None) - else: - im.__transformer( - (0, 0) + size, self, method, data, resample, fillcolor is None - ) - - return im - - def __transformer(self, box, image, method, data, resample=NEAREST, fill=1): - w = box[2] - box[0] - h = box[3] - box[1] - - if method == AFFINE: - data = data[0:6] - - elif method == EXTENT: - # convert extent to an affine transform - x0, y0, x1, y1 = data - xs = (x1 - x0) / w - ys = (y1 - y0) / h - method = AFFINE - data = (xs, 0, x0, 0, ys, y0) - - elif method == PERSPECTIVE: - data = data[0:8] - - elif method == QUAD: - # quadrilateral warp. data specifies the four corners - # given as NW, SW, SE, and NE. - nw = data[0:2] - sw = data[2:4] - se = data[4:6] - ne = data[6:8] - x0, y0 = nw - As = 1.0 / w - At = 1.0 / h - data = ( - x0, - (ne[0] - x0) * As, - (sw[0] - x0) * At, - (se[0] - sw[0] - ne[0] + x0) * As * At, - y0, - (ne[1] - y0) * As, - (sw[1] - y0) * At, - (se[1] - sw[1] - ne[1] + y0) * As * At, - ) - - else: - raise ValueError("unknown transformation method") - - if resample not in (NEAREST, BILINEAR, BICUBIC): - if resample in (BOX, HAMMING, LANCZOS): - message = { - BOX: "Image.BOX", - HAMMING: "Image.HAMMING", - LANCZOS: "Image.LANCZOS/Image.ANTIALIAS", - }[resample] + f" ({resample}) cannot be used." - else: - message = f"Unknown resampling filter ({resample})." - - filters = [ - "{} ({})".format(filter[1], filter[0]) - for filter in ( - (NEAREST, "Image.NEAREST"), - (BILINEAR, "Image.BILINEAR"), - (BICUBIC, "Image.BICUBIC"), - ) - ] - raise ValueError( - message + " Use " + ", ".join(filters[:-1]) + " or " + filters[-1] - ) - - image.load() - - self.load() - - if image.mode in ("1", "P"): - resample = NEAREST - - self.im.transform2(box, image.im, method, data, resample, fill) - - def transpose(self, method): - """ - Transpose image (flip or rotate in 90 degree steps) - - :param method: One of :py:data:`PIL.Image.FLIP_LEFT_RIGHT`, - :py:data:`PIL.Image.FLIP_TOP_BOTTOM`, :py:data:`PIL.Image.ROTATE_90`, - :py:data:`PIL.Image.ROTATE_180`, :py:data:`PIL.Image.ROTATE_270`, - :py:data:`PIL.Image.TRANSPOSE` or :py:data:`PIL.Image.TRANSVERSE`. - :returns: Returns a flipped or rotated copy of this image. - """ - - self.load() - return self._new(self.im.transpose(method)) - - def effect_spread(self, distance): - """ - Randomly spread pixels in an image. - - :param distance: Distance to spread pixels. - """ - self.load() - return self._new(self.im.effect_spread(distance)) - - def toqimage(self): - """Returns a QImage copy of this image""" - from . import ImageQt - - if not ImageQt.qt_is_installed: - raise ImportError("Qt bindings are not installed") - return ImageQt.toqimage(self) - - def toqpixmap(self): - """Returns a QPixmap copy of this image""" - from . import ImageQt - - if not ImageQt.qt_is_installed: - raise ImportError("Qt bindings are not installed") - return ImageQt.toqpixmap(self) - - -# -------------------------------------------------------------------- -# Abstract handlers. - - -class ImagePointHandler: - """ - Used as a mixin by point transforms - (for use with :py:meth:`~PIL.Image.Image.point`) - """ - - pass - - -class ImageTransformHandler: - """ - Used as a mixin by geometry transforms - (for use with :py:meth:`~PIL.Image.Image.transform`) - """ - - pass - - -# -------------------------------------------------------------------- -# Factories - -# -# Debugging - - -def _wedge(): - """Create greyscale wedge (for debugging only)""" - - return Image()._new(core.wedge("L")) - - -def _check_size(size): - """ - Common check to enforce type and sanity check on size tuples - - :param size: Should be a 2 tuple of (width, height) - :returns: True, or raises a ValueError - """ - - if not isinstance(size, (list, tuple)): - raise ValueError("Size must be a tuple") - if len(size) != 2: - raise ValueError("Size must be a tuple of length 2") - if size[0] < 0 or size[1] < 0: - raise ValueError("Width and height must be >= 0") - - return True - - -def new(mode, size, color=0): - """ - Creates a new image with the given mode and size. - - :param mode: The mode to use for the new image. See: - :ref:`concept-modes`. - :param size: A 2-tuple, containing (width, height) in pixels. - :param color: What color to use for the image. Default is black. - If given, this should be a single integer or floating point value - for single-band modes, and a tuple for multi-band modes (one value - per band). When creating RGB images, you can also use color - strings as supported by the ImageColor module. If the color is - None, the image is not initialised. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - _check_size(size) - - if color is None: - # don't initialize - return Image()._new(core.new(mode, size)) - - if isinstance(color, str): - # css3-style specifier - - from . import ImageColor - - color = ImageColor.getcolor(color, mode) - - im = Image() - if mode == "P" and isinstance(color, (list, tuple)) and len(color) in [3, 4]: - # RGB or RGBA value for a P image - from . import ImagePalette - - im.palette = ImagePalette.ImagePalette() - color = im.palette.getcolor(color) - return im._new(core.fill(mode, size, color)) - - -def frombytes(mode, size, data, decoder_name="raw", *args): - """ - Creates a copy of an image memory from pixel data in a buffer. - - In its simplest form, this function takes three arguments - (mode, size, and unpacked pixel data). - - You can also use any pixel decoder supported by PIL. For more - information on available decoders, see the section - :ref:`Writing Your Own File Decoder `. - - Note that this function decodes pixel data only, not entire images. - If you have an entire image in a string, wrap it in a - :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load - it. - - :param mode: The image mode. See: :ref:`concept-modes`. - :param size: The image size. - :param data: A byte buffer containing raw data for the given mode. - :param decoder_name: What decoder to use. - :param args: Additional parameters for the given decoder. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - _check_size(size) - - # may pass tuple instead of argument list - if len(args) == 1 and isinstance(args[0], tuple): - args = args[0] - - if decoder_name == "raw" and args == (): - args = mode - - im = new(mode, size) - im.frombytes(data, decoder_name, args) - return im - - -def frombuffer(mode, size, data, decoder_name="raw", *args): - """ - Creates an image memory referencing pixel data in a byte buffer. - - This function is similar to :py:func:`~PIL.Image.frombytes`, but uses data - in the byte buffer, where possible. This means that changes to the - original buffer object are reflected in this image). Not all modes can - share memory; supported modes include "L", "RGBX", "RGBA", and "CMYK". - - Note that this function decodes pixel data only, not entire images. - If you have an entire image file in a string, wrap it in a - :py:class:`~io.BytesIO` object, and use :py:func:`~PIL.Image.open` to load it. - - In the current version, the default parameters used for the "raw" decoder - differs from that used for :py:func:`~PIL.Image.frombytes`. This is a - bug, and will probably be fixed in a future release. The current release - issues a warning if you do this; to disable the warning, you should provide - the full set of parameters. See below for details. - - :param mode: The image mode. See: :ref:`concept-modes`. - :param size: The image size. - :param data: A bytes or other buffer object containing raw - data for the given mode. - :param decoder_name: What decoder to use. - :param args: Additional parameters for the given decoder. For the - default encoder ("raw"), it's recommended that you provide the - full set of parameters:: - - frombuffer(mode, size, data, "raw", mode, 0, 1) - - :returns: An :py:class:`~PIL.Image.Image` object. - - .. versionadded:: 1.1.4 - """ - - _check_size(size) - - # may pass tuple instead of argument list - if len(args) == 1 and isinstance(args[0], tuple): - args = args[0] - - if decoder_name == "raw": - if args == (): - args = mode, 0, 1 - if args[0] in _MAPMODES: - im = new(mode, (1, 1)) - im = im._new(core.map_buffer(data, size, decoder_name, 0, args)) - im.readonly = 1 - return im - - return frombytes(mode, size, data, decoder_name, args) - - -def fromarray(obj, mode=None): - """ - Creates an image memory from an object exporting the array interface - (using the buffer protocol). - - If ``obj`` is not contiguous, then the ``tobytes`` method is called - and :py:func:`~PIL.Image.frombuffer` is used. - - If you have an image in NumPy:: - - from PIL import Image - import numpy as np - im = Image.open('hopper.jpg') - a = np.asarray(im) - - Then this can be used to convert it to a Pillow image:: - - im = Image.fromarray(a) - - :param obj: Object with array interface - :param mode: Mode to use (will be determined from type if None) - See: :ref:`concept-modes`. - :returns: An image object. - - .. versionadded:: 1.1.6 - """ - arr = obj.__array_interface__ - shape = arr["shape"] - ndim = len(shape) - strides = arr.get("strides", None) - if mode is None: - try: - typekey = (1, 1) + shape[2:], arr["typestr"] - except KeyError as e: - raise TypeError("Cannot handle this data type") from e - try: - mode, rawmode = _fromarray_typemap[typekey] - except KeyError as e: - raise TypeError("Cannot handle this data type: %s, %s" % typekey) from e - else: - rawmode = mode - if mode in ["1", "L", "I", "P", "F"]: - ndmax = 2 - elif mode == "RGB": - ndmax = 3 - else: - ndmax = 4 - if ndim > ndmax: - raise ValueError(f"Too many dimensions: {ndim} > {ndmax}.") - - size = 1 if ndim == 1 else shape[1], shape[0] - if strides is not None: - if hasattr(obj, "tobytes"): - obj = obj.tobytes() - else: - obj = obj.tostring() - - return frombuffer(mode, size, obj, "raw", rawmode, 0, 1) - - -def fromqimage(im): - """Creates an image instance from a QImage image""" - from . import ImageQt - - if not ImageQt.qt_is_installed: - raise ImportError("Qt bindings are not installed") - return ImageQt.fromqimage(im) - - -def fromqpixmap(im): - """Creates an image instance from a QPixmap image""" - from . import ImageQt - - if not ImageQt.qt_is_installed: - raise ImportError("Qt bindings are not installed") - return ImageQt.fromqpixmap(im) - - -_fromarray_typemap = { - # (shape, typestr) => mode, rawmode - # first two members of shape are set to one - ((1, 1), "|b1"): ("1", "1;8"), - ((1, 1), "|u1"): ("L", "L"), - ((1, 1), "|i1"): ("I", "I;8"), - ((1, 1), "u2"): ("I", "I;16B"), - ((1, 1), "i2"): ("I", "I;16BS"), - ((1, 1), "u4"): ("I", "I;32B"), - ((1, 1), "i4"): ("I", "I;32BS"), - ((1, 1), "f4"): ("F", "F;32BF"), - ((1, 1), "f8"): ("F", "F;64BF"), - ((1, 1, 2), "|u1"): ("LA", "LA"), - ((1, 1, 3), "|u1"): ("RGB", "RGB"), - ((1, 1, 4), "|u1"): ("RGBA", "RGBA"), -} - -# shortcuts -_fromarray_typemap[((1, 1), _ENDIAN + "i4")] = ("I", "I") -_fromarray_typemap[((1, 1), _ENDIAN + "f4")] = ("F", "F") - - -def _decompression_bomb_check(size): - if MAX_IMAGE_PIXELS is None: - return - - pixels = size[0] * size[1] - - if pixels > 2 * MAX_IMAGE_PIXELS: - raise DecompressionBombError( - f"Image size ({pixels} pixels) exceeds limit of {2 * MAX_IMAGE_PIXELS} " - "pixels, could be decompression bomb DOS attack." - ) - - if pixels > MAX_IMAGE_PIXELS: - warnings.warn( - f"Image size ({pixels} pixels) exceeds limit of {MAX_IMAGE_PIXELS} pixels, " - "could be decompression bomb DOS attack.", - DecompressionBombWarning, - ) - - -def open(fp, mode="r", formats=None): - """ - Opens and identifies the given image file. - - This is a lazy operation; this function identifies the file, but - the file remains open and the actual image data is not read from - the file until you try to process the data (or call the - :py:meth:`~PIL.Image.Image.load` method). See - :py:func:`~PIL.Image.new`. See :ref:`file-handling`. - - :param fp: A filename (string), pathlib.Path object or a file object. - The file object must implement ``file.read``, - ``file.seek``, and ``file.tell`` methods, - and be opened in binary mode. - :param mode: The mode. If given, this argument must be "r". - :param formats: A list or tuple of formats to attempt to load the file in. - This can be used to restrict the set of formats checked. - Pass ``None`` to try all supported formats. You can print the set of - available formats by running ``python -m PIL`` or using - the :py:func:`PIL.features.pilinfo` function. - :returns: An :py:class:`~PIL.Image.Image` object. - :exception FileNotFoundError: If the file cannot be found. - :exception PIL.UnidentifiedImageError: If the image cannot be opened and - identified. - :exception ValueError: If the ``mode`` is not "r", or if a ``StringIO`` - instance is used for ``fp``. - :exception TypeError: If ``formats`` is not ``None``, a list or a tuple. - """ - - if mode != "r": - raise ValueError(f"bad mode {repr(mode)}") - elif isinstance(fp, io.StringIO): - raise ValueError( - "StringIO cannot be used to open an image. " - "Binary data must be used instead." - ) - - if formats is None: - formats = ID - elif not isinstance(formats, (list, tuple)): - raise TypeError("formats must be a list or tuple") - - exclusive_fp = False - filename = "" - if isinstance(fp, Path): - filename = str(fp.resolve()) - elif isPath(fp): - filename = fp - - if filename: - fp = builtins.open(filename, "rb") - exclusive_fp = True - - try: - fp.seek(0) - except (AttributeError, io.UnsupportedOperation): - fp = io.BytesIO(fp.read()) - exclusive_fp = True - - prefix = fp.read(16) - - preinit() - - accept_warnings = [] - - def _open_core(fp, filename, prefix, formats): - for i in formats: - if i not in OPEN: - init() - try: - factory, accept = OPEN[i] - result = not accept or accept(prefix) - if type(result) in [str, bytes]: - accept_warnings.append(result) - elif result: - fp.seek(0) - im = factory(fp, filename) - _decompression_bomb_check(im.size) - return im - except (SyntaxError, IndexError, TypeError, struct.error): - # Leave disabled by default, spams the logs with image - # opening failures that are entirely expected. - # logger.debug("", exc_info=True) - continue - except BaseException: - if exclusive_fp: - fp.close() - raise - return None - - im = _open_core(fp, filename, prefix, formats) - - if im is None: - if init(): - im = _open_core(fp, filename, prefix, formats) - - if im: - im._exclusive_fp = exclusive_fp - return im - - if exclusive_fp: - fp.close() - for message in accept_warnings: - warnings.warn(message) - raise UnidentifiedImageError( - "cannot identify image file %r" % (filename if filename else fp) - ) - - -# -# Image processing. - - -def alpha_composite(im1, im2): - """ - Alpha composite im2 over im1. - - :param im1: The first image. Must have mode RGBA. - :param im2: The second image. Must have mode RGBA, and the same size as - the first image. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - im1.load() - im2.load() - return im1._new(core.alpha_composite(im1.im, im2.im)) - - -def blend(im1, im2, alpha): - """ - Creates a new image by interpolating between two input images, using - a constant alpha.:: - - out = image1 * (1.0 - alpha) + image2 * alpha - - :param im1: The first image. - :param im2: The second image. Must have the same mode and size as - the first image. - :param alpha: The interpolation alpha factor. If alpha is 0.0, a - copy of the first image is returned. If alpha is 1.0, a copy of - the second image is returned. There are no restrictions on the - alpha value. If necessary, the result is clipped to fit into - the allowed output range. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - im1.load() - im2.load() - return im1._new(core.blend(im1.im, im2.im, alpha)) - - -def composite(image1, image2, mask): - """ - Create composite image by blending images using a transparency mask. - - :param image1: The first image. - :param image2: The second image. Must have the same mode and - size as the first image. - :param mask: A mask image. This image can have mode - "1", "L", or "RGBA", and must have the same size as the - other two images. - """ - - image = image2.copy() - image.paste(image1, None, mask) - return image - - -def eval(image, *args): - """ - Applies the function (which should take one argument) to each pixel - in the given image. If the image has more than one band, the same - function is applied to each band. Note that the function is - evaluated once for each possible pixel value, so you cannot use - random components or other generators. - - :param image: The input image. - :param function: A function object, taking one integer argument. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - return image.point(args[0]) - - -def merge(mode, bands): - """ - Merge a set of single band images into a new multiband image. - - :param mode: The mode to use for the output image. See: - :ref:`concept-modes`. - :param bands: A sequence containing one single-band image for - each band in the output image. All bands must have the - same size. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - - if getmodebands(mode) != len(bands) or "*" in mode: - raise ValueError("wrong number of bands") - for band in bands[1:]: - if band.mode != getmodetype(mode): - raise ValueError("mode mismatch") - if band.size != bands[0].size: - raise ValueError("size mismatch") - for band in bands: - band.load() - return bands[0]._new(core.merge(mode, *[b.im for b in bands])) - - -# -------------------------------------------------------------------- -# Plugin registry - - -def register_open(id, factory, accept=None): - """ - Register an image file plugin. This function should not be used - in application code. - - :param id: An image format identifier. - :param factory: An image file factory method. - :param accept: An optional function that can be used to quickly - reject images having another format. - """ - id = id.upper() - ID.append(id) - OPEN[id] = factory, accept - - -def register_mime(id, mimetype): - """ - Registers an image MIME type. This function should not be used - in application code. - - :param id: An image format identifier. - :param mimetype: The image MIME type for this format. - """ - MIME[id.upper()] = mimetype - - -def register_save(id, driver): - """ - Registers an image save function. This function should not be - used in application code. - - :param id: An image format identifier. - :param driver: A function to save images in this format. - """ - SAVE[id.upper()] = driver - - -def register_save_all(id, driver): - """ - Registers an image function to save all the frames - of a multiframe format. This function should not be - used in application code. - - :param id: An image format identifier. - :param driver: A function to save images in this format. - """ - SAVE_ALL[id.upper()] = driver - - -def register_extension(id, extension): - """ - Registers an image extension. This function should not be - used in application code. - - :param id: An image format identifier. - :param extension: An extension used for this format. - """ - EXTENSION[extension.lower()] = id.upper() - - -def register_extensions(id, extensions): - """ - Registers image extensions. This function should not be - used in application code. - - :param id: An image format identifier. - :param extensions: A list of extensions used for this format. - """ - for extension in extensions: - register_extension(id, extension) - - -def registered_extensions(): - """ - Returns a dictionary containing all file extensions belonging - to registered plugins - """ - if not EXTENSION: - init() - return EXTENSION - - -def register_decoder(name, decoder): - """ - Registers an image decoder. This function should not be - used in application code. - - :param name: The name of the decoder - :param decoder: A callable(mode, args) that returns an - ImageFile.PyDecoder object - - .. versionadded:: 4.1.0 - """ - DECODERS[name] = decoder - - -def register_encoder(name, encoder): - """ - Registers an image encoder. This function should not be - used in application code. - - :param name: The name of the encoder - :param encoder: A callable(mode, args) that returns an - ImageFile.PyEncoder object - - .. versionadded:: 4.1.0 - """ - ENCODERS[name] = encoder - - -# -------------------------------------------------------------------- -# Simple display support. - - -def _show(image, **options): - options["_internal_pillow"] = True - _showxv(image, **options) - - -def _showxv(image, title=None, **options): - from . import ImageShow - - if "_internal_pillow" in options: - del options["_internal_pillow"] - else: - warnings.warn( - "_showxv is deprecated and will be removed in Pillow 9 (2022-01-02). " - "Use Image.show instead.", - DeprecationWarning, - ) - ImageShow.show(image, title, **options) - - -# -------------------------------------------------------------------- -# Effects - - -def effect_mandelbrot(size, extent, quality): - """ - Generate a Mandelbrot set covering the given extent. - - :param size: The requested size in pixels, as a 2-tuple: - (width, height). - :param extent: The extent to cover, as a 4-tuple: - (x0, y0, x1, y2). - :param quality: Quality. - """ - return Image()._new(core.effect_mandelbrot(size, extent, quality)) - - -def effect_noise(size, sigma): - """ - Generate Gaussian noise centered around 128. - - :param size: The requested size in pixels, as a 2-tuple: - (width, height). - :param sigma: Standard deviation of noise. - """ - return Image()._new(core.effect_noise(size, sigma)) - - -def linear_gradient(mode): - """ - Generate 256x256 linear gradient from black to white, top to bottom. - - :param mode: Input mode. - """ - return Image()._new(core.linear_gradient(mode)) - - -def radial_gradient(mode): - """ - Generate 256x256 radial gradient from black to white, centre to edge. - - :param mode: Input mode. - """ - return Image()._new(core.radial_gradient(mode)) - - -# -------------------------------------------------------------------- -# Resources - - -def _apply_env_variables(env=None): - if env is None: - env = os.environ - - for var_name, setter in [ - ("PILLOW_ALIGNMENT", core.set_alignment), - ("PILLOW_BLOCK_SIZE", core.set_block_size), - ("PILLOW_BLOCKS_MAX", core.set_blocks_max), - ]: - if var_name not in env: - continue - - var = env[var_name].lower() - - units = 1 - for postfix, mul in [("k", 1024), ("m", 1024 * 1024)]: - if var.endswith(postfix): - units = mul - var = var[: -len(postfix)] - - try: - var = int(var) * units - except ValueError: - warnings.warn(f"{var_name} is not int") - continue - - try: - setter(var) - except ValueError as e: - warnings.warn(f"{var_name}: {e}") - - -_apply_env_variables() -atexit.register(core.clear_cache) - - -class Exif(MutableMapping): - endian = "<" - - def __init__(self): - self._data = {} - self._ifds = {} - self._info = None - self._loaded_exif = None - - def _fixup(self, value): - try: - if len(value) == 1 and isinstance(value, tuple): - return value[0] - except Exception: - pass - return value - - def _fixup_dict(self, src_dict): - # Helper function - # returns a dict with any single item tuples/lists as individual values - return {k: self._fixup(v) for k, v in src_dict.items()} - - def _get_ifd_dict(self, tag): - try: - # an offset pointer to the location of the nested embedded IFD. - # It should be a long, but may be corrupted. - self.fp.seek(self[tag]) - except (KeyError, TypeError): - pass - else: - from . import TiffImagePlugin - - info = TiffImagePlugin.ImageFileDirectory_v2(self.head) - info.load(self.fp) - return self._fixup_dict(info) - - def load(self, data): - # Extract EXIF information. This is highly experimental, - # and is likely to be replaced with something better in a future - # version. - - # The EXIF record consists of a TIFF file embedded in a JPEG - # application marker (!). - if data == self._loaded_exif: - return - self._loaded_exif = data - self._data.clear() - self._ifds.clear() - self._info = None - if not data: - return - - if data.startswith(b"Exif\x00\x00"): - data = data[6:] - self.fp = io.BytesIO(data) - self.head = self.fp.read(8) - # process dictionary - from . import TiffImagePlugin - - self._info = TiffImagePlugin.ImageFileDirectory_v2(self.head) - self.endian = self._info._endian - self.fp.seek(self._info.next) - self._info.load(self.fp) - - # get EXIF extension - ifd = self._get_ifd_dict(0x8769) - if ifd: - self._data.update(ifd) - self._ifds[0x8769] = ifd - - def tobytes(self, offset=8): - from . import TiffImagePlugin - - if self.endian == "<": - head = b"II\x2A\x00\x08\x00\x00\x00" - else: - head = b"MM\x00\x2A\x00\x00\x00\x08" - ifd = TiffImagePlugin.ImageFileDirectory_v2(ifh=head) - for tag, value in self.items(): - ifd[tag] = value - return b"Exif\x00\x00" + head + ifd.tobytes(offset) - - def get_ifd(self, tag): - if tag not in self._ifds and tag in self: - if tag in [0x8825, 0xA005]: - # gpsinfo, interop - self._ifds[tag] = self._get_ifd_dict(tag) - elif tag == 0x927C: # makernote - from .TiffImagePlugin import ImageFileDirectory_v2 - - if self[0x927C][:8] == b"FUJIFILM": - exif_data = self[0x927C] - ifd_offset = i32le(exif_data, 8) - ifd_data = exif_data[ifd_offset:] - - makernote = {} - for i in range(0, struct.unpack(" 4: - (offset,) = struct.unpack("H", ifd_data[:2])[0]): - ifd_tag, typ, count, data = struct.unpack( - ">HHL4s", ifd_data[i * 12 + 2 : (i + 1) * 12 + 2] - ) - if ifd_tag == 0x1101: - # CameraInfo - (offset,) = struct.unpack(">L", data) - self.fp.seek(offset) - - camerainfo = {"ModelID": self.fp.read(4)} - - self.fp.read(4) - # Seconds since 2000 - camerainfo["TimeStamp"] = i32le(self.fp.read(12)) - - self.fp.read(4) - camerainfo["InternalSerialNumber"] = self.fp.read(4) - - self.fp.read(12) - parallax = self.fp.read(4) - handler = ImageFileDirectory_v2._load_dispatch[ - TiffTags.FLOAT - ][1] - camerainfo["Parallax"] = handler( - ImageFileDirectory_v2(), parallax, False - ) - - self.fp.read(4) - camerainfo["Category"] = self.fp.read(2) - - makernote = {0x1101: dict(self._fixup_dict(camerainfo))} - self._ifds[0x927C] = makernote - return self._ifds.get(tag, {}) - - def __str__(self): - if self._info is not None: - # Load all keys into self._data - for tag in self._info.keys(): - self[tag] - - return str(self._data) - - def __len__(self): - keys = set(self._data) - if self._info is not None: - keys.update(self._info) - return len(keys) - - def __getitem__(self, tag): - if self._info is not None and tag not in self._data and tag in self._info: - self._data[tag] = self._fixup(self._info[tag]) - if tag == 0x8825: - self._data[tag] = self.get_ifd(tag) - del self._info[tag] - return self._data[tag] - - def __contains__(self, tag): - return tag in self._data or (self._info is not None and tag in self._info) - - def __setitem__(self, tag, value): - if self._info is not None and tag in self._info: - del self._info[tag] - self._data[tag] = value - - def __delitem__(self, tag): - if self._info is not None and tag in self._info: - del self._info[tag] - else: - del self._data[tag] - - def __iter__(self): - keys = set(self._data) - if self._info is not None: - keys.update(self._info) - return iter(keys) diff --git a/PIL/ImageChops.py b/PIL/ImageChops.py deleted file mode 100644 index 61d3a29..0000000 --- a/PIL/ImageChops.py +++ /dev/null @@ -1,328 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# standard channel operations -# -# History: -# 1996-03-24 fl Created -# 1996-08-13 fl Added logical operations (for "1" images) -# 2000-10-12 fl Added offset method (from Image.py) -# -# Copyright (c) 1997-2000 by Secret Labs AB -# Copyright (c) 1996-2000 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -from . import Image - - -def constant(image, value): - """Fill a channel with a given grey level. - - :rtype: :py:class:`~PIL.Image.Image` - """ - - return Image.new("L", image.size, value) - - -def duplicate(image): - """Copy a channel. Alias for :py:meth:`PIL.Image.Image.copy`. - - :rtype: :py:class:`~PIL.Image.Image` - """ - - return image.copy() - - -def invert(image): - """ - Invert an image (channel). - - .. code-block:: python - - out = MAX - image - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image.load() - return image._new(image.im.chop_invert()) - - -def lighter(image1, image2): - """ - Compares the two images, pixel by pixel, and returns a new image containing - the lighter values. - - .. code-block:: python - - out = max(image1, image2) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_lighter(image2.im)) - - -def darker(image1, image2): - """ - Compares the two images, pixel by pixel, and returns a new image containing - the darker values. - - .. code-block:: python - - out = min(image1, image2) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_darker(image2.im)) - - -def difference(image1, image2): - """ - Returns the absolute value of the pixel-by-pixel difference between the two - images. - - .. code-block:: python - - out = abs(image1 - image2) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_difference(image2.im)) - - -def multiply(image1, image2): - """ - 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. - - .. code-block:: python - - out = image1 * image2 / MAX - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_multiply(image2.im)) - - -def screen(image1, image2): - """ - Superimposes two inverted images on top of each other. - - .. code-block:: python - - out = MAX - ((MAX - image1) * (MAX - image2) / MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_screen(image2.im)) - - -def soft_light(image1, image2): - """ - Superimposes two images on top of each other using the Soft Light algorithm - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_soft_light(image2.im)) - - -def hard_light(image1, image2): - """ - Superimposes two images on top of each other using the Hard Light algorithm - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_hard_light(image2.im)) - - -def overlay(image1, image2): - """ - Superimposes two images on top of each other using the Overlay algorithm - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_overlay(image2.im)) - - -def add(image1, image2, scale=1.0, offset=0): - """ - Adds two images, dividing the result by scale and adding the - offset. If omitted, scale defaults to 1.0, and offset to 0.0. - - .. code-block:: python - - out = ((image1 + image2) / scale + offset) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_add(image2.im, scale, offset)) - - -def subtract(image1, image2, scale=1.0, offset=0): - """ - Subtracts two images, dividing the result by scale and adding the offset. - If omitted, scale defaults to 1.0, and offset to 0.0. - - .. code-block:: python - - out = ((image1 - image2) / scale + offset) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_subtract(image2.im, scale, offset)) - - -def add_modulo(image1, image2): - """Add two images, without clipping the result. - - .. code-block:: python - - out = ((image1 + image2) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_add_modulo(image2.im)) - - -def subtract_modulo(image1, image2): - """Subtract two images, without clipping the result. - - .. code-block:: python - - out = ((image1 - image2) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_subtract_modulo(image2.im)) - - -def logical_and(image1, image2): - """Logical AND between two images. - - Both of the images must have mode "1". If you would like to perform a - logical AND on an image with a mode other than "1", try - :py:meth:`~PIL.ImageChops.multiply` instead, using a black-and-white mask - as the second image. - - .. code-block:: python - - out = ((image1 and image2) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_and(image2.im)) - - -def logical_or(image1, image2): - """Logical OR between two images. - - Both of the images must have mode "1". - - .. code-block:: python - - out = ((image1 or image2) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_or(image2.im)) - - -def logical_xor(image1, image2): - """Logical XOR between two images. - - Both of the images must have mode "1". - - .. code-block:: python - - out = ((bool(image1) != bool(image2)) % MAX) - - :rtype: :py:class:`~PIL.Image.Image` - """ - - image1.load() - image2.load() - return image1._new(image1.im.chop_xor(image2.im)) - - -def blend(image1, image2, alpha): - """Blend images using constant transparency weight. Alias for - :py:func:`PIL.Image.blend`. - - :rtype: :py:class:`~PIL.Image.Image` - """ - - return Image.blend(image1, image2, alpha) - - -def composite(image1, image2, mask): - """Create composite using transparency mask. Alias for - :py:func:`PIL.Image.composite`. - - :rtype: :py:class:`~PIL.Image.Image` - """ - - return Image.composite(image1, image2, mask) - - -def offset(image, xoffset, yoffset=None): - """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``. - - :param xoffset: The horizontal distance. - :param yoffset: The vertical distance. If omitted, both - distances are set to the same value. - :rtype: :py:class:`~PIL.Image.Image` - """ - - if yoffset is None: - yoffset = xoffset - image.load() - return image._new(image.im.offset(xoffset, yoffset)) diff --git a/PIL/ImageCms.py b/PIL/ImageCms.py deleted file mode 100644 index 8c4740d..0000000 --- a/PIL/ImageCms.py +++ /dev/null @@ -1,999 +0,0 @@ -# The Python Imaging Library. -# $Id$ - -# Optional color management support, based on Kevin Cazabon's PyCMS -# library. - -# History: - -# 2009-03-08 fl Added to PIL. - -# Copyright (C) 2002-2003 Kevin Cazabon -# Copyright (c) 2009 by Fredrik Lundh -# Copyright (c) 2013 by Eric Soroos - -# See the README file for information on usage and redistribution. See -# below for the original description. - -import sys - -from PIL import Image - -try: - from PIL import _imagingcms -except ImportError as ex: - # Allow error import for doc purposes, but error out when accessing - # anything in core. - from ._util import deferred_error - - _imagingcms = deferred_error(ex) - -DESCRIPTION = """ -pyCMS - - a Python / PIL interface to the littleCMS ICC Color Management System - Copyright (C) 2002-2003 Kevin Cazabon - kevin@cazabon.com - http://www.cazabon.com - - pyCMS home page: http://www.cazabon.com/pyCMS - littleCMS home page: http://www.littlecms.com - (littleCMS is Copyright (C) 1998-2001 Marti Maria) - - Originally released under LGPL. Graciously donated to PIL in - March 2009, for distribution under the standard PIL license - - The pyCMS.py module provides a "clean" interface between Python/PIL and - pyCMSdll, taking care of some of the more complex handling of the direct - pyCMSdll functions, as well as error-checking and making sure that all - relevant data is kept together. - - While it is possible to call pyCMSdll functions directly, it's not highly - recommended. - - Version History: - - 1.0.0 pil Oct 2013 Port to LCMS 2. - - 0.1.0 pil mod March 10, 2009 - - Renamed display profile to proof profile. The proof - profile is the profile of the device that is being - simulated, not the profile of the device which is - actually used to display/print the final simulation - (that'd be the output profile) - also see LCMSAPI.txt - input colorspace -> using 'renderingIntent' -> proof - colorspace -> using 'proofRenderingIntent' -> output - colorspace - - Added LCMS FLAGS support. - Added FLAGS["SOFTPROOFING"] as default flag for - buildProofTransform (otherwise the proof profile/intent - would be ignored). - - 0.1.0 pil March 2009 - added to PIL, as PIL.ImageCms - - 0.0.2 alpha Jan 6, 2002 - - Added try/except statements around type() checks of - potential CObjects... Python won't let you use type() - on them, and raises a TypeError (stupid, if you ask - me!) - - Added buildProofTransformFromOpenProfiles() function. - Additional fixes in DLL, see DLL code for details. - - 0.0.1 alpha first public release, Dec. 26, 2002 - - Known to-do list with current version (of Python interface, not pyCMSdll): - - none - -""" - -VERSION = "1.0.0 pil" - -# --------------------------------------------------------------------. - -core = _imagingcms - -# -# intent/direction values - -INTENT_PERCEPTUAL = 0 -INTENT_RELATIVE_COLORIMETRIC = 1 -INTENT_SATURATION = 2 -INTENT_ABSOLUTE_COLORIMETRIC = 3 - -DIRECTION_INPUT = 0 -DIRECTION_OUTPUT = 1 -DIRECTION_PROOF = 2 - -# -# flags - -FLAGS = { - "MATRIXINPUT": 1, - "MATRIXOUTPUT": 2, - "MATRIXONLY": (1 | 2), - "NOWHITEONWHITEFIXUP": 4, # Don't hot fix scum dot - # Don't create prelinearization tables on precalculated transforms - # (internal use): - "NOPRELINEARIZATION": 16, - "GUESSDEVICECLASS": 32, # Guess device class (for transform2devicelink) - "NOTCACHE": 64, # Inhibit 1-pixel cache - "NOTPRECALC": 256, - "NULLTRANSFORM": 512, # Don't transform anyway - "HIGHRESPRECALC": 1024, # Use more memory to give better accuracy - "LOWRESPRECALC": 2048, # Use less memory to minimize resources - "WHITEBLACKCOMPENSATION": 8192, - "BLACKPOINTCOMPENSATION": 8192, - "GAMUTCHECK": 4096, # Out of Gamut alarm - "SOFTPROOFING": 16384, # Do softproofing - "PRESERVEBLACK": 32768, # Black preservation - "NODEFAULTRESOURCEDEF": 16777216, # CRD special - "GRIDPOINTS": lambda n: ((n) & 0xFF) << 16, # Gridpoints -} - -_MAX_FLAG = 0 -for flag in FLAGS.values(): - if isinstance(flag, int): - _MAX_FLAG = _MAX_FLAG | flag - - -# --------------------------------------------------------------------. -# Experimental PIL-level API -# --------------------------------------------------------------------. - -## -# Profile. - - -class ImageCmsProfile: - def __init__(self, profile): - """ - :param profile: Either a string representing a filename, - a file like object containing a profile or a - low-level profile object - - """ - - if isinstance(profile, str): - if sys.platform == "win32": - profile_bytes_path = profile.encode() - try: - profile_bytes_path.decode("ascii") - except UnicodeDecodeError: - with open(profile, "rb") as f: - self._set(core.profile_frombytes(f.read())) - return - self._set(core.profile_open(profile), profile) - elif hasattr(profile, "read"): - self._set(core.profile_frombytes(profile.read())) - elif isinstance(profile, _imagingcms.CmsProfile): - self._set(profile) - else: - raise TypeError("Invalid type for Profile") - - def _set(self, profile, filename=None): - self.profile = profile - self.filename = filename - if profile: - self.product_name = None # profile.product_name - self.product_info = None # profile.product_info - else: - self.product_name = None - self.product_info = None - - def tobytes(self): - """ - Returns the profile in a format suitable for embedding in - saved images. - - :returns: a bytes object containing the ICC profile. - """ - - return core.profile_tobytes(self.profile) - - -class ImageCmsTransform(Image.ImagePointHandler): - - """ - Transform. This can be used with the procedural API, or with the standard - :py:func:`~PIL.Image.Image.point` method. - - Will return the output profile in the ``output.info['icc_profile']``. - """ - - def __init__( - self, - input, - output, - input_mode, - output_mode, - intent=INTENT_PERCEPTUAL, - proof=None, - proof_intent=INTENT_ABSOLUTE_COLORIMETRIC, - flags=0, - ): - if proof is None: - self.transform = core.buildTransform( - input.profile, output.profile, input_mode, output_mode, intent, flags - ) - else: - self.transform = core.buildProofTransform( - input.profile, - output.profile, - proof.profile, - input_mode, - output_mode, - intent, - proof_intent, - flags, - ) - # Note: inputMode and outputMode are for pyCMS compatibility only - self.input_mode = self.inputMode = input_mode - self.output_mode = self.outputMode = output_mode - - self.output_profile = output - - def point(self, im): - return self.apply(im) - - def apply(self, im, imOut=None): - im.load() - if imOut is None: - imOut = Image.new(self.output_mode, im.size, None) - self.transform.apply(im.im.id, imOut.im.id) - imOut.info["icc_profile"] = self.output_profile.tobytes() - return imOut - - def apply_in_place(self, im): - im.load() - if im.mode != self.output_mode: - raise ValueError("mode mismatch") # wrong output mode - self.transform.apply(im.im.id, im.im.id) - im.info["icc_profile"] = self.output_profile.tobytes() - return im - - -def get_display_profile(handle=None): - """ - (experimental) Fetches the profile for the current display device. - - :returns: ``None`` if the profile is not known. - """ - - if sys.platform != "win32": - return None - - from PIL import ImageWin - - if isinstance(handle, ImageWin.HDC): - profile = core.get_display_profile_win32(handle, 1) - else: - profile = core.get_display_profile_win32(handle or 0) - if profile is None: - return None - return ImageCmsProfile(profile) - - -# --------------------------------------------------------------------. -# pyCMS compatible layer -# --------------------------------------------------------------------. - - -class PyCMSError(Exception): - - """(pyCMS) Exception class. - This is used for all errors in the pyCMS API.""" - - pass - - -def profileToProfile( - im, - inputProfile, - outputProfile, - renderingIntent=INTENT_PERCEPTUAL, - outputMode=None, - inPlace=False, - flags=0, -): - """ - (pyCMS) Applies an ICC transformation to a given image, mapping from - ``inputProfile`` to ``outputProfile``. - - If the input or output profiles specified are not valid filenames, a - :exc:`PyCMSError` will be raised. If ``inPlace`` is ``True`` and - ``outputMode != im.mode``, a :exc:`PyCMSError` will be raised. - If an error occurs during application of the profiles, - a :exc:`PyCMSError` will be raised. - If ``outputMode`` is not a mode supported by the ``outputProfile`` (or by pyCMS), - a :exc:`PyCMSError` will be raised. - - This function applies an ICC transformation to im from ``inputProfile``'s - color space to ``outputProfile``'s color space using the specified rendering - intent to decide how to handle out-of-gamut colors. - - ``outputMode`` can be used to specify that a color mode conversion is to - be done using these profiles, but the specified profiles must be able - to handle that mode. I.e., if converting im from RGB to CMYK using - profiles, the input profile must handle RGB data, and the output - profile must handle CMYK data. - - :param im: An open :py:class:`~PIL.Image.Image` object (i.e. Image.new(...) - or Image.open(...), etc.) - :param inputProfile: String, as a valid filename path to the ICC input - profile you wish to use for this image, or a profile object - :param outputProfile: String, as a valid filename path to the ICC output - profile you wish to use for this image, or a profile object - :param renderingIntent: Integer (0-3) specifying the rendering intent you - wish to use for the transform - - ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) - ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 - ImageCms.INTENT_SATURATION = 2 - ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param outputMode: A valid PIL mode for the output image (i.e. "RGB", - "CMYK", etc.). Note: if rendering the image "inPlace", outputMode - MUST be the same mode as the input, or omitted completely. If - omitted, the outputMode will be the same as the mode of the input - image (im.mode) - :param inPlace: Boolean. If ``True``, the original image is modified in-place, - and ``None`` is returned. If ``False`` (default), a new - :py:class:`~PIL.Image.Image` object is returned with the transform applied. - :param flags: Integer (0-...) specifying additional flags - :returns: Either None or a new :py:class:`~PIL.Image.Image` object, depending on - the value of ``inPlace`` - :exception PyCMSError: - """ - - if outputMode is None: - outputMode = im.mode - - if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): - raise PyCMSError("renderingIntent must be an integer between 0 and 3") - - if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): - raise PyCMSError("flags must be an integer between 0 and %s" + _MAX_FLAG) - - try: - if not isinstance(inputProfile, ImageCmsProfile): - inputProfile = ImageCmsProfile(inputProfile) - if not isinstance(outputProfile, ImageCmsProfile): - outputProfile = ImageCmsProfile(outputProfile) - transform = ImageCmsTransform( - inputProfile, - outputProfile, - im.mode, - outputMode, - renderingIntent, - flags=flags, - ) - if inPlace: - transform.apply_in_place(im) - imOut = None - else: - imOut = transform.apply(im) - except (OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - return imOut - - -def getOpenProfile(profileFilename): - """ - (pyCMS) Opens an ICC profile file. - - The PyCMSProfile object can be passed back into pyCMS for use in creating - transforms and such (as in ImageCms.buildTransformFromOpenProfiles()). - - If ``profileFilename`` is not a valid filename for an ICC profile, - a :exc:`PyCMSError` will be raised. - - :param profileFilename: String, as a valid filename path to the ICC profile - you wish to open, or a file-like object. - :returns: A CmsProfile class object. - :exception PyCMSError: - """ - - try: - return ImageCmsProfile(profileFilename) - except (OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def buildTransform( - inputProfile, - outputProfile, - inMode, - outMode, - renderingIntent=INTENT_PERCEPTUAL, - flags=0, -): - """ - (pyCMS) Builds an ICC transform mapping from the ``inputProfile`` to the - ``outputProfile``. Use applyTransform to apply the transform to a given - image. - - If the input or output profiles specified are not valid filenames, a - :exc:`PyCMSError` will be raised. If an error occurs during creation - of the transform, a :exc:`PyCMSError` will be raised. - - If ``inMode`` or ``outMode`` are not a mode supported by the ``outputProfile`` - (or by pyCMS), a :exc:`PyCMSError` will be raised. - - This function builds and returns an ICC transform from the ``inputProfile`` - to the ``outputProfile`` using the ``renderingIntent`` to determine what to do - with out-of-gamut colors. It will ONLY work for converting images that - are in ``inMode`` to images that are in ``outMode`` color format (PIL mode, - i.e. "RGB", "RGBA", "CMYK", etc.). - - Building the transform is a fair part of the overhead in - ImageCms.profileToProfile(), so if you're planning on converting multiple - images using the same input/output settings, this can save you time. - Once you have a transform object, it can be used with - ImageCms.applyProfile() to convert images without the need to re-compute - the lookup table for the transform. - - The reason pyCMS returns a class object rather than a handle directly - to the transform is that it needs to keep track of the PIL input/output - modes that the transform is meant for. These attributes are stored in - the ``inMode`` and ``outMode`` attributes of the object (which can be - manually overridden if you really want to, but I don't know of any - time that would be of use, or would even work). - - :param inputProfile: String, as a valid filename path to the ICC input - profile you wish to use for this transform, or a profile object - :param outputProfile: String, as a valid filename path to the ICC output - profile you wish to use for this transform, or a profile object - :param inMode: String, as a valid PIL mode that the appropriate profile - also supports (i.e. "RGB", "RGBA", "CMYK", etc.) - :param outMode: String, as a valid PIL mode that the appropriate profile - also supports (i.e. "RGB", "RGBA", "CMYK", etc.) - :param renderingIntent: Integer (0-3) specifying the rendering intent you - wish to use for the transform - - ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) - ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 - ImageCms.INTENT_SATURATION = 2 - ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param flags: Integer (0-...) specifying additional flags - :returns: A CmsTransform class object. - :exception PyCMSError: - """ - - if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): - raise PyCMSError("renderingIntent must be an integer between 0 and 3") - - if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): - raise PyCMSError("flags must be an integer between 0 and %s" + _MAX_FLAG) - - try: - if not isinstance(inputProfile, ImageCmsProfile): - inputProfile = ImageCmsProfile(inputProfile) - if not isinstance(outputProfile, ImageCmsProfile): - outputProfile = ImageCmsProfile(outputProfile) - return ImageCmsTransform( - inputProfile, outputProfile, inMode, outMode, renderingIntent, flags=flags - ) - except (OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def buildProofTransform( - inputProfile, - outputProfile, - proofProfile, - inMode, - outMode, - renderingIntent=INTENT_PERCEPTUAL, - proofRenderingIntent=INTENT_ABSOLUTE_COLORIMETRIC, - flags=FLAGS["SOFTPROOFING"], -): - """ - (pyCMS) Builds an ICC transform mapping from the ``inputProfile`` to the - ``outputProfile``, but tries to simulate the result that would be - obtained on the ``proofProfile`` device. - - If the input, output, or proof profiles specified are not valid - filenames, a :exc:`PyCMSError` will be raised. - - If an error occurs during creation of the transform, - a :exc:`PyCMSError` will be raised. - - If ``inMode`` or ``outMode`` are not a mode supported by the ``outputProfile`` - (or by pyCMS), a :exc:`PyCMSError` will be raised. - - This function builds and returns an ICC transform from the ``inputProfile`` - to the ``outputProfile``, but tries to simulate the result that would be - obtained on the ``proofProfile`` device using ``renderingIntent`` and - ``proofRenderingIntent`` to determine what to do with out-of-gamut - colors. This is known as "soft-proofing". It will ONLY work for - converting images that are in ``inMode`` to images that are in outMode - color format (PIL mode, i.e. "RGB", "RGBA", "CMYK", etc.). - - Usage of the resulting transform object is exactly the same as with - ImageCms.buildTransform(). - - Proof profiling is generally used when using an output device to get a - good idea of what the final printed/displayed image would look like on - the ``proofProfile`` device when it's quicker and easier to use the - output device for judging color. Generally, this means that the - output device is a monitor, or a dye-sub printer (etc.), and the simulated - device is something more expensive, complicated, or time consuming - (making it difficult to make a real print for color judgement purposes). - - Soft-proofing basically functions by adjusting the colors on the - output device to match the colors of the device being simulated. However, - when the simulated device has a much wider gamut than the output - device, you may obtain marginal results. - - :param inputProfile: String, as a valid filename path to the ICC input - profile you wish to use for this transform, or a profile object - :param outputProfile: String, as a valid filename path to the ICC output - (monitor, usually) profile you wish to use for this transform, or a - profile object - :param proofProfile: String, as a valid filename path to the ICC proof - profile you wish to use for this transform, or a profile object - :param inMode: String, as a valid PIL mode that the appropriate profile - also supports (i.e. "RGB", "RGBA", "CMYK", etc.) - :param outMode: String, as a valid PIL mode that the appropriate profile - also supports (i.e. "RGB", "RGBA", "CMYK", etc.) - :param renderingIntent: Integer (0-3) specifying the rendering intent you - wish to use for the input->proof (simulated) transform - - ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) - ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 - ImageCms.INTENT_SATURATION = 2 - ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param proofRenderingIntent: Integer (0-3) specifying the rendering intent - you wish to use for proof->output transform - - ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) - ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 - ImageCms.INTENT_SATURATION = 2 - ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param flags: Integer (0-...) specifying additional flags - :returns: A CmsTransform class object. - :exception PyCMSError: - """ - - if not isinstance(renderingIntent, int) or not (0 <= renderingIntent <= 3): - raise PyCMSError("renderingIntent must be an integer between 0 and 3") - - if not isinstance(flags, int) or not (0 <= flags <= _MAX_FLAG): - raise PyCMSError("flags must be an integer between 0 and %s" + _MAX_FLAG) - - try: - if not isinstance(inputProfile, ImageCmsProfile): - inputProfile = ImageCmsProfile(inputProfile) - if not isinstance(outputProfile, ImageCmsProfile): - outputProfile = ImageCmsProfile(outputProfile) - if not isinstance(proofProfile, ImageCmsProfile): - proofProfile = ImageCmsProfile(proofProfile) - return ImageCmsTransform( - inputProfile, - outputProfile, - inMode, - outMode, - renderingIntent, - proofProfile, - proofRenderingIntent, - flags, - ) - except (OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -buildTransformFromOpenProfiles = buildTransform -buildProofTransformFromOpenProfiles = buildProofTransform - - -def applyTransform(im, transform, inPlace=False): - """ - (pyCMS) Applies a transform to a given image. - - If ``im.mode != transform.inMode``, a :exc:`PyCMSError` is raised. - - If ``inPlace`` is ``True`` and ``transform.inMode != transform.outMode``, a - :exc:`PyCMSError` is raised. - - If ``im.mode``, ``transform.inMode`` or ``transform.outMode`` is not - supported by pyCMSdll or the profiles you used for the transform, a - :exc:`PyCMSError` is raised. - - If an error occurs while the transform is being applied, - a :exc:`PyCMSError` is raised. - - This function applies a pre-calculated transform (from - ImageCms.buildTransform() or ImageCms.buildTransformFromOpenProfiles()) - to an image. The transform can be used for multiple images, saving - considerable calculation time if doing the same conversion multiple times. - - If you want to modify im in-place instead of receiving a new image as - the return value, set ``inPlace`` to ``True``. This can only be done if - ``transform.inMode`` and ``transform.outMode`` are the same, because we can't - change the mode in-place (the buffer sizes for some modes are - different). The default behavior is to return a new :py:class:`~PIL.Image.Image` - object of the same dimensions in mode ``transform.outMode``. - - :param im: An :py:class:`~PIL.Image.Image` object, and im.mode must be the same - as the ``inMode`` supported by the transform. - :param transform: A valid CmsTransform class object - :param inPlace: Bool. If ``True``, ``im`` is modified in place and ``None`` is - returned, if ``False``, a new :py:class:`~PIL.Image.Image` object with the - transform applied is returned (and ``im`` is not changed). The default is - ``False``. - :returns: Either ``None``, or a new :py:class:`~PIL.Image.Image` object, - depending on the value of ``inPlace``. The profile will be returned in - the image's ``info['icc_profile']``. - :exception PyCMSError: - """ - - try: - if inPlace: - transform.apply_in_place(im) - imOut = None - else: - imOut = transform.apply(im) - except (TypeError, ValueError) as v: - raise PyCMSError(v) from v - - return imOut - - -def createProfile(colorSpace, colorTemp=-1): - """ - (pyCMS) Creates a profile. - - If colorSpace not in ``["LAB", "XYZ", "sRGB"]``, - a :exc:`PyCMSError` is raised. - - If using LAB and ``colorTemp`` is not a positive integer, - a :exc:`PyCMSError` is raised. - - If an error occurs while creating the profile, - a :exc:`PyCMSError` is raised. - - Use this function to create common profiles on-the-fly instead of - having to supply a profile on disk and knowing the path to it. It - returns a normal CmsProfile object that can be passed to - ImageCms.buildTransformFromOpenProfiles() to create a transform to apply - to images. - - :param colorSpace: String, the color space of the profile you wish to - create. - Currently only "LAB", "XYZ", and "sRGB" are supported. - :param colorTemp: Positive integer for the white point for the profile, in - degrees Kelvin (i.e. 5000, 6500, 9600, etc.). The default is for D50 - illuminant if omitted (5000k). colorTemp is ONLY applied to LAB - profiles, and is ignored for XYZ and sRGB. - :returns: A CmsProfile class object - :exception PyCMSError: - """ - - if colorSpace not in ["LAB", "XYZ", "sRGB"]: - raise PyCMSError( - f"Color space not supported for on-the-fly profile creation ({colorSpace})" - ) - - if colorSpace == "LAB": - try: - colorTemp = float(colorTemp) - except (TypeError, ValueError) as e: - raise PyCMSError( - f'Color temperature must be numeric, "{colorTemp}" not valid' - ) from e - - try: - return core.createProfile(colorSpace, colorTemp) - except (TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileName(profile): - """ - - (pyCMS) Gets the internal product name for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, - a :exc:`PyCMSError` is raised If an error occurs while trying - to obtain the name tag, a :exc:`PyCMSError` is raised. - - Use this function to obtain the INTERNAL name of the profile (stored - in an ICC tag in the profile itself), usually the one used when the - profile was originally created. Sometimes this tag also contains - additional information supplied by the creator. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal name of the profile as stored - in an ICC tag. - :exception PyCMSError: - """ - - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - # do it in python, not c. - # // name was "%s - %s" (model, manufacturer) || Description , - # // but if the Model and Manufacturer were the same or the model - # // was long, Just the model, in 1.x - model = profile.profile.model - manufacturer = profile.profile.manufacturer - - if not (model or manufacturer): - return (profile.profile.profile_description or "") + "\n" - if not manufacturer or len(model) > 30: - return model + "\n" - return f"{model} - {manufacturer}\n" - - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileInfo(profile): - """ - (pyCMS) Gets the internal product information for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, - a :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the info tag, - a :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - info tag. This often contains details about the profile, and how it - was created, as supplied by the creator. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in - an ICC tag. - :exception PyCMSError: - """ - - try: - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - # add an extra newline to preserve pyCMS compatibility - # Python, not C. the white point bits weren't working well, - # so skipping. - # info was description \r\n\r\n copyright \r\n\r\n K007 tag \r\n\r\n whitepoint - description = profile.profile.profile_description - cpright = profile.profile.copyright - arr = [] - for elt in (description, cpright): - if elt: - arr.append(elt) - return "\r\n\r\n".join(arr) + "\r\n\r\n" - - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileCopyright(profile): - """ - (pyCMS) Gets the copyright for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the copyright tag, - a :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - copyright tag. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in - an ICC tag. - :exception PyCMSError: - """ - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return (profile.profile.copyright or "") + "\n" - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileManufacturer(profile): - """ - (pyCMS) Gets the manufacturer for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the manufacturer tag, a - :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - manufacturer tag. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in - an ICC tag. - :exception PyCMSError: - """ - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return (profile.profile.manufacturer or "") + "\n" - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileModel(profile): - """ - (pyCMS) Gets the model for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the model tag, - a :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - model tag. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in - an ICC tag. - :exception PyCMSError: - """ - - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return (profile.profile.model or "") + "\n" - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getProfileDescription(profile): - """ - (pyCMS) Gets the description for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the description tag, - a :exc:`PyCMSError` is raised. - - Use this function to obtain the information stored in the profile's - description tag. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: A string containing the internal profile information stored in an - ICC tag. - :exception PyCMSError: - """ - - try: - # add an extra newline to preserve pyCMS compatibility - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return (profile.profile.profile_description or "") + "\n" - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def getDefaultIntent(profile): - """ - (pyCMS) Gets the default intent name for the given profile. - - If ``profile`` isn't a valid CmsProfile object or filename to a profile, a - :exc:`PyCMSError` is raised. - - If an error occurs while trying to obtain the default intent, a - :exc:`PyCMSError` is raised. - - Use this function to determine the default (and usually best optimized) - rendering intent for this profile. Most profiles support multiple - rendering intents, but are intended mostly for one type of conversion. - If you wish to use a different intent than returned, use - ImageCms.isIntentSupported() to verify it will work first. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :returns: Integer 0-3 specifying the default rendering intent for this - profile. - - ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) - ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 - ImageCms.INTENT_SATURATION = 2 - ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :exception PyCMSError: - """ - - try: - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - return profile.profile.rendering_intent - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def isIntentSupported(profile, intent, direction): - """ - (pyCMS) Checks if a given intent is supported. - - Use this function to verify that you can use your desired - ``intent`` with ``profile``, and that ``profile`` can be used for the - input/output/proof profile as you desire. - - Some profiles are created specifically for one "direction", can cannot - be used for others. Some profiles can only be used for certain - rendering intents, so it's best to either verify this before trying - to create a transform with them (using this function), or catch the - potential :exc:`PyCMSError` that will occur if they don't - support the modes you select. - - :param profile: EITHER a valid CmsProfile object, OR a string of the - filename of an ICC profile. - :param intent: Integer (0-3) specifying the rendering intent you wish to - use with this profile - - ImageCms.INTENT_PERCEPTUAL = 0 (DEFAULT) - ImageCms.INTENT_RELATIVE_COLORIMETRIC = 1 - ImageCms.INTENT_SATURATION = 2 - ImageCms.INTENT_ABSOLUTE_COLORIMETRIC = 3 - - see the pyCMS documentation for details on rendering intents and what - they do. - :param direction: Integer specifying if the profile is to be used for - input, output, or proof - - INPUT = 0 (or use ImageCms.DIRECTION_INPUT) - OUTPUT = 1 (or use ImageCms.DIRECTION_OUTPUT) - PROOF = 2 (or use ImageCms.DIRECTION_PROOF) - - :returns: 1 if the intent/direction are supported, -1 if they are not. - :exception PyCMSError: - """ - - try: - if not isinstance(profile, ImageCmsProfile): - profile = ImageCmsProfile(profile) - # FIXME: I get different results for the same data w. different - # compilers. Bug in LittleCMS or in the binding? - if profile.profile.is_intent_supported(intent, direction): - return 1 - else: - return -1 - except (AttributeError, OSError, TypeError, ValueError) as v: - raise PyCMSError(v) from v - - -def versions(): - """ - (pyCMS) Fetches versions. - """ - - return (VERSION, core.littlecms_version, sys.version.split()[0], Image.__version__) diff --git a/PIL/ImageColor.py b/PIL/ImageColor.py deleted file mode 100644 index 9091174..0000000 --- a/PIL/ImageColor.py +++ /dev/null @@ -1,300 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# map CSS3-style colour description strings to RGB -# -# History: -# 2002-10-24 fl Added support for CSS-style color strings -# 2002-12-15 fl Added RGBA support -# 2004-03-27 fl Fixed remaining int() problems for Python 1.5.2 -# 2004-07-19 fl Fixed gray/grey spelling issues -# 2009-03-05 fl Fixed rounding error in grayscale calculation -# -# Copyright (c) 2002-2004 by Secret Labs AB -# Copyright (c) 2002-2004 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import re - -from . import Image - - -def getrgb(color): - """ - Convert a color string to an RGB tuple. If the string cannot be parsed, - this function raises a :py:exc:`ValueError` exception. - - .. versionadded:: 1.1.4 - - :param color: A color string - :return: ``(red, green, blue[, alpha])`` - """ - color = color.lower() - - rgb = colormap.get(color, None) - if rgb: - if isinstance(rgb, tuple): - return rgb - colormap[color] = rgb = getrgb(rgb) - return rgb - - # check for known string formats - if re.match("#[a-f0-9]{3}$", color): - return (int(color[1] * 2, 16), int(color[2] * 2, 16), int(color[3] * 2, 16)) - - if re.match("#[a-f0-9]{4}$", color): - return ( - int(color[1] * 2, 16), - int(color[2] * 2, 16), - int(color[3] * 2, 16), - int(color[4] * 2, 16), - ) - - if re.match("#[a-f0-9]{6}$", color): - return (int(color[1:3], 16), int(color[3:5], 16), int(color[5:7], 16)) - - if re.match("#[a-f0-9]{8}$", color): - return ( - int(color[1:3], 16), - int(color[3:5], 16), - int(color[5:7], 16), - int(color[7:9], 16), - ) - - m = re.match(r"rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) - if m: - return (int(m.group(1)), int(m.group(2)), int(m.group(3))) - - m = re.match(r"rgb\(\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$", color) - if m: - return ( - int((int(m.group(1)) * 255) / 100.0 + 0.5), - int((int(m.group(2)) * 255) / 100.0 + 0.5), - int((int(m.group(3)) * 255) / 100.0 + 0.5), - ) - - m = re.match( - r"hsl\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)%\s*,\s*(\d+\.?\d*)%\s*\)$", color - ) - if m: - from colorsys import hls_to_rgb - - rgb = hls_to_rgb( - float(m.group(1)) / 360.0, - float(m.group(3)) / 100.0, - float(m.group(2)) / 100.0, - ) - return ( - int(rgb[0] * 255 + 0.5), - int(rgb[1] * 255 + 0.5), - int(rgb[2] * 255 + 0.5), - ) - - m = re.match( - r"hs[bv]\(\s*(\d+\.?\d*)\s*,\s*(\d+\.?\d*)%\s*,\s*(\d+\.?\d*)%\s*\)$", color - ) - if m: - from colorsys import hsv_to_rgb - - rgb = hsv_to_rgb( - float(m.group(1)) / 360.0, - float(m.group(2)) / 100.0, - float(m.group(3)) / 100.0, - ) - return ( - int(rgb[0] * 255 + 0.5), - int(rgb[1] * 255 + 0.5), - int(rgb[2] * 255 + 0.5), - ) - - m = re.match(r"rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$", color) - if m: - return (int(m.group(1)), int(m.group(2)), int(m.group(3)), int(m.group(4))) - raise ValueError(f"unknown color specifier: {repr(color)}") - - -def getcolor(color, mode): - """ - Same as :py:func:`~PIL.ImageColor.getrgb`, but converts the RGB value to a - greyscale value if the mode is not color or a palette image. If the string - cannot be parsed, this function raises a :py:exc:`ValueError` exception. - - .. versionadded:: 1.1.4 - - :param color: A color string - :return: ``(graylevel [, alpha]) or (red, green, blue[, alpha])`` - """ - # same as getrgb, but converts the result to the given mode - color, alpha = getrgb(color), 255 - if len(color) == 4: - color, alpha = color[0:3], color[3] - - if Image.getmodebase(mode) == "L": - r, g, b = color - # ITU-R Recommendation 601-2 for nonlinear RGB - # scaled to 24 bits to match the convert's implementation. - color = (r * 19595 + g * 38470 + b * 7471 + 0x8000) >> 16 - if mode[-1] == "A": - return (color, alpha) - else: - if mode[-1] == "A": - return color + (alpha,) - return color - - -colormap = { - # X11 colour table from https://drafts.csswg.org/css-color-4/, with - # gray/grey spelling issues fixed. This is a superset of HTML 4.0 - # colour names used in CSS 1. - "aliceblue": "#f0f8ff", - "antiquewhite": "#faebd7", - "aqua": "#00ffff", - "aquamarine": "#7fffd4", - "azure": "#f0ffff", - "beige": "#f5f5dc", - "bisque": "#ffe4c4", - "black": "#000000", - "blanchedalmond": "#ffebcd", - "blue": "#0000ff", - "blueviolet": "#8a2be2", - "brown": "#a52a2a", - "burlywood": "#deb887", - "cadetblue": "#5f9ea0", - "chartreuse": "#7fff00", - "chocolate": "#d2691e", - "coral": "#ff7f50", - "cornflowerblue": "#6495ed", - "cornsilk": "#fff8dc", - "crimson": "#dc143c", - "cyan": "#00ffff", - "darkblue": "#00008b", - "darkcyan": "#008b8b", - "darkgoldenrod": "#b8860b", - "darkgray": "#a9a9a9", - "darkgrey": "#a9a9a9", - "darkgreen": "#006400", - "darkkhaki": "#bdb76b", - "darkmagenta": "#8b008b", - "darkolivegreen": "#556b2f", - "darkorange": "#ff8c00", - "darkorchid": "#9932cc", - "darkred": "#8b0000", - "darksalmon": "#e9967a", - "darkseagreen": "#8fbc8f", - "darkslateblue": "#483d8b", - "darkslategray": "#2f4f4f", - "darkslategrey": "#2f4f4f", - "darkturquoise": "#00ced1", - "darkviolet": "#9400d3", - "deeppink": "#ff1493", - "deepskyblue": "#00bfff", - "dimgray": "#696969", - "dimgrey": "#696969", - "dodgerblue": "#1e90ff", - "firebrick": "#b22222", - "floralwhite": "#fffaf0", - "forestgreen": "#228b22", - "fuchsia": "#ff00ff", - "gainsboro": "#dcdcdc", - "ghostwhite": "#f8f8ff", - "gold": "#ffd700", - "goldenrod": "#daa520", - "gray": "#808080", - "grey": "#808080", - "green": "#008000", - "greenyellow": "#adff2f", - "honeydew": "#f0fff0", - "hotpink": "#ff69b4", - "indianred": "#cd5c5c", - "indigo": "#4b0082", - "ivory": "#fffff0", - "khaki": "#f0e68c", - "lavender": "#e6e6fa", - "lavenderblush": "#fff0f5", - "lawngreen": "#7cfc00", - "lemonchiffon": "#fffacd", - "lightblue": "#add8e6", - "lightcoral": "#f08080", - "lightcyan": "#e0ffff", - "lightgoldenrodyellow": "#fafad2", - "lightgreen": "#90ee90", - "lightgray": "#d3d3d3", - "lightgrey": "#d3d3d3", - "lightpink": "#ffb6c1", - "lightsalmon": "#ffa07a", - "lightseagreen": "#20b2aa", - "lightskyblue": "#87cefa", - "lightslategray": "#778899", - "lightslategrey": "#778899", - "lightsteelblue": "#b0c4de", - "lightyellow": "#ffffe0", - "lime": "#00ff00", - "limegreen": "#32cd32", - "linen": "#faf0e6", - "magenta": "#ff00ff", - "maroon": "#800000", - "mediumaquamarine": "#66cdaa", - "mediumblue": "#0000cd", - "mediumorchid": "#ba55d3", - "mediumpurple": "#9370db", - "mediumseagreen": "#3cb371", - "mediumslateblue": "#7b68ee", - "mediumspringgreen": "#00fa9a", - "mediumturquoise": "#48d1cc", - "mediumvioletred": "#c71585", - "midnightblue": "#191970", - "mintcream": "#f5fffa", - "mistyrose": "#ffe4e1", - "moccasin": "#ffe4b5", - "navajowhite": "#ffdead", - "navy": "#000080", - "oldlace": "#fdf5e6", - "olive": "#808000", - "olivedrab": "#6b8e23", - "orange": "#ffa500", - "orangered": "#ff4500", - "orchid": "#da70d6", - "palegoldenrod": "#eee8aa", - "palegreen": "#98fb98", - "paleturquoise": "#afeeee", - "palevioletred": "#db7093", - "papayawhip": "#ffefd5", - "peachpuff": "#ffdab9", - "peru": "#cd853f", - "pink": "#ffc0cb", - "plum": "#dda0dd", - "powderblue": "#b0e0e6", - "purple": "#800080", - "rebeccapurple": "#663399", - "red": "#ff0000", - "rosybrown": "#bc8f8f", - "royalblue": "#4169e1", - "saddlebrown": "#8b4513", - "salmon": "#fa8072", - "sandybrown": "#f4a460", - "seagreen": "#2e8b57", - "seashell": "#fff5ee", - "sienna": "#a0522d", - "silver": "#c0c0c0", - "skyblue": "#87ceeb", - "slateblue": "#6a5acd", - "slategray": "#708090", - "slategrey": "#708090", - "snow": "#fffafa", - "springgreen": "#00ff7f", - "steelblue": "#4682b4", - "tan": "#d2b48c", - "teal": "#008080", - "thistle": "#d8bfd8", - "tomato": "#ff6347", - "turquoise": "#40e0d0", - "violet": "#ee82ee", - "wheat": "#f5deb3", - "white": "#ffffff", - "whitesmoke": "#f5f5f5", - "yellow": "#ffff00", - "yellowgreen": "#9acd32", -} diff --git a/PIL/ImageDraw.py b/PIL/ImageDraw.py deleted file mode 100644 index b823be9..0000000 --- a/PIL/ImageDraw.py +++ /dev/null @@ -1,898 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# drawing interface operations -# -# History: -# 1996-04-13 fl Created (experimental) -# 1996-08-07 fl Filled polygons, ellipses. -# 1996-08-13 fl Added text support -# 1998-06-28 fl Handle I and F images -# 1998-12-29 fl Added arc; use arc primitive to draw ellipses -# 1999-01-10 fl Added shape stuff (experimental) -# 1999-02-06 fl Added bitmap support -# 1999-02-11 fl Changed all primitives to take options -# 1999-02-20 fl Fixed backwards compatibility -# 2000-10-12 fl Copy on write, when necessary -# 2001-02-18 fl Use default ink for bitmap/text also in fill mode -# 2002-10-24 fl Added support for CSS-style color strings -# 2002-12-10 fl Added experimental support for RGBA-on-RGB drawing -# 2002-12-11 fl Refactored low-level drawing API (work in progress) -# 2004-08-26 fl Made Draw() a factory function, added getdraw() support -# 2004-09-04 fl Added width support to line primitive -# 2004-09-10 fl Added font mode handling -# 2006-06-19 fl Added font bearing support (getmask2) -# -# Copyright (c) 1997-2006 by Secret Labs AB -# Copyright (c) 1996-2006 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import math -import numbers - -from . import Image, ImageColor - -""" -A simple 2D drawing interface for PIL images. -

-Application code should use the Draw factory, instead of -directly. -""" - - -class ImageDraw: - def __init__(self, im, mode=None): - """ - Create a drawing instance. - - :param im: The image to draw in. - :param mode: Optional mode to use for color values. For RGB - images, this argument can be RGB or RGBA (to blend the - drawing into the image). For all other modes, this argument - must be the same as the image mode. If omitted, the mode - defaults to the mode of the image. - """ - im.load() - if im.readonly: - im._copy() # make it writeable - blend = 0 - if mode is None: - mode = im.mode - if mode != im.mode: - if mode == "RGBA" and im.mode == "RGB": - blend = 1 - else: - raise ValueError("mode mismatch") - if mode == "P": - self.palette = im.palette - else: - self.palette = None - self.im = im.im - self.draw = Image.core.draw(self.im, blend) - self.mode = mode - if mode in ("I", "F"): - self.ink = self.draw.draw_ink(1) - else: - self.ink = self.draw.draw_ink(-1) - if mode in ("1", "P", "I", "F"): - # FIXME: fix Fill2 to properly support matte for I+F images - self.fontmode = "1" - else: - self.fontmode = "L" # aliasing is okay for other modes - self.fill = 0 - self.font = None - - def getfont(self): - """ - Get the current default font. - - :returns: An image font.""" - if not self.font: - # FIXME: should add a font repository - from . import ImageFont - - self.font = ImageFont.load_default() - return self.font - - def _getink(self, ink, fill=None): - if ink is None and fill is None: - if self.fill: - fill = self.ink - else: - ink = self.ink - else: - if ink is not None: - if isinstance(ink, str): - ink = ImageColor.getcolor(ink, self.mode) - if self.palette and not isinstance(ink, numbers.Number): - ink = self.palette.getcolor(ink) - ink = self.draw.draw_ink(ink) - if fill is not None: - if isinstance(fill, str): - fill = ImageColor.getcolor(fill, self.mode) - if self.palette and not isinstance(fill, numbers.Number): - fill = self.palette.getcolor(fill) - fill = self.draw.draw_ink(fill) - return ink, fill - - def arc(self, xy, start, end, fill=None, width=1): - """Draw an arc.""" - ink, fill = self._getink(fill) - if ink is not None: - self.draw.draw_arc(xy, start, end, ink, width) - - def bitmap(self, xy, bitmap, fill=None): - """Draw a bitmap.""" - bitmap.load() - ink, fill = self._getink(fill) - if ink is None: - ink = fill - if ink is not None: - self.draw.draw_bitmap(xy, bitmap.im, ink) - - def chord(self, xy, start, end, fill=None, outline=None, width=1): - """Draw a chord.""" - ink, fill = self._getink(outline, fill) - if fill is not None: - self.draw.draw_chord(xy, start, end, fill, 1) - if ink is not None and ink != fill and width != 0: - self.draw.draw_chord(xy, start, end, ink, 0, width) - - def ellipse(self, xy, fill=None, outline=None, width=1): - """Draw an ellipse.""" - ink, fill = self._getink(outline, fill) - if fill is not None: - self.draw.draw_ellipse(xy, fill, 1) - if ink is not None and ink != fill and width != 0: - self.draw.draw_ellipse(xy, ink, 0, width) - - def line(self, xy, fill=None, width=0, joint=None): - """Draw a line, or a connected sequence of line segments.""" - ink = self._getink(fill)[0] - if ink is not None: - self.draw.draw_lines(xy, ink, width) - if joint == "curve" and width > 4: - if not isinstance(xy[0], (list, tuple)): - xy = [tuple(xy[i : i + 2]) for i in range(0, len(xy), 2)] - for i in range(1, len(xy) - 1): - point = xy[i] - angles = [ - math.degrees(math.atan2(end[0] - start[0], start[1] - end[1])) - % 360 - for start, end in ((xy[i - 1], point), (point, xy[i + 1])) - ] - if angles[0] == angles[1]: - # This is a straight line, so no joint is required - continue - - def coord_at_angle(coord, angle): - x, y = coord - angle -= 90 - distance = width / 2 - 1 - return tuple( - [ - p + (math.floor(p_d) if p_d > 0 else math.ceil(p_d)) - for p, p_d in ( - (x, distance * math.cos(math.radians(angle))), - (y, distance * math.sin(math.radians(angle))), - ) - ] - ) - - flipped = ( - angles[1] > angles[0] and angles[1] - 180 > angles[0] - ) or (angles[1] < angles[0] and angles[1] + 180 > angles[0]) - coords = [ - (point[0] - width / 2 + 1, point[1] - width / 2 + 1), - (point[0] + width / 2 - 1, point[1] + width / 2 - 1), - ] - if flipped: - start, end = (angles[1] + 90, angles[0] + 90) - else: - start, end = (angles[0] - 90, angles[1] - 90) - self.pieslice(coords, start - 90, end - 90, fill) - - if width > 8: - # Cover potential gaps between the line and the joint - if flipped: - gapCoords = [ - coord_at_angle(point, angles[0] + 90), - point, - coord_at_angle(point, angles[1] + 90), - ] - else: - gapCoords = [ - coord_at_angle(point, angles[0] - 90), - point, - coord_at_angle(point, angles[1] - 90), - ] - self.line(gapCoords, fill, width=3) - - def shape(self, shape, fill=None, outline=None): - """(Experimental) Draw a shape.""" - shape.close() - ink, fill = self._getink(outline, fill) - if fill is not None: - self.draw.draw_outline(shape, fill, 1) - if ink is not None and ink != fill: - self.draw.draw_outline(shape, ink, 0) - - def pieslice(self, xy, start, end, fill=None, outline=None, width=1): - """Draw a pieslice.""" - ink, fill = self._getink(outline, fill) - if fill is not None: - self.draw.draw_pieslice(xy, start, end, fill, 1) - if ink is not None and ink != fill and width != 0: - self.draw.draw_pieslice(xy, start, end, ink, 0, width) - - def point(self, xy, fill=None): - """Draw one or more individual pixels.""" - ink, fill = self._getink(fill) - if ink is not None: - self.draw.draw_points(xy, ink) - - def polygon(self, xy, fill=None, outline=None): - """Draw a polygon.""" - ink, fill = self._getink(outline, fill) - if fill is not None: - self.draw.draw_polygon(xy, fill, 1) - if ink is not None and ink != fill: - self.draw.draw_polygon(xy, ink, 0) - - def regular_polygon( - self, bounding_circle, n_sides, rotation=0, fill=None, outline=None - ): - """Draw a regular polygon.""" - xy = _compute_regular_polygon_vertices(bounding_circle, n_sides, rotation) - self.polygon(xy, fill, outline) - - def rectangle(self, xy, fill=None, outline=None, width=1): - """Draw a rectangle.""" - ink, fill = self._getink(outline, fill) - if fill is not None: - self.draw.draw_rectangle(xy, fill, 1) - if ink is not None and ink != fill and width != 0: - self.draw.draw_rectangle(xy, ink, 0, width) - - def _multiline_check(self, text): - """Draw text.""" - split_character = "\n" if isinstance(text, str) else b"\n" - - return split_character in text - - def _multiline_split(self, text): - split_character = "\n" if isinstance(text, str) else b"\n" - - return text.split(split_character) - - def text( - self, - xy, - text, - fill=None, - font=None, - anchor=None, - spacing=4, - align="left", - direction=None, - features=None, - language=None, - stroke_width=0, - stroke_fill=None, - embedded_color=False, - *args, - **kwargs, - ): - if self._multiline_check(text): - return self.multiline_text( - xy, - text, - fill, - font, - anchor, - spacing, - align, - direction, - features, - language, - stroke_width, - stroke_fill, - embedded_color, - ) - - if embedded_color and self.mode not in ("RGB", "RGBA"): - raise ValueError("Embedded color supported only in RGB and RGBA modes") - - if font is None: - font = self.getfont() - - def getink(fill): - ink, fill = self._getink(fill) - if ink is None: - return fill - return ink - - def draw_text(ink, stroke_width=0, stroke_offset=None): - mode = self.fontmode - if stroke_width == 0 and embedded_color: - mode = "RGBA" - coord = xy - try: - mask, offset = font.getmask2( - text, - mode, - direction=direction, - features=features, - language=language, - stroke_width=stroke_width, - anchor=anchor, - ink=ink, - *args, - **kwargs, - ) - coord = coord[0] + offset[0], coord[1] + offset[1] - except AttributeError: - try: - mask = font.getmask( - text, - mode, - direction, - features, - language, - stroke_width, - anchor, - ink, - *args, - **kwargs, - ) - except TypeError: - mask = font.getmask(text) - if stroke_offset: - coord = coord[0] + stroke_offset[0], coord[1] + stroke_offset[1] - if mode == "RGBA": - # font.getmask2(mode="RGBA") returns color in RGB bands and mask in A - # extract mask and set text alpha - color, mask = mask, mask.getband(3) - color.fillband(3, (ink >> 24) & 0xFF) - coord2 = coord[0] + mask.size[0], coord[1] + mask.size[1] - self.im.paste(color, coord + coord2, mask) - else: - self.draw.draw_bitmap(coord, mask, ink) - - ink = getink(fill) - if ink is not None: - stroke_ink = None - if stroke_width: - stroke_ink = getink(stroke_fill) if stroke_fill is not None else ink - - if stroke_ink is not None: - # Draw stroked text - draw_text(stroke_ink, stroke_width) - - # Draw normal text - draw_text(ink, 0) - else: - # Only draw normal text - draw_text(ink) - - def multiline_text( - self, - xy, - text, - fill=None, - font=None, - anchor=None, - spacing=4, - align="left", - direction=None, - features=None, - language=None, - stroke_width=0, - stroke_fill=None, - embedded_color=False, - ): - if direction == "ttb": - raise ValueError("ttb direction is unsupported for multiline text") - - if anchor is None: - anchor = "la" - elif len(anchor) != 2: - raise ValueError("anchor must be a 2 character string") - elif anchor[1] in "tb": - raise ValueError("anchor not supported for multiline text") - - widths = [] - max_width = 0 - lines = self._multiline_split(text) - line_spacing = ( - self.textsize("A", font=font, stroke_width=stroke_width)[1] + spacing - ) - for line in lines: - line_width = self.textlength( - line, font, direction=direction, features=features, language=language - ) - widths.append(line_width) - max_width = max(max_width, line_width) - - top = xy[1] - if anchor[1] == "m": - top -= (len(lines) - 1) * line_spacing / 2.0 - elif anchor[1] == "d": - top -= (len(lines) - 1) * line_spacing - - for idx, line in enumerate(lines): - left = xy[0] - width_difference = max_width - widths[idx] - - # first align left by anchor - if anchor[0] == "m": - left -= width_difference / 2.0 - elif anchor[0] == "r": - left -= width_difference - - # then align by align parameter - if align == "left": - pass - elif align == "center": - left += width_difference / 2.0 - elif align == "right": - left += width_difference - else: - raise ValueError('align must be "left", "center" or "right"') - - self.text( - (left, top), - line, - fill, - font, - anchor, - direction=direction, - features=features, - language=language, - stroke_width=stroke_width, - stroke_fill=stroke_fill, - embedded_color=embedded_color, - ) - top += line_spacing - - def textsize( - self, - text, - font=None, - spacing=4, - direction=None, - features=None, - language=None, - stroke_width=0, - ): - """Get the size of a given string, in pixels.""" - if self._multiline_check(text): - return self.multiline_textsize( - text, font, spacing, direction, features, language, stroke_width - ) - - if font is None: - font = self.getfont() - return font.getsize(text, direction, features, language, stroke_width) - - def multiline_textsize( - self, - text, - font=None, - spacing=4, - direction=None, - features=None, - language=None, - stroke_width=0, - ): - max_width = 0 - lines = self._multiline_split(text) - line_spacing = ( - self.textsize("A", font=font, stroke_width=stroke_width)[1] + spacing - ) - for line in lines: - line_width, line_height = self.textsize( - line, font, spacing, direction, features, language, stroke_width - ) - max_width = max(max_width, line_width) - return max_width, len(lines) * line_spacing - spacing - - def textlength( - self, - text, - font=None, - direction=None, - features=None, - language=None, - embedded_color=False, - ): - """Get the length of a given string, in pixels with 1/64 precision.""" - if self._multiline_check(text): - raise ValueError("can't measure length of multiline text") - if embedded_color and self.mode not in ("RGB", "RGBA"): - raise ValueError("Embedded color supported only in RGB and RGBA modes") - - if font is None: - font = self.getfont() - mode = "RGBA" if embedded_color else self.fontmode - try: - return font.getlength(text, mode, direction, features, language) - except AttributeError: - size = self.textsize( - text, font, direction=direction, features=features, language=language - ) - if direction == "ttb": - return size[1] - return size[0] - - def textbbox( - self, - xy, - text, - font=None, - anchor=None, - spacing=4, - align="left", - direction=None, - features=None, - language=None, - stroke_width=0, - embedded_color=False, - ): - """Get the bounding box of a given string, in pixels.""" - if embedded_color and self.mode not in ("RGB", "RGBA"): - raise ValueError("Embedded color supported only in RGB and RGBA modes") - - if self._multiline_check(text): - return self.multiline_textbbox( - xy, - text, - font, - anchor, - spacing, - align, - direction, - features, - language, - stroke_width, - embedded_color, - ) - - if font is None: - font = self.getfont() - mode = "RGBA" if embedded_color else self.fontmode - bbox = font.getbbox( - text, mode, direction, features, language, stroke_width, anchor - ) - return bbox[0] + xy[0], bbox[1] + xy[1], bbox[2] + xy[0], bbox[3] + xy[1] - - def multiline_textbbox( - self, - xy, - text, - font=None, - anchor=None, - spacing=4, - align="left", - direction=None, - features=None, - language=None, - stroke_width=0, - embedded_color=False, - ): - if direction == "ttb": - raise ValueError("ttb direction is unsupported for multiline text") - - if anchor is None: - anchor = "la" - elif len(anchor) != 2: - raise ValueError("anchor must be a 2 character string") - elif anchor[1] in "tb": - raise ValueError("anchor not supported for multiline text") - - widths = [] - max_width = 0 - lines = self._multiline_split(text) - line_spacing = ( - self.textsize("A", font=font, stroke_width=stroke_width)[1] + spacing - ) - for line in lines: - line_width = self.textlength( - line, - font, - direction=direction, - features=features, - language=language, - embedded_color=embedded_color, - ) - widths.append(line_width) - max_width = max(max_width, line_width) - - top = xy[1] - if anchor[1] == "m": - top -= (len(lines) - 1) * line_spacing / 2.0 - elif anchor[1] == "d": - top -= (len(lines) - 1) * line_spacing - - bbox = None - - for idx, line in enumerate(lines): - left = xy[0] - width_difference = max_width - widths[idx] - - # first align left by anchor - if anchor[0] == "m": - left -= width_difference / 2.0 - elif anchor[0] == "r": - left -= width_difference - - # then align by align parameter - if align == "left": - pass - elif align == "center": - left += width_difference / 2.0 - elif align == "right": - left += width_difference - else: - raise ValueError('align must be "left", "center" or "right"') - - bbox_line = self.textbbox( - (left, top), - line, - font, - anchor, - direction=direction, - features=features, - language=language, - stroke_width=stroke_width, - embedded_color=embedded_color, - ) - if bbox is None: - bbox = bbox_line - else: - bbox = ( - min(bbox[0], bbox_line[0]), - min(bbox[1], bbox_line[1]), - max(bbox[2], bbox_line[2]), - max(bbox[3], bbox_line[3]), - ) - - top += line_spacing - - if bbox is None: - return xy[0], xy[1], xy[0], xy[1] - return bbox - - -def Draw(im, mode=None): - """ - A simple 2D drawing interface for PIL images. - - :param im: The image to draw in. - :param mode: Optional mode to use for color values. For RGB - images, this argument can be RGB or RGBA (to blend the - drawing into the image). For all other modes, this argument - must be the same as the image mode. If omitted, the mode - defaults to the mode of the image. - """ - try: - return im.getdraw(mode) - except AttributeError: - return ImageDraw(im, mode) - - -# experimental access to the outline API -try: - Outline = Image.core.outline -except AttributeError: - Outline = None - - -def getdraw(im=None, hints=None): - """ - (Experimental) A more advanced 2D drawing interface for PIL images, - based on the WCK interface. - - :param im: The image to draw in. - :param hints: An optional list of hints. - :returns: A (drawing context, drawing resource factory) tuple. - """ - # FIXME: this needs more work! - # FIXME: come up with a better 'hints' scheme. - handler = None - if not hints or "nicest" in hints: - try: - from . import _imagingagg as handler - except ImportError: - pass - if handler is None: - from . import ImageDraw2 as handler - if im: - im = handler.Draw(im) - return im, handler - - -def floodfill(image, xy, value, border=None, thresh=0): - """ - (experimental) Fills a bounded region with a given color. - - :param image: Target image. - :param xy: Seed position (a 2-item coordinate tuple). See - :ref:`coordinate-system`. - :param value: Fill color. - :param border: Optional border value. If given, the region consists of - pixels with a color different from the border color. If not given, - the region consists of pixels having the same color as the seed - pixel. - :param thresh: Optional threshold value which specifies a maximum - tolerable difference of a pixel value from the 'background' in - order for it to be replaced. Useful for filling regions of - non-homogeneous, but similar, colors. - """ - # based on an implementation by Eric S. Raymond - # amended by yo1995 @20180806 - pixel = image.load() - x, y = xy - try: - background = pixel[x, y] - if _color_diff(value, background) <= thresh: - return # seed point already has fill color - pixel[x, y] = value - except (ValueError, IndexError): - return # seed point outside image - edge = {(x, y)} - # use a set to keep record of current and previous edge pixels - # to reduce memory consumption - full_edge = set() - while edge: - new_edge = set() - for (x, y) in edge: # 4 adjacent method - for (s, t) in ((x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)): - # If already processed, or if a coordinate is negative, skip - if (s, t) in full_edge or s < 0 or t < 0: - continue - try: - p = pixel[s, t] - except (ValueError, IndexError): - pass - else: - full_edge.add((s, t)) - if border is None: - fill = _color_diff(p, background) <= thresh - else: - fill = p != value and p != border - if fill: - pixel[s, t] = value - new_edge.add((s, t)) - full_edge = edge # discard pixels processed - edge = new_edge - - -def _compute_regular_polygon_vertices(bounding_circle, n_sides, rotation): - """ - Generate a list of vertices for a 2D regular polygon. - - :param bounding_circle: The bounding circle is a tuple defined - by a point and radius. The polygon is inscribed in this circle. - (e.g. ``bounding_circle=(x, y, r)`` or ``((x, y), r)``) - :param n_sides: Number of sides - (e.g. ``n_sides=3`` for a triangle, ``6`` for a hexagon) - :param rotation: Apply an arbitrary rotation to the polygon - (e.g. ``rotation=90``, applies a 90 degree rotation) - :return: List of regular polygon vertices - (e.g. ``[(25, 50), (50, 50), (50, 25), (25, 25)]``) - - How are the vertices computed? - 1. Compute the following variables - - theta: Angle between the apothem & the nearest polygon vertex - - side_length: Length of each polygon edge - - centroid: Center of bounding circle (1st, 2nd elements of bounding_circle) - - polygon_radius: Polygon radius (last element of bounding_circle) - - angles: Location of each polygon vertex in polar grid - (e.g. A square with 0 degree rotation => [225.0, 315.0, 45.0, 135.0]) - - 2. For each angle in angles, get the polygon vertex at that angle - The vertex is computed using the equation below. - X= xcos(φ) + ysin(φ) - Y= −xsin(φ) + ycos(φ) - - Note: - φ = angle in degrees - x = 0 - y = polygon_radius - - The formula above assumes rotation around the origin. - In our case, we are rotating around the centroid. - To account for this, we use the formula below - X = xcos(φ) + ysin(φ) + centroid_x - Y = −xsin(φ) + ycos(φ) + centroid_y - """ - # 1. Error Handling - # 1.1 Check `n_sides` has an appropriate value - if not isinstance(n_sides, int): - raise TypeError("n_sides should be an int") - if n_sides < 3: - raise ValueError("n_sides should be an int > 2") - - # 1.2 Check `bounding_circle` has an appropriate value - if not isinstance(bounding_circle, (list, tuple)): - raise TypeError("bounding_circle should be a tuple") - - if len(bounding_circle) == 3: - *centroid, polygon_radius = bounding_circle - elif len(bounding_circle) == 2: - centroid, polygon_radius = bounding_circle - else: - raise ValueError( - "bounding_circle should contain 2D coordinates " - "and a radius (e.g. (x, y, r) or ((x, y), r) )" - ) - - if not all(isinstance(i, (int, float)) for i in (*centroid, polygon_radius)): - raise ValueError("bounding_circle should only contain numeric data") - - if not len(centroid) == 2: - raise ValueError( - "bounding_circle centre should contain 2D coordinates (e.g. (x, y))" - ) - - if polygon_radius <= 0: - raise ValueError("bounding_circle radius should be > 0") - - # 1.3 Check `rotation` has an appropriate value - if not isinstance(rotation, (int, float)): - raise ValueError("rotation should be an int or float") - - # 2. Define Helper Functions - def _apply_rotation(point, degrees, centroid): - return ( - round( - point[0] * math.cos(math.radians(360 - degrees)) - - point[1] * math.sin(math.radians(360 - degrees)) - + centroid[0], - 2, - ), - round( - point[1] * math.cos(math.radians(360 - degrees)) - + point[0] * math.sin(math.radians(360 - degrees)) - + centroid[1], - 2, - ), - ) - - def _compute_polygon_vertex(centroid, polygon_radius, angle): - start_point = [polygon_radius, 0] - return _apply_rotation(start_point, angle, centroid) - - def _get_angles(n_sides, rotation): - angles = [] - degrees = 360 / n_sides - # Start with the bottom left polygon vertex - current_angle = (270 - 0.5 * degrees) + rotation - for _ in range(0, n_sides): - angles.append(current_angle) - current_angle += degrees - if current_angle > 360: - current_angle -= 360 - return angles - - # 3. Variable Declarations - angles = _get_angles(n_sides, rotation) - - # 4. Compute Vertices - return [ - _compute_polygon_vertex(centroid, polygon_radius, angle) for angle in angles - ] - - -def _color_diff(color1, color2): - """ - Uses 1-norm distance to calculate difference between two values. - """ - if isinstance(color2, tuple): - return sum([abs(color1[i] - color2[i]) for i in range(0, len(color2))]) - else: - return abs(color1 - color2) diff --git a/PIL/ImageDraw2.py b/PIL/ImageDraw2.py deleted file mode 100644 index 1f63110..0000000 --- a/PIL/ImageDraw2.py +++ /dev/null @@ -1,179 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# WCK-style drawing interface operations -# -# History: -# 2003-12-07 fl created -# 2005-05-15 fl updated; added to PIL as ImageDraw2 -# 2005-05-15 fl added text support -# 2005-05-20 fl added arc/chord/pieslice support -# -# Copyright (c) 2003-2005 by Secret Labs AB -# Copyright (c) 2003-2005 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - - -""" -(Experimental) WCK-style drawing interface operations - -.. seealso:: :py:mod:`PIL.ImageDraw` -""" - - -from . import Image, ImageColor, ImageDraw, ImageFont, ImagePath - - -class Pen: - """Stores an outline color and width.""" - - def __init__(self, color, width=1, opacity=255): - self.color = ImageColor.getrgb(color) - self.width = width - - -class Brush: - """Stores a fill color""" - - def __init__(self, color, opacity=255): - self.color = ImageColor.getrgb(color) - - -class Font: - """Stores a TrueType font and color""" - - def __init__(self, color, file, size=12): - # FIXME: add support for bitmap fonts - self.color = ImageColor.getrgb(color) - self.font = ImageFont.truetype(file, size) - - -class Draw: - """ - (Experimental) WCK-style drawing interface - """ - - def __init__(self, image, size=None, color=None): - if not hasattr(image, "im"): - image = Image.new(image, size, color) - self.draw = ImageDraw.Draw(image) - self.image = image - self.transform = None - - def flush(self): - return self.image - - def render(self, op, xy, pen, brush=None): - # handle color arguments - outline = fill = None - width = 1 - if isinstance(pen, Pen): - outline = pen.color - width = pen.width - elif isinstance(brush, Pen): - outline = brush.color - width = brush.width - if isinstance(brush, Brush): - fill = brush.color - elif isinstance(pen, Brush): - fill = pen.color - # handle transformation - if self.transform: - xy = ImagePath.Path(xy) - xy.transform(self.transform) - # render the item - if op == "line": - self.draw.line(xy, fill=outline, width=width) - else: - getattr(self.draw, op)(xy, fill=fill, outline=outline) - - def settransform(self, offset): - """Sets a transformation offset.""" - (xoffset, yoffset) = offset - self.transform = (1, 0, xoffset, 0, 1, yoffset) - - def arc(self, xy, start, end, *options): - """ - Draws an arc (a portion of a circle outline) between the start and end - angles, inside the given bounding box. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.arc` - """ - self.render("arc", xy, start, end, *options) - - def chord(self, xy, start, end, *options): - """ - Same as :py:meth:`~PIL.ImageDraw2.Draw.arc`, but connects the end points - with a straight line. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.chord` - """ - self.render("chord", xy, start, end, *options) - - def ellipse(self, xy, *options): - """ - Draws an ellipse inside the given bounding box. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.ellipse` - """ - self.render("ellipse", xy, *options) - - def line(self, xy, *options): - """ - Draws a line between the coordinates in the ``xy`` list. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.line` - """ - self.render("line", xy, *options) - - def pieslice(self, xy, start, end, *options): - """ - Same as arc, but also draws straight lines between the end points and the - center of the bounding box. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.pieslice` - """ - self.render("pieslice", xy, start, end, *options) - - def polygon(self, xy, *options): - """ - Draws a polygon. - - The polygon outline consists of straight lines between the given - coordinates, plus a straight line between the last and the first - coordinate. - - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.polygon` - """ - self.render("polygon", xy, *options) - - def rectangle(self, xy, *options): - """ - Draws a rectangle. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.rectangle` - """ - self.render("rectangle", xy, *options) - - def text(self, xy, text, font): - """ - Draws the string at the given position. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.text` - """ - if self.transform: - xy = ImagePath.Path(xy) - xy.transform(self.transform) - self.draw.text(xy, text, font=font.font, fill=font.color) - - def textsize(self, text, font): - """ - Return the size of the given string, in pixels. - - .. seealso:: :py:meth:`PIL.ImageDraw.ImageDraw.textsize` - """ - return self.draw.textsize(text, font=font.font) diff --git a/PIL/ImageEnhance.py b/PIL/ImageEnhance.py deleted file mode 100644 index 3b79d5c..0000000 --- a/PIL/ImageEnhance.py +++ /dev/null @@ -1,103 +0,0 @@ -# -# 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")) diff --git a/PIL/ImageFile.py b/PIL/ImageFile.py deleted file mode 100644 index f2a55cb..0000000 --- a/PIL/ImageFile.py +++ /dev/null @@ -1,697 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# base class for image file handlers -# -# history: -# 1995-09-09 fl Created -# 1996-03-11 fl Fixed load mechanism. -# 1996-04-15 fl Added pcx/xbm decoders. -# 1996-04-30 fl Added encoders. -# 1996-12-14 fl Added load helpers -# 1997-01-11 fl Use encode_to_file where possible -# 1997-08-27 fl Flush output in _save -# 1998-03-05 fl Use memory mapping for some modes -# 1999-02-04 fl Use memory mapping also for "I;16" and "I;16B" -# 1999-05-31 fl Added image parser -# 2000-10-12 fl Set readonly flag on memory-mapped images -# 2002-03-20 fl Use better messages for common decoder errors -# 2003-04-21 fl Fall back on mmap/map_buffer if map is not available -# 2003-10-30 fl Added StubImageFile class -# 2004-02-25 fl Made incremental parser more robust -# -# Copyright (c) 1997-2004 by Secret Labs AB -# Copyright (c) 1995-2004 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import io -import struct -import sys -import warnings - -from . import Image -from ._util import isPath - -MAXBLOCK = 65536 - -SAFEBLOCK = 1024 * 1024 - -LOAD_TRUNCATED_IMAGES = False -"""Whether or not to load truncated image files. User code may change this.""" - -ERRORS = { - -1: "image buffer overrun error", - -2: "decoding error", - -3: "unknown error", - -8: "bad configuration", - -9: "out of memory error", -} -"""Dict of known error codes returned from :meth:`.PyDecoder.decode`.""" - - -# -# -------------------------------------------------------------------- -# Helpers - - -def raise_oserror(error): - try: - message = Image.core.getcodecstatus(error) - except AttributeError: - message = ERRORS.get(error) - if not message: - message = f"decoder error {error}" - raise OSError(message + " when reading image file") - - -def raise_ioerror(error): - warnings.warn( - "raise_ioerror is deprecated and will be removed in Pillow 9 (2022-01-02). " - "Use raise_oserror instead.", - DeprecationWarning, - ) - return raise_oserror(error) - - -def _tilesort(t): - # sort on offset - return t[2] - - -# -# -------------------------------------------------------------------- -# ImageFile base class - - -class ImageFile(Image.Image): - """Base class for image file format handlers.""" - - def __init__(self, fp=None, filename=None): - super().__init__() - - self._min_frame = 0 - - self.custom_mimetype = None - - self.tile = None - """ A list of tile descriptors, or ``None`` """ - - self.readonly = 1 # until we know better - - self.decoderconfig = () - self.decodermaxblock = MAXBLOCK - - if isPath(fp): - # filename - self.fp = open(fp, "rb") - self.filename = fp - self._exclusive_fp = True - else: - # stream - self.fp = fp - self.filename = filename - # can be overridden - self._exclusive_fp = None - - try: - try: - self._open() - except ( - IndexError, # end of data - TypeError, # end of data (ord) - KeyError, # unsupported mode - EOFError, # got header but not the first frame - struct.error, - ) as v: - raise SyntaxError(v) from v - - if not self.mode or self.size[0] <= 0: - raise SyntaxError("not identified by this driver") - except BaseException: - # close the file only if we have opened it this constructor - if self._exclusive_fp: - self.fp.close() - raise - - def get_format_mimetype(self): - if self.custom_mimetype: - return self.custom_mimetype - if self.format is not None: - return Image.MIME.get(self.format.upper()) - - def verify(self): - """Check file integrity""" - - # raise exception if something's wrong. must be called - # directly after open, and closes file when finished. - if self._exclusive_fp: - self.fp.close() - self.fp = None - - def load(self): - """Load image data based on tile list""" - - if self.tile is None: - raise OSError("cannot load this image") - - pixel = Image.Image.load(self) - if not self.tile: - return pixel - - self.map = None - use_mmap = self.filename and len(self.tile) == 1 - # As of pypy 2.1.0, memory mapping was failing here. - use_mmap = use_mmap and not hasattr(sys, "pypy_version_info") - - readonly = 0 - - # look for read/seek overrides - try: - read = self.load_read - # don't use mmap if there are custom read/seek functions - use_mmap = False - except AttributeError: - read = self.fp.read - - try: - seek = self.load_seek - use_mmap = False - except AttributeError: - seek = self.fp.seek - - if use_mmap: - # try memory mapping - decoder_name, extents, offset, args = self.tile[0] - if ( - decoder_name == "raw" - and len(args) >= 3 - and args[0] == self.mode - and args[0] in Image._MAPMODES - ): - try: - if hasattr(Image.core, "map"): - # use built-in mapper WIN32 only - self.map = Image.core.map(self.filename) - self.map.seek(offset) - self.im = self.map.readimage( - self.mode, self.size, args[1], args[2] - ) - else: - # use mmap, if possible - import mmap - - with open(self.filename) as fp: - self.map = mmap.mmap( - fp.fileno(), 0, access=mmap.ACCESS_READ - ) - self.im = Image.core.map_buffer( - self.map, self.size, decoder_name, offset, args - ) - readonly = 1 - # After trashing self.im, - # we might need to reload the palette data. - if self.palette: - self.palette.dirty = 1 - except (AttributeError, OSError, ImportError): - self.map = None - - self.load_prepare() - err_code = -3 # initialize to unknown error - if not self.map: - # sort tiles in file order - self.tile.sort(key=_tilesort) - - try: - # FIXME: This is a hack to handle TIFF's JpegTables tag. - prefix = self.tile_prefix - except AttributeError: - prefix = b"" - - for decoder_name, extents, offset, args in self.tile: - decoder = Image._getdecoder( - self.mode, decoder_name, args, self.decoderconfig - ) - try: - seek(offset) - decoder.setimage(self.im, extents) - if decoder.pulls_fd: - decoder.setfd(self.fp) - status, err_code = decoder.decode(b"") - else: - b = prefix - while True: - try: - s = read(self.decodermaxblock) - except (IndexError, struct.error) as e: - # truncated png/gif - if LOAD_TRUNCATED_IMAGES: - break - else: - raise OSError("image file is truncated") from e - - if not s: # truncated jpeg - if LOAD_TRUNCATED_IMAGES: - break - else: - raise OSError( - "image file is truncated " - f"({len(b)} bytes not processed)" - ) - - b = b + s - n, err_code = decoder.decode(b) - if n < 0: - break - b = b[n:] - finally: - # Need to cleanup here to prevent leaks - decoder.cleanup() - - self.tile = [] - self.readonly = readonly - - self.load_end() - - if self._exclusive_fp and self._close_exclusive_fp_after_loading: - self.fp.close() - self.fp = None - - if not self.map and not LOAD_TRUNCATED_IMAGES and err_code < 0: - # still raised if decoder fails to return anything - raise_oserror(err_code) - - return Image.Image.load(self) - - def load_prepare(self): - # create image memory if necessary - if not self.im or self.im.mode != self.mode or self.im.size != self.size: - self.im = Image.core.new(self.mode, self.size) - # create palette (optional) - if self.mode == "P": - Image.Image.load(self) - - def load_end(self): - # may be overridden - pass - - # may be defined for contained formats - # def load_seek(self, pos): - # pass - - # may be defined for blocked formats (e.g. PNG) - # def load_read(self, bytes): - # pass - - def _seek_check(self, frame): - if ( - frame < self._min_frame - # Only check upper limit on frames if additional seek operations - # are not required to do so - or ( - not (hasattr(self, "_n_frames") and self._n_frames is None) - and frame >= self.n_frames + self._min_frame - ) - ): - raise EOFError("attempt to seek outside sequence") - - return self.tell() != frame - - -class StubImageFile(ImageFile): - """ - Base class for stub image loaders. - - A stub loader is an image loader that can identify files of a - certain format, but relies on external code to load the file. - """ - - def _open(self): - raise NotImplementedError("StubImageFile subclass must implement _open") - - def load(self): - loader = self._load() - if loader is None: - raise OSError(f"cannot find loader for this {self.format} file") - image = loader.load(self) - assert image is not None - # become the other object (!) - self.__class__ = image.__class__ - self.__dict__ = image.__dict__ - - def _load(self): - """(Hook) Find actual image loader.""" - raise NotImplementedError("StubImageFile subclass must implement _load") - - -class Parser: - """ - Incremental image parser. This class implements the standard - feed/close consumer interface. - """ - - incremental = None - image = None - data = None - decoder = None - offset = 0 - finished = 0 - - def reset(self): - """ - (Consumer) Reset the parser. Note that you can only call this - method immediately after you've created a parser; parser - instances cannot be reused. - """ - assert self.data is None, "cannot reuse parsers" - - def feed(self, data): - """ - (Consumer) Feed data to the parser. - - :param data: A string buffer. - :exception OSError: If the parser failed to parse the image file. - """ - # collect data - - if self.finished: - return - - if self.data is None: - self.data = data - else: - self.data = self.data + data - - # parse what we have - if self.decoder: - - if self.offset > 0: - # skip header - skip = min(len(self.data), self.offset) - self.data = self.data[skip:] - self.offset = self.offset - skip - if self.offset > 0 or not self.data: - return - - n, e = self.decoder.decode(self.data) - - if n < 0: - # end of stream - self.data = None - self.finished = 1 - if e < 0: - # decoding error - self.image = None - raise_oserror(e) - else: - # end of image - return - self.data = self.data[n:] - - elif self.image: - - # if we end up here with no decoder, this file cannot - # be incrementally parsed. wait until we've gotten all - # available data - pass - - else: - - # attempt to open this file - try: - with io.BytesIO(self.data) as fp: - im = Image.open(fp) - except OSError: - # traceback.print_exc() - pass # not enough data - else: - flag = hasattr(im, "load_seek") or hasattr(im, "load_read") - if flag or len(im.tile) != 1: - # custom load code, or multiple tiles - self.decode = None - else: - # initialize decoder - im.load_prepare() - d, e, o, a = im.tile[0] - im.tile = [] - self.decoder = Image._getdecoder(im.mode, d, a, im.decoderconfig) - self.decoder.setimage(im.im, e) - - # calculate decoder offset - self.offset = o - if self.offset <= len(self.data): - self.data = self.data[self.offset :] - self.offset = 0 - - self.image = im - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def close(self): - """ - (Consumer) Close the stream. - - :returns: An image object. - :exception OSError: If the parser failed to parse the image file either - because it cannot be identified or cannot be - decoded. - """ - # finish decoding - if self.decoder: - # get rid of what's left in the buffers - self.feed(b"") - self.data = self.decoder = None - if not self.finished: - raise OSError("image was incomplete") - if not self.image: - raise OSError("cannot parse this image") - if self.data: - # incremental parsing not possible; reopen the file - # not that we have all data - with io.BytesIO(self.data) as fp: - try: - self.image = Image.open(fp) - finally: - self.image.load() - return self.image - - -# -------------------------------------------------------------------- - - -def _save(im, fp, tile, bufsize=0): - """Helper to save image based on tile list - - :param im: Image object. - :param fp: File object. - :param tile: Tile list. - :param bufsize: Optional buffer size - """ - - im.load() - if not hasattr(im, "encoderconfig"): - im.encoderconfig = () - tile.sort(key=_tilesort) - # FIXME: make MAXBLOCK a configuration parameter - # It would be great if we could have the encoder specify what it needs - # But, it would need at least the image size in most cases. RawEncode is - # a tricky case. - bufsize = max(MAXBLOCK, bufsize, im.size[0] * 4) # see RawEncode.c - if fp == sys.stdout: - fp.flush() - return - try: - fh = fp.fileno() - fp.flush() - except (AttributeError, io.UnsupportedOperation) as exc: - # compress to Python file-compatible object - for e, b, o, a in tile: - e = Image._getencoder(im.mode, e, a, im.encoderconfig) - if o > 0: - fp.seek(o) - e.setimage(im.im, b) - if e.pushes_fd: - e.setfd(fp) - l, s = e.encode_to_pyfd() - else: - while True: - l, s, d = e.encode(bufsize) - fp.write(d) - if s: - break - if s < 0: - raise OSError(f"encoder error {s} when writing image file") from exc - e.cleanup() - else: - # slight speedup: compress to real file object - for e, b, o, a in tile: - e = Image._getencoder(im.mode, e, a, im.encoderconfig) - if o > 0: - fp.seek(o) - e.setimage(im.im, b) - if e.pushes_fd: - e.setfd(fp) - l, s = e.encode_to_pyfd() - else: - s = e.encode_to_file(fh, bufsize) - if s < 0: - raise OSError(f"encoder error {s} when writing image file") - e.cleanup() - if hasattr(fp, "flush"): - fp.flush() - - -def _safe_read(fp, size): - """ - Reads large blocks in a safe way. Unlike fp.read(n), this function - doesn't trust the user. If the requested size is larger than - SAFEBLOCK, the file is read block by block. - - :param fp: File handle. Must implement a read method. - :param size: Number of bytes to read. - :returns: A string containing up to size bytes of data. - """ - if size <= 0: - return b"" - if size <= SAFEBLOCK: - return fp.read(size) - data = [] - while size > 0: - block = fp.read(min(size, SAFEBLOCK)) - if not block: - break - data.append(block) - size -= len(block) - return b"".join(data) - - -class PyCodecState: - def __init__(self): - self.xsize = 0 - self.ysize = 0 - self.xoff = 0 - self.yoff = 0 - - def extents(self): - return (self.xoff, self.yoff, self.xoff + self.xsize, self.yoff + self.ysize) - - -class PyDecoder: - """ - Python implementation of a format decoder. Override this class and - add the decoding logic in the :meth:`decode` method. - - See :ref:`Writing Your Own File Decoder in Python` - """ - - _pulls_fd = False - - def __init__(self, mode, *args): - self.im = None - self.state = PyCodecState() - self.fd = None - self.mode = mode - self.init(args) - - def init(self, args): - """ - Override to perform decoder specific initialization - - :param args: Array of args items from the tile entry - :returns: None - """ - self.args = args - - @property - def pulls_fd(self): - return self._pulls_fd - - def decode(self, buffer): - """ - Override to perform the decoding process. - - :param buffer: A bytes object with the data to be decoded. - :returns: A tuple of ``(bytes consumed, errcode)``. - If finished with decoding return <0 for the bytes consumed. - Err codes are from :data:`.ImageFile.ERRORS`. - """ - raise NotImplementedError() - - def cleanup(self): - """ - Override to perform decoder specific cleanup - - :returns: None - """ - pass - - def setfd(self, fd): - """ - Called from ImageFile to set the python file-like object - - :param fd: A python file-like object - :returns: None - """ - self.fd = fd - - def setimage(self, im, extents=None): - """ - Called from ImageFile to set the core output image for the decoder - - :param im: A core image object - :param extents: a 4 tuple of (x0, y0, x1, y1) defining the rectangle - for this tile - :returns: None - """ - - # following c code - self.im = im - - if extents: - (x0, y0, x1, y1) = extents - else: - (x0, y0, x1, y1) = (0, 0, 0, 0) - - if x0 == 0 and x1 == 0: - self.state.xsize, self.state.ysize = self.im.size - else: - self.state.xoff = x0 - self.state.yoff = y0 - self.state.xsize = x1 - x0 - self.state.ysize = y1 - y0 - - if self.state.xsize <= 0 or self.state.ysize <= 0: - raise ValueError("Size cannot be negative") - - if ( - self.state.xsize + self.state.xoff > self.im.size[0] - or self.state.ysize + self.state.yoff > self.im.size[1] - ): - raise ValueError("Tile cannot extend outside image") - - def set_as_raw(self, data, rawmode=None): - """ - Convenience method to set the internal image from a stream of raw data - - :param data: Bytes to be set - :param rawmode: The rawmode to be used for the decoder. - If not specified, it will default to the mode of the image - :returns: None - """ - - if not rawmode: - rawmode = self.mode - d = Image._getdecoder(self.mode, "raw", (rawmode)) - d.setimage(self.im, self.state.extents()) - s = d.decode(data) - - if s[0] >= 0: - raise ValueError("not enough image data") - if s[1] != 0: - raise ValueError("cannot decode image data") diff --git a/PIL/ImageFilter.py b/PIL/ImageFilter.py deleted file mode 100644 index 9ca17d9..0000000 --- a/PIL/ImageFilter.py +++ /dev/null @@ -1,534 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# standard filters -# -# History: -# 1995-11-27 fl Created -# 2002-06-08 fl Added rank and mode filters -# 2003-09-15 fl Fixed rank calculation in rank filter; added expand call -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-2002 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -import functools - -try: - import numpy -except ImportError: # pragma: no cover - numpy = None - - -class Filter: - pass - - -class MultibandFilter(Filter): - pass - - -class BuiltinFilter(MultibandFilter): - def filter(self, image): - if image.mode == "P": - raise ValueError("cannot filter palette images") - return image.filter(*self.filterargs) - - -class Kernel(BuiltinFilter): - """ - Create a convolution kernel. The current version only - supports 3x3 and 5x5 integer and floating point kernels. - - In the current version, kernels can only be applied to - "L" and "RGB" images. - - :param size: Kernel size, given as (width, height). In the current - version, this must be (3,3) or (5,5). - :param kernel: A sequence containing kernel weights. - :param scale: Scale factor. If given, the result for each pixel is - divided by this value. The default is the sum of the - kernel weights. - :param offset: Offset. If given, this value is added to the result, - after it has been divided by the scale factor. - """ - - name = "Kernel" - - def __init__(self, size, kernel, scale=None, offset=0): - if scale is None: - # default scale is sum of kernel - scale = functools.reduce(lambda a, b: a + b, kernel) - if size[0] * size[1] != len(kernel): - raise ValueError("not enough coefficients in kernel") - self.filterargs = size, scale, offset, kernel - - -class RankFilter(Filter): - """ - Create a rank filter. The rank filter sorts all pixels in - a window of the given size, and returns the ``rank``'th value. - - :param size: The kernel size, in pixels. - :param rank: What pixel value to pick. Use 0 for a min filter, - ``size * size / 2`` for a median filter, ``size * size - 1`` - for a max filter, etc. - """ - - name = "Rank" - - def __init__(self, size, rank): - self.size = size - self.rank = rank - - def filter(self, image): - if image.mode == "P": - raise ValueError("cannot filter palette images") - image = image.expand(self.size // 2, self.size // 2) - return image.rankfilter(self.size, self.rank) - - -class MedianFilter(RankFilter): - """ - Create a median filter. Picks the median pixel value in a window with the - given size. - - :param size: The kernel size, in pixels. - """ - - name = "Median" - - def __init__(self, size=3): - self.size = size - self.rank = size * size // 2 - - -class MinFilter(RankFilter): - """ - Create a min filter. Picks the lowest pixel value in a window with the - given size. - - :param size: The kernel size, in pixels. - """ - - name = "Min" - - def __init__(self, size=3): - self.size = size - self.rank = 0 - - -class MaxFilter(RankFilter): - """ - Create a max filter. Picks the largest pixel value in a window with the - given size. - - :param size: The kernel size, in pixels. - """ - - name = "Max" - - def __init__(self, size=3): - self.size = size - self.rank = size * size - 1 - - -class ModeFilter(Filter): - """ - Create a mode filter. Picks the most frequent pixel value in a box with the - given size. Pixel values that occur only once or twice are ignored; if no - pixel value occurs more than twice, the original pixel value is preserved. - - :param size: The kernel size, in pixels. - """ - - name = "Mode" - - def __init__(self, size=3): - self.size = size - - def filter(self, image): - return image.modefilter(self.size) - - -class GaussianBlur(MultibandFilter): - """Gaussian blur filter. - - :param radius: Blur radius. - """ - - name = "GaussianBlur" - - def __init__(self, radius=2): - self.radius = radius - - def filter(self, image): - return image.gaussian_blur(self.radius) - - -class BoxBlur(MultibandFilter): - """Blurs the image by setting each pixel to the average value of the pixels - in a square box extending radius pixels in each direction. - Supports float radius of arbitrary size. Uses an optimized implementation - which runs in linear time relative to the size of the image - for any radius value. - - :param radius: Size of the box in one direction. Radius 0 does not blur, - returns an identical image. Radius 1 takes 1 pixel - in each direction, i.e. 9 pixels in total. - """ - - name = "BoxBlur" - - def __init__(self, radius): - self.radius = radius - - def filter(self, image): - return image.box_blur(self.radius) - - -class UnsharpMask(MultibandFilter): - """Unsharp mask filter. - - See Wikipedia's entry on `digital unsharp masking`_ for an explanation of - the parameters. - - :param radius: Blur Radius - :param percent: Unsharp strength, in percent - :param threshold: Threshold controls the minimum brightness change that - will be sharpened - - .. _digital unsharp masking: https://en.wikipedia.org/wiki/Unsharp_masking#Digital_unsharp_masking - - """ # noqa: E501 - - name = "UnsharpMask" - - def __init__(self, radius=2, percent=150, threshold=3): - self.radius = radius - self.percent = percent - self.threshold = threshold - - def filter(self, image): - return image.unsharp_mask(self.radius, self.percent, self.threshold) - - -class BLUR(BuiltinFilter): - name = "Blur" - # fmt: off - filterargs = (5, 5), 16, 0, ( - 1, 1, 1, 1, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 0, 0, 0, 1, - 1, 1, 1, 1, 1, - ) - # fmt: on - - -class CONTOUR(BuiltinFilter): - name = "Contour" - # fmt: off - filterargs = (3, 3), 1, 255, ( - -1, -1, -1, - -1, 8, -1, - -1, -1, -1, - ) - # fmt: on - - -class DETAIL(BuiltinFilter): - name = "Detail" - # fmt: off - filterargs = (3, 3), 6, 0, ( - 0, -1, 0, - -1, 10, -1, - 0, -1, 0, - ) - # fmt: on - - -class EDGE_ENHANCE(BuiltinFilter): - name = "Edge-enhance" - # fmt: off - filterargs = (3, 3), 2, 0, ( - -1, -1, -1, - -1, 10, -1, - -1, -1, -1, - ) - # fmt: on - - -class EDGE_ENHANCE_MORE(BuiltinFilter): - name = "Edge-enhance More" - # fmt: off - filterargs = (3, 3), 1, 0, ( - -1, -1, -1, - -1, 9, -1, - -1, -1, -1, - ) - # fmt: on - - -class EMBOSS(BuiltinFilter): - name = "Emboss" - # fmt: off - filterargs = (3, 3), 1, 128, ( - -1, 0, 0, - 0, 1, 0, - 0, 0, 0, - ) - # fmt: on - - -class FIND_EDGES(BuiltinFilter): - name = "Find Edges" - # fmt: off - filterargs = (3, 3), 1, 0, ( - -1, -1, -1, - -1, 8, -1, - -1, -1, -1, - ) - # fmt: on - - -class SHARPEN(BuiltinFilter): - name = "Sharpen" - # fmt: off - filterargs = (3, 3), 16, 0, ( - -2, -2, -2, - -2, 32, -2, - -2, -2, -2, - ) - # fmt: on - - -class SMOOTH(BuiltinFilter): - name = "Smooth" - # fmt: off - filterargs = (3, 3), 13, 0, ( - 1, 1, 1, - 1, 5, 1, - 1, 1, 1, - ) - # fmt: on - - -class SMOOTH_MORE(BuiltinFilter): - name = "Smooth More" - # fmt: off - filterargs = (5, 5), 100, 0, ( - 1, 1, 1, 1, 1, - 1, 5, 5, 5, 1, - 1, 5, 44, 5, 1, - 1, 5, 5, 5, 1, - 1, 1, 1, 1, 1, - ) - # fmt: on - - -class Color3DLUT(MultibandFilter): - """Three-dimensional color lookup table. - - Transforms 3-channel pixels using the values of the channels as coordinates - in the 3D lookup table and interpolating the nearest elements. - - This method allows you to apply almost any color transformation - in constant time by using pre-calculated decimated tables. - - .. versionadded:: 5.2.0 - - :param size: Size of the table. One int or tuple of (int, int, int). - Minimal size in any dimension is 2, maximum is 65. - :param table: Flat lookup table. A list of ``channels * size**3`` - float elements or a list of ``size**3`` channels-sized - tuples with floats. Channels are changed first, - then first dimension, then second, then third. - Value 0.0 corresponds lowest value of output, 1.0 highest. - :param channels: Number of channels in the table. Could be 3 or 4. - Default is 3. - :param target_mode: A mode for the result image. Should have not less - than ``channels`` channels. Default is ``None``, - which means that mode wouldn't be changed. - """ - - name = "Color 3D LUT" - - def __init__(self, size, table, channels=3, target_mode=None, **kwargs): - if channels not in (3, 4): - raise ValueError("Only 3 or 4 output channels are supported") - self.size = size = self._check_size(size) - self.channels = channels - self.mode = target_mode - - # Hidden flag `_copy_table=False` could be used to avoid extra copying - # of the table if the table is specially made for the constructor. - copy_table = kwargs.get("_copy_table", True) - items = size[0] * size[1] * size[2] - wrong_size = False - - if numpy and isinstance(table, numpy.ndarray): - if copy_table: - table = table.copy() - - if table.shape in [ - (items * channels,), - (items, channels), - (size[2], size[1], size[0], channels), - ]: - table = table.reshape(items * channels) - else: - wrong_size = True - - else: - if copy_table: - table = list(table) - - # Convert to a flat list - if table and isinstance(table[0], (list, tuple)): - table, raw_table = [], table - for pixel in raw_table: - if len(pixel) != channels: - raise ValueError( - "The elements of the table should " - "have a length of {}.".format(channels) - ) - table.extend(pixel) - - if wrong_size or len(table) != items * channels: - raise ValueError( - "The table should have either channels * size**3 float items " - "or size**3 items of channels-sized tuples with floats. " - f"Table should be: {channels}x{size[0]}x{size[1]}x{size[2]}. " - f"Actual length: {len(table)}" - ) - self.table = table - - @staticmethod - def _check_size(size): - try: - _, _, _ = size - except ValueError as e: - raise ValueError( - "Size should be either an integer or a tuple of three integers." - ) from e - except TypeError: - size = (size, size, size) - size = [int(x) for x in size] - for size1D in size: - if not 2 <= size1D <= 65: - raise ValueError("Size should be in [2, 65] range.") - return size - - @classmethod - def generate(cls, size, callback, channels=3, target_mode=None): - """Generates new LUT using provided callback. - - :param size: Size of the table. Passed to the constructor. - :param callback: Function with three parameters which correspond - three color channels. Will be called ``size**3`` - times with values from 0.0 to 1.0 and should return - a tuple with ``channels`` elements. - :param channels: The number of channels which should return callback. - :param target_mode: Passed to the constructor of the resulting - lookup table. - """ - size1D, size2D, size3D = cls._check_size(size) - if channels not in (3, 4): - raise ValueError("Only 3 or 4 output channels are supported") - - table = [0] * (size1D * size2D * size3D * channels) - idx_out = 0 - for b in range(size3D): - for g in range(size2D): - for r in range(size1D): - table[idx_out : idx_out + channels] = callback( - r / (size1D - 1), g / (size2D - 1), b / (size3D - 1) - ) - idx_out += channels - - return cls( - (size1D, size2D, size3D), - table, - channels=channels, - target_mode=target_mode, - _copy_table=False, - ) - - def transform(self, callback, with_normals=False, channels=None, target_mode=None): - """Transforms the table values using provided callback and returns - a new LUT with altered values. - - :param callback: A function which takes old lookup table values - and returns a new set of values. The number - of arguments which function should take is - ``self.channels`` or ``3 + self.channels`` - if ``with_normals`` flag is set. - Should return a tuple of ``self.channels`` or - ``channels`` elements if it is set. - :param with_normals: If true, ``callback`` will be called with - coordinates in the color cube as the first - three arguments. Otherwise, ``callback`` - will be called only with actual color values. - :param channels: The number of channels in the resulting lookup table. - :param target_mode: Passed to the constructor of the resulting - lookup table. - """ - if channels not in (None, 3, 4): - raise ValueError("Only 3 or 4 output channels are supported") - ch_in = self.channels - ch_out = channels or ch_in - size1D, size2D, size3D = self.size - - table = [0] * (size1D * size2D * size3D * ch_out) - idx_in = 0 - idx_out = 0 - for b in range(size3D): - for g in range(size2D): - for r in range(size1D): - values = self.table[idx_in : idx_in + ch_in] - if with_normals: - values = callback( - r / (size1D - 1), - g / (size2D - 1), - b / (size3D - 1), - *values, - ) - else: - values = callback(*values) - table[idx_out : idx_out + ch_out] = values - idx_in += ch_in - idx_out += ch_out - - return type(self)( - self.size, - table, - channels=ch_out, - target_mode=target_mode or self.mode, - _copy_table=False, - ) - - def __repr__(self): - r = [ - f"{self.__class__.__name__} from {self.table.__class__.__name__}", - "size={:d}x{:d}x{:d}".format(*self.size), - f"channels={self.channels:d}", - ] - if self.mode: - r.append(f"target_mode={self.mode}") - return "<{}>".format(" ".join(r)) - - def filter(self, image): - from . import Image - - return image.color_lut_3d( - self.mode or image.mode, - Image.LINEAR, - self.channels, - self.size[0], - self.size[1], - self.size[2], - self.table, - ) diff --git a/PIL/ImageFont.py b/PIL/ImageFont.py deleted file mode 100644 index c48d898..0000000 --- a/PIL/ImageFont.py +++ /dev/null @@ -1,1057 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PIL raster font management -# -# History: -# 1996-08-07 fl created (experimental) -# 1997-08-25 fl minor adjustments to handle fonts from pilfont 0.3 -# 1999-02-06 fl rewrote most font management stuff in C -# 1999-03-17 fl take pth files into account in load_path (from Richard Jones) -# 2001-02-17 fl added freetype support -# 2001-05-09 fl added TransposedFont wrapper class -# 2002-03-04 fl make sure we have a "L" or "1" font -# 2002-12-04 fl skip non-directory entries in the system path -# 2003-04-29 fl add embedded default font -# 2003-09-27 fl added support for truetype charmap encodings -# -# Todo: -# Adapt to PILFONT2 format (16-bit fonts, compressed, single file) -# -# Copyright (c) 1997-2003 by Secret Labs AB -# Copyright (c) 1996-2003 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import base64 -import os -import sys -import warnings -from io import BytesIO - -from . import Image, features -from ._util import isDirectory, isPath - -LAYOUT_BASIC = 0 -LAYOUT_RAQM = 1 - - -class _imagingft_not_installed: - # module placeholder - def __getattr__(self, id): - raise ImportError("The _imagingft C module is not installed") - - -try: - from . import _imagingft as core -except ImportError: - core = _imagingft_not_installed() - - -# FIXME: add support for pilfont2 format (see FontFile.py) - -# -------------------------------------------------------------------- -# Font metrics format: -# "PILfont" LF -# fontdescriptor LF -# (optional) key=value... LF -# "DATA" LF -# binary data: 256*10*2 bytes (dx, dy, dstbox, srcbox) -# -# To place a character, cut out srcbox and paste at dstbox, -# relative to the character position. Then move the character -# position according to dx, dy. -# -------------------------------------------------------------------- - - -class ImageFont: - "PIL font wrapper" - - def _load_pilfont(self, filename): - - with open(filename, "rb") as fp: - image = None - for ext in (".png", ".gif", ".pbm"): - if image: - image.close() - try: - fullname = os.path.splitext(filename)[0] + ext - image = Image.open(fullname) - except Exception: - pass - else: - if image and image.mode in ("1", "L"): - break - else: - if image: - image.close() - raise OSError("cannot find glyph data file") - - self.file = fullname - - self._load_pilfont_data(fp, image) - image.close() - - def _load_pilfont_data(self, file, image): - - # read PILfont header - if file.readline() != b"PILfont\n": - raise SyntaxError("Not a PILfont file") - file.readline().split(b";") - self.info = [] # FIXME: should be a dictionary - while True: - s = file.readline() - if not s or s == b"DATA\n": - break - self.info.append(s) - - # read PILfont metrics - data = file.read(256 * 20) - - # check image - if image.mode not in ("1", "L"): - raise TypeError("invalid font image mode") - - image.load() - - self.font = Image.core.font(image.im, data) - - def getsize(self, text, *args, **kwargs): - """ - Returns width and height (in pixels) of given text. - - :param text: Text to measure. - - :return: (width, height) - """ - return self.font.getsize(text) - - def getmask(self, text, mode="", *args, **kwargs): - """ - Create a bitmap for the text. - - If the font uses antialiasing, the bitmap should have mode ``L`` and use a - maximum value of 255. Otherwise, it should have mode ``1``. - - :param text: Text to render. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - .. versionadded:: 1.1.5 - - :return: An internal PIL storage memory instance as defined by the - :py:mod:`PIL.Image.core` interface module. - """ - return self.font.getmask(text, mode) - - -## -# Wrapper for FreeType fonts. Application code should use the -# truetype factory function to create font objects. - - -class FreeTypeFont: - "FreeType font wrapper (requires _imagingft service)" - - def __init__(self, font=None, size=10, index=0, encoding="", layout_engine=None): - # FIXME: use service provider instead - - self.path = font - self.size = size - self.index = index - self.encoding = encoding - - try: - from packaging.version import parse as parse_version - except ImportError: - pass - else: - freetype_version = parse_version(features.version_module("freetype2")) - if freetype_version < parse_version("2.8"): - warnings.warn( - "Support for FreeType 2.7 is deprecated and will be removed" - " in Pillow 9 (2022-01-02). Please upgrade to FreeType 2.8 " - "or newer, preferably FreeType 2.10.4 which fixes " - "CVE-2020-15999.", - DeprecationWarning, - ) - - if layout_engine not in (LAYOUT_BASIC, LAYOUT_RAQM): - layout_engine = LAYOUT_BASIC - if core.HAVE_RAQM: - layout_engine = LAYOUT_RAQM - elif layout_engine == LAYOUT_RAQM and not core.HAVE_RAQM: - layout_engine = LAYOUT_BASIC - - self.layout_engine = layout_engine - - def load_from_bytes(f): - self.font_bytes = f.read() - self.font = core.getfont( - "", size, index, encoding, self.font_bytes, layout_engine - ) - - if isPath(font): - if sys.platform == "win32": - font_bytes_path = font if isinstance(font, bytes) else font.encode() - try: - font_bytes_path.decode("ascii") - except UnicodeDecodeError: - # FreeType cannot load fonts with non-ASCII characters on Windows - # So load it into memory first - with open(font, "rb") as f: - load_from_bytes(f) - return - self.font = core.getfont( - font, size, index, encoding, layout_engine=layout_engine - ) - else: - load_from_bytes(font) - - def _multiline_split(self, text): - split_character = "\n" if isinstance(text, str) else b"\n" - return text.split(split_character) - - def getname(self): - """ - :return: A tuple of the font family (e.g. Helvetica) and the font style - (e.g. Bold) - """ - return self.font.family, self.font.style - - def getmetrics(self): - """ - :return: A tuple of the font ascent (the distance from the baseline to - the highest outline point) and descent (the distance from the - baseline to the lowest outline point, a negative value) - """ - return self.font.ascent, self.font.descent - - def getlength(self, text, mode="", direction=None, features=None, language=None): - """ - Returns length (in pixels with 1/64 precision) of given text when rendered - in font with provided direction, features, and language. - - This is the amount by which following text should be offset. - Text bounding box may extend past the length in some fonts, - e.g. when using italics or accents. - - The result is returned as a float; it is a whole number if using basic layout. - - Note that the sum of two lengths may not equal the length of a concatenated - string due to kerning. If you need to adjust for kerning, include the following - character and subtract its length. - - For example, instead of - - .. code-block:: python - - hello = font.getlength("Hello") - world = font.getlength("World") - hello_world = hello + world # not adjusted for kerning - assert hello_world == font.getlength("HelloWorld") # may fail - - use - - .. code-block:: python - - hello = font.getlength("HelloW") - font.getlength("W") # adjusted for kerning - world = font.getlength("World") - hello_world = hello + world # adjusted for kerning - assert hello_world == font.getlength("HelloWorld") # True - - or disable kerning with (requires libraqm) - - .. code-block:: python - - hello = draw.textlength("Hello", font, features=["-kern"]) - world = draw.textlength("World", font, features=["-kern"]) - hello_world = hello + world # kerning is disabled, no need to adjust - assert hello_world == draw.textlength("HelloWorld", font, features=["-kern"]) - - .. versionadded:: 8.0.0 - - :param text: Text to measure. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - :return: Width for horizontal, height for vertical text. - """ - return self.font.getlength(text, mode, direction, features, language) / 64 - - def getbbox( - self, - text, - mode="", - direction=None, - features=None, - language=None, - stroke_width=0, - anchor=None, - ): - """ - Returns bounding box (in pixels) of given text relative to given anchor - when rendered in font with provided direction, features, and language. - - Use :py:meth:`getlength()` to get the offset of following text with - 1/64 pixel precision. The bounding box includes extra margins for - some fonts, e.g. italics or accents. - - .. versionadded:: 8.0.0 - - :param text: Text to render. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - :param stroke_width: The width of the text stroke. - - :param anchor: The text anchor alignment. Determines the relative location of - the anchor to the text. The default alignment is top left. - See :ref:`text-anchors` for valid values. - - :return: ``(left, top, right, bottom)`` bounding box - """ - size, offset = self.font.getsize( - text, mode, direction, features, language, anchor - ) - left, top = offset[0] - stroke_width, offset[1] - stroke_width - width, height = size[0] + 2 * stroke_width, size[1] + 2 * stroke_width - return left, top, left + width, top + height - - def getsize( - self, text, direction=None, features=None, language=None, stroke_width=0 - ): - """ - Returns width and height (in pixels) of given text if rendered in font with - provided direction, features, and language. - - Use :py:meth:`getlength()` to measure the offset of following text with - 1/64 pixel precision. - Use :py:meth:`getbbox()` to get the exact bounding box based on an anchor. - - .. note:: For historical reasons this function measures text height from - the ascender line instead of the top, see :ref:`text-anchors`. - If you wish to measure text height from the top, it is recommended - to use the bottom value of :meth:`getbbox` with ``anchor='lt'`` instead. - - :param text: Text to measure. - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - .. versionadded:: 6.0.0 - - :param stroke_width: The width of the text stroke. - - .. versionadded:: 6.2.0 - - :return: (width, height) - """ - # vertical offset is added for historical reasons - # see https://github.com/python-pillow/Pillow/pull/4910#discussion_r486682929 - size, offset = self.font.getsize(text, "L", direction, features, language) - return ( - size[0] + stroke_width * 2, - size[1] + stroke_width * 2 + offset[1], - ) - - def getsize_multiline( - self, - text, - direction=None, - spacing=4, - features=None, - language=None, - stroke_width=0, - ): - """ - Returns width and height (in pixels) of given text if rendered in font - with provided direction, features, and language, while respecting - newline characters. - - :param text: Text to measure. - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - :param spacing: The vertical gap between lines, defaulting to 4 pixels. - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - .. versionadded:: 6.0.0 - - :param stroke_width: The width of the text stroke. - - .. versionadded:: 6.2.0 - - :return: (width, height) - """ - max_width = 0 - lines = self._multiline_split(text) - line_spacing = self.getsize("A", stroke_width=stroke_width)[1] + spacing - for line in lines: - line_width, line_height = self.getsize( - line, direction, features, language, stroke_width - ) - max_width = max(max_width, line_width) - - return max_width, len(lines) * line_spacing - spacing - - def getoffset(self, text): - """ - Returns the offset of given text. This is the gap between the - starting coordinate and the first marking. Note that this gap is - included in the result of :py:func:`~PIL.ImageFont.FreeTypeFont.getsize`. - - :param text: Text to measure. - - :return: A tuple of the x and y offset - """ - return self.font.getsize(text)[1] - - def getmask( - self, - text, - mode="", - direction=None, - features=None, - language=None, - stroke_width=0, - anchor=None, - ink=0, - ): - """ - Create a bitmap for the text. - - If the font uses antialiasing, the bitmap should have mode ``L`` and use a - maximum value of 255. If the font has embedded color data, the bitmap - should have mode ``RGBA``. Otherwise, it should have mode ``1``. - - :param text: Text to render. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - .. versionadded:: 1.1.5 - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - .. versionadded:: 6.0.0 - - :param stroke_width: The width of the text stroke. - - .. versionadded:: 6.2.0 - - :param anchor: The text anchor alignment. Determines the relative location of - the anchor to the text. The default alignment is top left. - See :ref:`text-anchors` for valid values. - - .. versionadded:: 8.0.0 - - :param ink: Foreground ink for rendering in RGBA mode. - - .. versionadded:: 8.0.0 - - :return: An internal PIL storage memory instance as defined by the - :py:mod:`PIL.Image.core` interface module. - """ - return self.getmask2( - text, - mode, - direction=direction, - features=features, - language=language, - stroke_width=stroke_width, - anchor=anchor, - ink=ink, - )[0] - - def getmask2( - self, - text, - mode="", - fill=Image.core.fill, - direction=None, - features=None, - language=None, - stroke_width=0, - anchor=None, - ink=0, - *args, - **kwargs, - ): - """ - Create a bitmap for the text. - - If the font uses antialiasing, the bitmap should have mode ``L`` and use a - maximum value of 255. If the font has embedded color data, the bitmap - should have mode ``RGBA``. Otherwise, it should have mode ``1``. - - :param text: Text to render. - :param mode: Used by some graphics drivers to indicate what mode the - driver prefers; if empty, the renderer may return either - mode. Note that the mode is always a string, to simplify - C-level implementations. - - .. versionadded:: 1.1.5 - - :param direction: Direction of the text. It can be 'rtl' (right to - left), 'ltr' (left to right) or 'ttb' (top to bottom). - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param features: A list of OpenType font features to be used during text - layout. This is usually used to turn on optional - font features that are not enabled by default, - for example 'dlig' or 'ss01', but can be also - used to turn off default font features for - example '-liga' to disable ligatures or '-kern' - to disable kerning. To get all supported - features, see - https://docs.microsoft.com/en-us/typography/opentype/spec/featurelist - Requires libraqm. - - .. versionadded:: 4.2.0 - - :param language: Language of the text. Different languages may use - different glyph shapes or ligatures. This parameter tells - the font which language the text is in, and to apply the - correct substitutions as appropriate, if available. - It should be a `BCP 47 language code - `_ - Requires libraqm. - - .. versionadded:: 6.0.0 - - :param stroke_width: The width of the text stroke. - - .. versionadded:: 6.2.0 - - :param anchor: The text anchor alignment. Determines the relative location of - the anchor to the text. The default alignment is top left. - See :ref:`text-anchors` for valid values. - - .. versionadded:: 8.0.0 - - :param ink: Foreground ink for rendering in RGBA mode. - - .. versionadded:: 8.0.0 - - :return: A tuple of an internal PIL storage memory instance as defined by the - :py:mod:`PIL.Image.core` interface module, and the text offset, the - gap between the starting coordinate and the first marking - """ - size, offset = self.font.getsize( - text, mode, direction, features, language, anchor - ) - size = size[0] + stroke_width * 2, size[1] + stroke_width * 2 - offset = offset[0] - stroke_width, offset[1] - stroke_width - im = fill("RGBA" if mode == "RGBA" else "L", size, 0) - self.font.render( - text, im.id, mode, direction, features, language, stroke_width, ink - ) - return im, offset - - def font_variant( - self, font=None, size=None, index=None, encoding=None, layout_engine=None - ): - """ - Create a copy of this FreeTypeFont object, - using any specified arguments to override the settings. - - Parameters are identical to the parameters used to initialize this - object. - - :return: A FreeTypeFont object. - """ - return FreeTypeFont( - font=self.path if font is None else font, - size=self.size if size is None else size, - index=self.index if index is None else index, - encoding=self.encoding if encoding is None else encoding, - layout_engine=layout_engine or self.layout_engine, - ) - - def get_variation_names(self): - """ - :returns: A list of the named styles in a variation font. - :exception OSError: If the font is not a variation font. - """ - try: - names = self.font.getvarnames() - except AttributeError as e: - raise NotImplementedError("FreeType 2.9.1 or greater is required") from e - return [name.replace(b"\x00", b"") for name in names] - - def set_variation_by_name(self, name): - """ - :param name: The name of the style. - :exception OSError: If the font is not a variation font. - """ - names = self.get_variation_names() - if not isinstance(name, bytes): - name = name.encode() - index = names.index(name) - - if index == getattr(self, "_last_variation_index", None): - # When the same name is set twice in a row, - # there is an 'unknown freetype error' - # https://savannah.nongnu.org/bugs/?56186 - return - self._last_variation_index = index - - self.font.setvarname(index) - - def get_variation_axes(self): - """ - :returns: A list of the axes in a variation font. - :exception OSError: If the font is not a variation font. - """ - try: - axes = self.font.getvaraxes() - except AttributeError as e: - raise NotImplementedError("FreeType 2.9.1 or greater is required") from e - for axis in axes: - axis["name"] = axis["name"].replace(b"\x00", b"") - return axes - - def set_variation_by_axes(self, axes): - """ - :param axes: A list of values for each axis. - :exception OSError: If the font is not a variation font. - """ - try: - self.font.setvaraxes(axes) - except AttributeError as e: - raise NotImplementedError("FreeType 2.9.1 or greater is required") from e - - -class TransposedFont: - "Wrapper for writing rotated or mirrored text" - - def __init__(self, font, orientation=None): - """ - Wrapper that creates a transposed font from any existing font - object. - - :param font: A font object. - :param orientation: An optional orientation. If given, this should - be one of Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM, - Image.ROTATE_90, Image.ROTATE_180, or Image.ROTATE_270. - """ - self.font = font - self.orientation = orientation # any 'transpose' argument, or None - - def getsize(self, text, *args, **kwargs): - w, h = self.font.getsize(text) - if self.orientation in (Image.ROTATE_90, Image.ROTATE_270): - return h, w - return w, h - - def getmask(self, text, mode="", *args, **kwargs): - im = self.font.getmask(text, mode, *args, **kwargs) - if self.orientation is not None: - return im.transpose(self.orientation) - return im - - -def load(filename): - """ - Load a font file. This function loads a font object from the given - bitmap font file, and returns the corresponding font object. - - :param filename: Name of font file. - :return: A font object. - :exception OSError: If the file could not be read. - """ - f = ImageFont() - f._load_pilfont(filename) - return f - - -def truetype(font=None, size=10, index=0, encoding="", layout_engine=None): - """ - Load a TrueType or OpenType font from a file or file-like object, - and create a font object. - This function loads a font object from the given file or file-like - object, and creates a font object for a font of the given size. - - Pillow uses FreeType to open font files. If you are opening many fonts - simultaneously on Windows, be aware that Windows limits the number of files - that can be open in C at once to 512. If you approach that limit, an - ``OSError`` may be thrown, reporting that FreeType "cannot open resource". - - This function requires the _imagingft service. - - :param font: A filename or file-like object containing a TrueType font. - If the file is not found in this filename, the loader may also - search in other directories, such as the :file:`fonts/` - directory on Windows or :file:`/Library/Fonts/`, - :file:`/System/Library/Fonts/` and :file:`~/Library/Fonts/` on - macOS. - - :param size: The requested size, in points. - :param index: Which font face to load (default is first available face). - :param encoding: Which font encoding to use (default is Unicode). Possible - encodings include (see the FreeType documentation for more - information): - - * "unic" (Unicode) - * "symb" (Microsoft Symbol) - * "ADOB" (Adobe Standard) - * "ADBE" (Adobe Expert) - * "ADBC" (Adobe Custom) - * "armn" (Apple Roman) - * "sjis" (Shift JIS) - * "gb " (PRC) - * "big5" - * "wans" (Extended Wansung) - * "joha" (Johab) - * "lat1" (Latin-1) - - This specifies the character set to use. It does not alter the - encoding of any text provided in subsequent operations. - :param layout_engine: Which layout engine to use, if available: - :data:`.ImageFont.LAYOUT_BASIC` or :data:`.ImageFont.LAYOUT_RAQM`. - - You can check support for Raqm layout using - :py:func:`PIL.features.check_feature` with ``feature="raqm"``. - - .. versionadded:: 4.2.0 - :return: A font object. - :exception OSError: If the file could not be read. - """ - - def freetype(font): - return FreeTypeFont(font, size, index, encoding, layout_engine) - - try: - return freetype(font) - except OSError: - if not isPath(font): - raise - ttf_filename = os.path.basename(font) - - dirs = [] - if sys.platform == "win32": - # check the windows font repository - # NOTE: must use uppercase WINDIR, to work around bugs in - # 1.5.2's os.environ.get() - windir = os.environ.get("WINDIR") - if windir: - dirs.append(os.path.join(windir, "fonts")) - elif sys.platform in ("linux", "linux2"): - lindirs = os.environ.get("XDG_DATA_DIRS", "") - if not lindirs: - # According to the freedesktop spec, XDG_DATA_DIRS should - # default to /usr/share - lindirs = "/usr/share" - dirs += [os.path.join(lindir, "fonts") for lindir in lindirs.split(":")] - elif sys.platform == "darwin": - dirs += [ - "/Library/Fonts", - "/System/Library/Fonts", - os.path.expanduser("~/Library/Fonts"), - ] - - ext = os.path.splitext(ttf_filename)[1] - first_font_with_a_different_extension = None - for directory in dirs: - for walkroot, walkdir, walkfilenames in os.walk(directory): - for walkfilename in walkfilenames: - if ext and walkfilename == ttf_filename: - return freetype(os.path.join(walkroot, walkfilename)) - elif not ext and os.path.splitext(walkfilename)[0] == ttf_filename: - fontpath = os.path.join(walkroot, walkfilename) - if os.path.splitext(fontpath)[1] == ".ttf": - return freetype(fontpath) - if not ext and first_font_with_a_different_extension is None: - first_font_with_a_different_extension = fontpath - if first_font_with_a_different_extension: - return freetype(first_font_with_a_different_extension) - raise - - -def load_path(filename): - """ - Load font file. Same as :py:func:`~PIL.ImageFont.load`, but searches for a - bitmap font along the Python path. - - :param filename: Name of font file. - :return: A font object. - :exception OSError: If the file could not be read. - """ - for directory in sys.path: - if isDirectory(directory): - if not isinstance(filename, str): - filename = filename.decode("utf-8") - try: - return load(os.path.join(directory, filename)) - except OSError: - pass - raise OSError("cannot find font file") - - -def load_default(): - """Load a "better than nothing" default font. - - .. versionadded:: 1.1.4 - - :return: A font object. - """ - f = ImageFont() - f._load_pilfont_data( - # courB08 - BytesIO( - base64.b64decode( - b""" -UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA -BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL -AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA -AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB -ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A -BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB -//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA -AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH -AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA -ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv -AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/ -/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5 -AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA -AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG -AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA -BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA -AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA -2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF -AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA//// -+gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA -////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA -BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv -AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA -AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA -AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA -BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP// -//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA -AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF -AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB -mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn -AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA -AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7 -AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA -Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB -//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA -AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ -AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC -DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ -AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/ -+wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5 -AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/ -///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG -AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA -BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA -Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC -eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG -AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA//// -+gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA -////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA -BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT -AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A -AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA -Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA -Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP// -//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA -AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ -AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA -LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5 -AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA -AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5 -AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA -AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG -AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA -EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK -AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA -pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG -AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA//// -+QAGAAIAzgAKANUAEw== -""" - ) - ), - Image.open( - BytesIO( - base64.b64decode( - b""" -iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u -Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9 -M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g -LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F -IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA -Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791 -NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx -in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9 -SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY -AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt -y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG -ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY -lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H -/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3 -AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47 -c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/ -/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw -pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv -oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR -evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA -AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v// -Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR -w7IkEbzhVQAAAABJRU5ErkJggg== -""" - ) - ) - ), - ) - return f diff --git a/PIL/ImageGrab.py b/PIL/ImageGrab.py deleted file mode 100644 index b93ec3f..0000000 --- a/PIL/ImageGrab.py +++ /dev/null @@ -1,120 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# screen grabber -# -# History: -# 2001-04-26 fl created -# 2001-09-17 fl use builtin driver, if present -# 2002-11-19 fl added grabclipboard support -# -# Copyright (c) 2001-2002 by Secret Labs AB -# Copyright (c) 2001-2002 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import sys - -from . import Image - -if sys.platform == "darwin": - import os - import subprocess - import tempfile - - -def grab(bbox=None, include_layered_windows=False, all_screens=False, xdisplay=None): - if xdisplay is None: - if sys.platform == "darwin": - fh, filepath = tempfile.mkstemp(".png") - os.close(fh) - subprocess.call(["screencapture", "-x", filepath]) - im = Image.open(filepath) - im.load() - os.unlink(filepath) - if bbox: - im_cropped = im.crop(bbox) - im.close() - return im_cropped - return im - elif sys.platform == "win32": - offset, size, data = Image.core.grabscreen_win32( - include_layered_windows, all_screens - ) - im = Image.frombytes( - "RGB", - size, - data, - # RGB, 32-bit line padding, origin lower left corner - "raw", - "BGR", - (size[0] * 3 + 3) & -4, - -1, - ) - if bbox: - x0, y0 = offset - left, top, right, bottom = bbox - im = im.crop((left - x0, top - y0, right - x0, bottom - y0)) - return im - # use xdisplay=None for default display on non-win32/macOS systems - if not Image.core.HAVE_XCB: - raise OSError("Pillow was built without XCB support") - size, data = Image.core.grabscreen_x11(xdisplay) - im = Image.frombytes("RGB", size, data, "raw", "BGRX", size[0] * 4, 1) - if bbox: - im = im.crop(bbox) - return im - - -def grabclipboard(): - if sys.platform == "darwin": - fh, filepath = tempfile.mkstemp(".jpg") - os.close(fh) - commands = [ - 'set theFile to (open for access POSIX file "' - + filepath - + '" with write permission)', - "try", - " write (the clipboard as JPEG picture) to theFile", - "end try", - "close access theFile", - ] - script = ["osascript"] - for command in commands: - script += ["-e", command] - subprocess.call(script) - - im = None - if os.stat(filepath).st_size != 0: - im = Image.open(filepath) - im.load() - os.unlink(filepath) - return im - elif sys.platform == "win32": - fmt, data = Image.core.grabclipboard_win32() - if fmt == "file": # CF_HDROP - import struct - - o = struct.unpack_from("I", data)[0] - if data[16] != 0: - files = data[o:].decode("utf-16le").split("\0") - else: - files = data[o:].decode("mbcs").split("\0") - return files[: files.index("")] - if isinstance(data, bytes): - import io - - data = io.BytesIO(data) - if fmt == "png": - from . import PngImagePlugin - - return PngImagePlugin.PngImageFile(data) - elif fmt == "DIB": - from . import BmpImagePlugin - - return BmpImagePlugin.DibImageFile(data) - return None - else: - raise NotImplementedError("ImageGrab.grabclipboard() is macOS and Windows only") diff --git a/PIL/ImageMath.py b/PIL/ImageMath.py deleted file mode 100644 index 7f9c88e..0000000 --- a/PIL/ImageMath.py +++ /dev/null @@ -1,253 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# a simple math add-on for the Python Imaging Library -# -# History: -# 1999-02-15 fl Original PIL Plus release -# 2005-05-05 fl Simplified and cleaned up for PIL 1.1.6 -# 2005-09-12 fl Fixed int() and float() for Python 2.4.1 -# -# Copyright (c) 1999-2005 by Secret Labs AB -# Copyright (c) 2005 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import builtins - -from . import Image, _imagingmath - -VERBOSE = 0 - - -def _isconstant(v): - return isinstance(v, (int, float)) - - -class _Operand: - """Wraps an image operand, providing standard operators""" - - def __init__(self, im): - self.im = im - - def __fixup(self, im1): - # convert image to suitable mode - if isinstance(im1, _Operand): - # argument was an image. - if im1.im.mode in ("1", "L"): - return im1.im.convert("I") - elif im1.im.mode in ("I", "F"): - return im1.im - else: - raise ValueError(f"unsupported mode: {im1.im.mode}") - else: - # argument was a constant - if _isconstant(im1) and self.im.mode in ("1", "L", "I"): - return Image.new("I", self.im.size, im1) - else: - return Image.new("F", self.im.size, im1) - - def apply(self, op, im1, im2=None, mode=None): - im1 = self.__fixup(im1) - if im2 is None: - # unary operation - out = Image.new(mode or im1.mode, im1.size, None) - im1.load() - try: - op = getattr(_imagingmath, op + "_" + im1.mode) - except AttributeError as e: - raise TypeError(f"bad operand type for '{op}'") from e - _imagingmath.unop(op, out.im.id, im1.im.id) - else: - # binary operation - im2 = self.__fixup(im2) - if im1.mode != im2.mode: - # convert both arguments to floating point - if im1.mode != "F": - im1 = im1.convert("F") - if im2.mode != "F": - im2 = im2.convert("F") - if im1.mode != im2.mode: - raise ValueError("mode mismatch") - if im1.size != im2.size: - # crop both arguments to a common size - size = (min(im1.size[0], im2.size[0]), min(im1.size[1], im2.size[1])) - if im1.size != size: - im1 = im1.crop((0, 0) + size) - if im2.size != size: - im2 = im2.crop((0, 0) + size) - out = Image.new(mode or im1.mode, size, None) - else: - out = Image.new(mode or im1.mode, im1.size, None) - im1.load() - im2.load() - try: - op = getattr(_imagingmath, op + "_" + im1.mode) - except AttributeError as e: - raise TypeError(f"bad operand type for '{op}'") from e - _imagingmath.binop(op, out.im.id, im1.im.id, im2.im.id) - return _Operand(out) - - # unary operators - def __bool__(self): - # an image is "true" if it contains at least one non-zero pixel - return self.im.getbbox() is not None - - def __abs__(self): - return self.apply("abs", self) - - def __pos__(self): - return self - - def __neg__(self): - return self.apply("neg", self) - - # binary operators - def __add__(self, other): - return self.apply("add", self, other) - - def __radd__(self, other): - return self.apply("add", other, self) - - def __sub__(self, other): - return self.apply("sub", self, other) - - def __rsub__(self, other): - return self.apply("sub", other, self) - - def __mul__(self, other): - return self.apply("mul", self, other) - - def __rmul__(self, other): - return self.apply("mul", other, self) - - def __truediv__(self, other): - return self.apply("div", self, other) - - def __rtruediv__(self, other): - return self.apply("div", other, self) - - def __mod__(self, other): - return self.apply("mod", self, other) - - def __rmod__(self, other): - return self.apply("mod", other, self) - - def __pow__(self, other): - return self.apply("pow", self, other) - - def __rpow__(self, other): - return self.apply("pow", other, self) - - # bitwise - def __invert__(self): - return self.apply("invert", self) - - def __and__(self, other): - return self.apply("and", self, other) - - def __rand__(self, other): - return self.apply("and", other, self) - - def __or__(self, other): - return self.apply("or", self, other) - - def __ror__(self, other): - return self.apply("or", other, self) - - def __xor__(self, other): - return self.apply("xor", self, other) - - def __rxor__(self, other): - return self.apply("xor", other, self) - - def __lshift__(self, other): - return self.apply("lshift", self, other) - - def __rshift__(self, other): - return self.apply("rshift", self, other) - - # logical - def __eq__(self, other): - return self.apply("eq", self, other) - - def __ne__(self, other): - return self.apply("ne", self, other) - - def __lt__(self, other): - return self.apply("lt", self, other) - - def __le__(self, other): - return self.apply("le", self, other) - - def __gt__(self, other): - return self.apply("gt", self, other) - - def __ge__(self, other): - return self.apply("ge", self, other) - - -# conversions -def imagemath_int(self): - return _Operand(self.im.convert("I")) - - -def imagemath_float(self): - return _Operand(self.im.convert("F")) - - -# logical -def imagemath_equal(self, other): - return self.apply("eq", self, other, mode="I") - - -def imagemath_notequal(self, other): - return self.apply("ne", self, other, mode="I") - - -def imagemath_min(self, other): - return self.apply("min", self, other) - - -def imagemath_max(self, other): - return self.apply("max", self, other) - - -def imagemath_convert(self, mode): - return _Operand(self.im.convert(mode)) - - -ops = {} -for k, v in list(globals().items()): - if k[:10] == "imagemath_": - ops[k[10:]] = v - - -def eval(expression, _dict={}, **kw): - """ - Evaluates an image expression. - - :param expression: A string containing a Python-style expression. - :param options: Values to add to the evaluation context. You - can either use a dictionary, or one or more keyword - arguments. - :return: The evaluated expression. This is usually an image object, but can - also be an integer, a floating point value, or a pixel tuple, - depending on the expression. - """ - - # build execution namespace - args = ops.copy() - args.update(_dict) - args.update(kw) - for k, v in list(args.items()): - if hasattr(v, "im"): - args[k] = _Operand(v) - - out = builtins.eval(expression, args) - try: - return out.im - except AttributeError: - return out diff --git a/PIL/ImageMode.py b/PIL/ImageMode.py deleted file mode 100644 index 9882883..0000000 --- a/PIL/ImageMode.py +++ /dev/null @@ -1,64 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# standard mode descriptors -# -# History: -# 2006-03-20 fl Added -# -# Copyright (c) 2006 by Secret Labs AB. -# Copyright (c) 2006 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -# mode descriptor cache -_modes = None - - -class ModeDescriptor: - """Wrapper for mode strings.""" - - def __init__(self, mode, bands, basemode, basetype): - self.mode = mode - self.bands = bands - self.basemode = basemode - self.basetype = basetype - - def __str__(self): - return self.mode - - -def getmode(mode): - """Gets a mode descriptor for the given mode.""" - global _modes - if not _modes: - # initialize mode cache - - from . import Image - - modes = {} - # core modes - for m, (basemode, basetype, bands) in Image._MODEINFO.items(): - modes[m] = ModeDescriptor(m, bands, basemode, basetype) - # extra experimental modes - modes["RGBa"] = ModeDescriptor("RGBa", ("R", "G", "B", "a"), "RGB", "L") - modes["LA"] = ModeDescriptor("LA", ("L", "A"), "L", "L") - modes["La"] = ModeDescriptor("La", ("L", "a"), "L", "L") - modes["PA"] = ModeDescriptor("PA", ("P", "A"), "RGB", "L") - # mapping modes - for i16mode in ( - "I;16", - "I;16S", - "I;16L", - "I;16LS", - "I;16B", - "I;16BS", - "I;16N", - "I;16NS", - ): - modes[i16mode] = ModeDescriptor(i16mode, ("I",), "L", "L") - # set global mode cache atomically - _modes = modes - return _modes[mode] diff --git a/PIL/ImageMorph.py b/PIL/ImageMorph.py deleted file mode 100644 index b76dfa0..0000000 --- a/PIL/ImageMorph.py +++ /dev/null @@ -1,245 +0,0 @@ -# A binary morphology add-on for the Python Imaging Library -# -# History: -# 2014-06-04 Initial version. -# -# Copyright (c) 2014 Dov Grobgeld - -import re - -from . import Image, _imagingmorph - -LUT_SIZE = 1 << 9 - -# fmt: off -ROTATION_MATRIX = [ - 6, 3, 0, - 7, 4, 1, - 8, 5, 2, -] -MIRROR_MATRIX = [ - 2, 1, 0, - 5, 4, 3, - 8, 7, 6, -] -# fmt: on - - -class LutBuilder: - """A class for building a MorphLut from a descriptive language - - The input patterns is a list of a strings sequences like these:: - - 4:(... - .1. - 111)->1 - - (whitespaces including linebreaks are ignored). The option 4 - describes a series of symmetry operations (in this case a - 4-rotation), the pattern is described by: - - - . or X - Ignore - - 1 - Pixel is on - - 0 - Pixel is off - - The result of the operation is described after "->" string. - - The default is to return the current pixel value, which is - returned if no other match is found. - - Operations: - - - 4 - 4 way rotation - - N - Negate - - 1 - Dummy op for no other operation (an op must always be given) - - M - Mirroring - - Example:: - - lb = LutBuilder(patterns = ["4:(... .1. 111)->1"]) - lut = lb.build_lut() - - """ - - def __init__(self, patterns=None, op_name=None): - if patterns is not None: - self.patterns = patterns - else: - self.patterns = [] - self.lut = None - if op_name is not None: - known_patterns = { - "corner": ["1:(... ... ...)->0", "4:(00. 01. ...)->1"], - "dilation4": ["4:(... .0. .1.)->1"], - "dilation8": ["4:(... .0. .1.)->1", "4:(... .0. ..1)->1"], - "erosion4": ["4:(... .1. .0.)->0"], - "erosion8": ["4:(... .1. .0.)->0", "4:(... .1. ..0)->0"], - "edge": [ - "1:(... ... ...)->0", - "4:(.0. .1. ...)->1", - "4:(01. .1. ...)->1", - ], - } - if op_name not in known_patterns: - raise Exception("Unknown pattern " + op_name + "!") - - self.patterns = known_patterns[op_name] - - def add_patterns(self, patterns): - self.patterns += patterns - - def build_default_lut(self): - symbols = [0, 1] - m = 1 << 4 # pos of current pixel - self.lut = bytearray(symbols[(i & m) > 0] for i in range(LUT_SIZE)) - - def get_lut(self): - return self.lut - - def _string_permute(self, pattern, permutation): - """string_permute takes a pattern and a permutation and returns the - string permuted according to the permutation list. - """ - assert len(permutation) == 9 - return "".join(pattern[p] for p in permutation) - - def _pattern_permute(self, basic_pattern, options, basic_result): - """pattern_permute takes a basic pattern and its result and clones - the pattern according to the modifications described in the $options - parameter. It returns a list of all cloned patterns.""" - patterns = [(basic_pattern, basic_result)] - - # rotations - if "4" in options: - res = patterns[-1][1] - for i in range(4): - patterns.append( - (self._string_permute(patterns[-1][0], ROTATION_MATRIX), res) - ) - # mirror - if "M" in options: - n = len(patterns) - for pattern, res in patterns[0:n]: - patterns.append((self._string_permute(pattern, MIRROR_MATRIX), res)) - - # negate - if "N" in options: - n = len(patterns) - for pattern, res in patterns[0:n]: - # Swap 0 and 1 - pattern = pattern.replace("0", "Z").replace("1", "0").replace("Z", "1") - res = 1 - int(res) - patterns.append((pattern, res)) - - return patterns - - def build_lut(self): - """Compile all patterns into a morphology lut. - - TBD :Build based on (file) morphlut:modify_lut - """ - self.build_default_lut() - patterns = [] - - # Parse and create symmetries of the patterns strings - for p in self.patterns: - m = re.search(r"(\w*):?\s*\((.+?)\)\s*->\s*(\d)", p.replace("\n", "")) - if not m: - raise Exception('Syntax error in pattern "' + p + '"') - options = m.group(1) - pattern = m.group(2) - result = int(m.group(3)) - - # Get rid of spaces - pattern = pattern.replace(" ", "").replace("\n", "") - - patterns += self._pattern_permute(pattern, options, result) - - # compile the patterns into regular expressions for speed - for i, pattern in enumerate(patterns): - p = pattern[0].replace(".", "X").replace("X", "[01]") - p = re.compile(p) - patterns[i] = (p, pattern[1]) - - # Step through table and find patterns that match. - # Note that all the patterns are searched. The last one - # caught overrides - for i in range(LUT_SIZE): - # Build the bit pattern - bitpattern = bin(i)[2:] - bitpattern = ("0" * (9 - len(bitpattern)) + bitpattern)[::-1] - - for p, r in patterns: - if p.match(bitpattern): - self.lut[i] = [0, 1][r] - - return self.lut - - -class MorphOp: - """A class for binary morphological operators""" - - def __init__(self, lut=None, op_name=None, patterns=None): - """Create a binary morphological operator""" - self.lut = lut - if op_name is not None: - self.lut = LutBuilder(op_name=op_name).build_lut() - elif patterns is not None: - self.lut = LutBuilder(patterns=patterns).build_lut() - - def apply(self, image): - """Run a single morphological operation on an image - - Returns a tuple of the number of changed pixels and the - morphed image""" - if self.lut is None: - raise Exception("No operator loaded") - - if image.mode != "L": - raise Exception("Image must be binary, meaning it must use mode L") - outimage = Image.new(image.mode, image.size, None) - count = _imagingmorph.apply(bytes(self.lut), image.im.id, outimage.im.id) - return count, outimage - - def match(self, image): - """Get a list of coordinates matching the morphological operation on - an image. - - Returns a list of tuples of (x,y) coordinates - of all matching pixels. See :ref:`coordinate-system`.""" - if self.lut is None: - raise Exception("No operator loaded") - - if image.mode != "L": - raise Exception("Image must be binary, meaning it must use mode L") - return _imagingmorph.match(bytes(self.lut), image.im.id) - - def get_on_pixels(self, image): - """Get a list of all turned on pixels in a binary image - - Returns a list of tuples of (x,y) coordinates - of all matching pixels. See :ref:`coordinate-system`.""" - - if image.mode != "L": - raise Exception("Image must be binary, meaning it must use mode L") - return _imagingmorph.get_on_pixels(image.im.id) - - def load_lut(self, filename): - """Load an operator from an mrl file""" - with open(filename, "rb") as f: - self.lut = bytearray(f.read()) - - if len(self.lut) != LUT_SIZE: - self.lut = None - raise Exception("Wrong size operator file!") - - def save_lut(self, filename): - """Save an operator to an mrl file""" - if self.lut is None: - raise Exception("No operator loaded") - with open(filename, "wb") as f: - f.write(self.lut) - - def set_lut(self, lut): - """Set the lut from an external source""" - self.lut = lut diff --git a/PIL/ImageOps.py b/PIL/ImageOps.py deleted file mode 100644 index 14602a5..0000000 --- a/PIL/ImageOps.py +++ /dev/null @@ -1,558 +0,0 @@ -# -# 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. -# - -import functools -import operator - -from . import Image - -# -# 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 isinstance(color, str): - from . 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 OSError("not supported for this image mode") - - -# -# actions - - -def autocontrast(image, cutoff=0, ignore=None, mask=None): - """ - Maximize (normalize) image contrast. This function calculates a - histogram of the input image (or mask region), removes ``cutoff`` 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: The percent to cut off from the histogram on the low and - high ends. Either a tuple of (low, high), or a single - number for both. - :param ignore: The background pixel value (use None for no background). - :param mask: Histogram used in contrast operation is computed using pixels - within the mask. If no mask is given the entire image is used - for histogram computation. - :return: An image. - """ - histogram = image.histogram(mask) - 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 - if not isinstance(cutoff, tuple): - cutoff = (cutoff, cutoff) - # 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[0] // 100 - for lo in range(256): - if cut > h[lo]: - cut = cut - h[lo] - h[lo] = 0 - else: - h[lo] -= cut - cut = 0 - if cut <= 0: - break - # remove cutoff% samples from the high end - cut = n * cutoff[1] // 100 - for hi in range(255, -1, -1): - if cut > h[hi]: - cut = cut - h[hi] - h[hi] = 0 - else: - 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) - - -def colorize(image, black, white, mid=None, blackpoint=0, whitepoint=255, midpoint=127): - """ - Colorize grayscale image. - This function calculates a color wedge which maps all black pixels in - the source image to the first color and all white pixels to the - second color. If ``mid`` is specified, it uses three-color mapping. - The ``black`` and ``white`` arguments should be RGB tuples or color names; - optionally you can use three-color mapping by also specifying ``mid``. - Mapping positions for any of the colors can be specified - (e.g. ``blackpoint``), where these parameters are the integer - value corresponding to where the corresponding color should be mapped. - These parameters must have logical order, such that - ``blackpoint <= midpoint <= whitepoint`` (if ``mid`` is specified). - - :param image: The image to colorize. - :param black: The color to use for black input pixels. - :param white: The color to use for white input pixels. - :param mid: The color to use for midtone input pixels. - :param blackpoint: an int value [0, 255] for the black mapping. - :param whitepoint: an int value [0, 255] for the white mapping. - :param midpoint: an int value [0, 255] for the midtone mapping. - :return: An image. - """ - - # Initial asserts - assert image.mode == "L" - if mid is None: - assert 0 <= blackpoint <= whitepoint <= 255 - else: - assert 0 <= blackpoint <= midpoint <= whitepoint <= 255 - - # Define colors from arguments - black = _color(black, "RGB") - white = _color(white, "RGB") - if mid is not None: - mid = _color(mid, "RGB") - - # Empty lists for the mapping - red = [] - green = [] - blue = [] - - # Create the low-end values - for i in range(0, blackpoint): - red.append(black[0]) - green.append(black[1]) - blue.append(black[2]) - - # Create the mapping (2-color) - if mid is None: - - range_map = range(0, whitepoint - blackpoint) - - for i in range_map: - red.append(black[0] + i * (white[0] - black[0]) // len(range_map)) - green.append(black[1] + i * (white[1] - black[1]) // len(range_map)) - blue.append(black[2] + i * (white[2] - black[2]) // len(range_map)) - - # Create the mapping (3-color) - else: - - range_map1 = range(0, midpoint - blackpoint) - range_map2 = range(0, whitepoint - midpoint) - - for i in range_map1: - red.append(black[0] + i * (mid[0] - black[0]) // len(range_map1)) - green.append(black[1] + i * (mid[1] - black[1]) // len(range_map1)) - blue.append(black[2] + i * (mid[2] - black[2]) // len(range_map1)) - for i in range_map2: - red.append(mid[0] + i * (white[0] - mid[0]) // len(range_map2)) - green.append(mid[1] + i * (white[1] - mid[1]) // len(range_map2)) - blue.append(mid[2] + i * (white[2] - mid[2]) // len(range_map2)) - - # Create the high-end values - for i in range(0, 256 - whitepoint): - red.append(white[0]) - green.append(white[1]) - blue.append(white[2]) - - # Return converted image - image = image.convert("RGB") - return _lut(image, red + green + blue) - - -def pad(image, size, method=Image.BICUBIC, color=None, centering=(0.5, 0.5)): - """ - Returns a sized and padded version of the image, expanded to fill the - requested aspect ratio and size. - - :param image: The image to size and crop. - :param size: The requested output size in pixels, given as a - (width, height) tuple. - :param method: What resampling method to use. Default is - :py:attr:`PIL.Image.BICUBIC`. See :ref:`concept-filters`. - :param color: The background color of the padded image. - :param centering: Control the position of the original image within the - padded version. - - (0.5, 0.5) will keep the image centered - (0, 0) will keep the image aligned to the top left - (1, 1) will keep the image aligned to the bottom - right - :return: An image. - """ - - im_ratio = image.width / image.height - dest_ratio = size[0] / size[1] - - if im_ratio == dest_ratio: - out = image.resize(size, resample=method) - else: - out = Image.new(image.mode, size, color) - if im_ratio > dest_ratio: - new_height = int(image.height / image.width * size[0]) - if new_height != size[1]: - image = image.resize((size[0], new_height), resample=method) - - y = int((size[1] - new_height) * max(0, min(centering[1], 1))) - out.paste(image, (0, y)) - else: - new_width = int(image.width / image.height * size[1]) - if new_width != size[0]: - image = image.resize((new_width, size[1]), resample=method) - - x = int((size[0] - new_width) * max(0, min(centering[0], 1))) - out.paste(image, (x, 0)) - return out - - -def crop(image, border=0): - """ - Remove border from image. The same amount of pixels are removed - from all four sides. This function works on all image modes. - - .. seealso:: :py:meth:`~PIL.Image.Image.crop` - - :param image: The image to crop. - :param border: The number of pixels to remove. - :return: An image. - """ - left, top, right, bottom = _border(border) - return image.crop((left, top, image.size[0] - right, image.size[1] - bottom)) - - -def scale(image, factor, resample=Image.BICUBIC): - """ - Returns a rescaled image by a specific factor given in parameter. - A factor greater than 1 expands the image, between 0 and 1 contracts the - image. - - :param image: The image to rescale. - :param factor: The expansion factor, as a float. - :param resample: What resampling method to use. Default is - :py:attr:`PIL.Image.BICUBIC`. See :ref:`concept-filters`. - :returns: An :py:class:`~PIL.Image.Image` object. - """ - if factor == 1: - return image.copy() - elif factor <= 0: - raise ValueError("the factor must be greater than 0") - else: - size = (round(factor * image.width), round(factor * image.height)) - return image.resize(size, resample) - - -def deform(image, deformer, resample=Image.BILINEAR): - """ - Deform the image. - - :param image: The image to deform. - :param deformer: A deformer object. Any object that implements a - ``getmesh`` method can be used. - :param resample: An optional resampling filter. Same values possible as - in the PIL.Image.transform function. - :return: An image. - """ - return image.transform(image.size, Image.MESH, deformer.getmesh(image), resample) - - -def equalize(image, mask=None): - """ - 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. - """ - 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 = (functools.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) - - -def expand(image, border=0, fill=0): - """ - Add border to the image - - :param image: The image to expand. - :param border: Border width, in pixels. - :param fill: Pixel fill value (a color value). Default is 0 (black). - :return: An 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 - - -def fit(image, size, method=Image.BICUBIC, bleed=0.0, centering=(0.5, 0.5)): - """ - Returns a sized and cropped version of the image, cropped to the - requested aspect ratio and size. - - This function was contributed by Kevin Cazabon. - - :param image: The image to size and crop. - :param size: The requested output size in pixels, given as a - (width, height) tuple. - :param method: What resampling method to use. Default is - :py:attr:`PIL.Image.BICUBIC`. See :ref:`concept-filters`. - :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). - Cannot be greater than or equal to 0.5. - :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. - """ - - # by Kevin Cazabon, Feb 17/2000 - # kevin@cazabon.com - # http://www.cazabon.com - - # ensure centering is mutable - centering = list(centering) - - if not 0.0 <= centering[0] <= 1.0: - centering[0] = 0.5 - if not 0.0 <= centering[1] <= 1.0: - centering[1] = 0.5 - - if not 0.0 <= bleed < 0.5: - 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 - bleed_pixels = (bleed * image.size[0], bleed * image.size[1]) - - live_size = ( - image.size[0] - bleed_pixels[0] * 2, - image.size[1] - bleed_pixels[1] * 2, - ) - - # calculate the aspect ratio of the live_size - live_size_ratio = live_size[0] / live_size[1] - - # calculate the aspect ratio of the output image - output_ratio = size[0] / size[1] - - # figure out if the sides or top/bottom will be cropped off - if live_size_ratio == output_ratio: - # live_size is already the needed ratio - crop_width = live_size[0] - crop_height = live_size[1] - elif live_size_ratio >= output_ratio: - # live_size is wider than what's needed, crop the sides - crop_width = output_ratio * live_size[1] - crop_height = live_size[1] - else: - # live_size is taller than what's needed, crop the top and bottom - crop_width = live_size[0] - crop_height = live_size[0] / output_ratio - - # make the crop - crop_left = bleed_pixels[0] + (live_size[0] - crop_width) * centering[0] - crop_top = bleed_pixels[1] + (live_size[1] - crop_height) * centering[1] - - crop = (crop_left, crop_top, crop_left + crop_width, crop_top + crop_height) - - # resize the image and return it - return image.resize(size, method, box=crop) - - -def flip(image): - """ - Flip the image vertically (top to bottom). - - :param image: The image to flip. - :return: An image. - """ - return image.transpose(Image.FLIP_TOP_BOTTOM) - - -def grayscale(image): - """ - Convert the image to grayscale. - - :param image: The image to convert. - :return: An image. - """ - return image.convert("L") - - -def invert(image): - """ - Invert (negate) the image. - - :param image: The image to invert. - :return: An image. - """ - lut = [] - for i in range(256): - lut.append(255 - i) - return _lut(image, lut) - - -def mirror(image): - """ - Flip image horizontally (left to right). - - :param image: The image to mirror. - :return: An image. - """ - return image.transpose(Image.FLIP_LEFT_RIGHT) - - -def posterize(image, bits): - """ - Reduce the number of bits for each color channel. - - :param image: The image to posterize. - :param bits: The number of bits to keep for each channel (1-8). - :return: An image. - """ - lut = [] - mask = ~(2 ** (8 - bits) - 1) - for i in range(256): - lut.append(i & mask) - return _lut(image, lut) - - -def solarize(image, threshold=128): - """ - Invert all pixel values above a threshold. - - :param image: The image to solarize. - :param threshold: All pixels above this greyscale level are inverted. - :return: An image. - """ - lut = [] - for i in range(256): - if i < threshold: - lut.append(i) - else: - lut.append(255 - i) - return _lut(image, lut) - - -def exif_transpose(image): - """ - If an image has an EXIF Orientation tag, return a new image that is - transposed accordingly. Otherwise, return a copy of the image. - - :param image: The image to transpose. - :return: An image. - """ - exif = image.getexif() - orientation = exif.get(0x0112) - method = { - 2: Image.FLIP_LEFT_RIGHT, - 3: Image.ROTATE_180, - 4: Image.FLIP_TOP_BOTTOM, - 5: Image.TRANSPOSE, - 6: Image.ROTATE_270, - 7: Image.TRANSVERSE, - 8: Image.ROTATE_90, - }.get(orientation) - if method is not None: - transposed_image = image.transpose(method) - del exif[0x0112] - transposed_image.info["exif"] = exif.tobytes() - return transposed_image - return image.copy() diff --git a/PIL/ImagePalette.py b/PIL/ImagePalette.py deleted file mode 100644 index d060411..0000000 --- a/PIL/ImagePalette.py +++ /dev/null @@ -1,221 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# image palette object -# -# History: -# 1996-03-11 fl Rewritten. -# 1997-01-03 fl Up and running. -# 1997-08-23 fl Added load hack -# 2001-04-16 fl Fixed randint shadow bug in random() -# -# Copyright (c) 1997-2001 by Secret Labs AB -# Copyright (c) 1996-1997 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import array - -from . import GimpGradientFile, GimpPaletteFile, ImageColor, PaletteFile - - -class ImagePalette: - """ - Color palette for palette mapped images - - :param mode: The mode to use for the Palette. See: - :ref:`concept-modes`. Defaults to "RGB" - :param palette: An optional palette. If given, it must be a bytearray, - an array or a list of ints between 0-255 and of length ``size`` - times the number of colors in ``mode``. The list must be aligned - by channel (All R values must be contiguous in the list before G - and B values.) Defaults to 0 through 255 per channel. - :param size: An optional palette size. If given, it cannot be equal to - or greater than 256. Defaults to 0. - """ - - def __init__(self, mode="RGB", palette=None, size=0): - self.mode = mode - self.rawmode = None # if set, palette contains raw data - self.palette = palette or bytearray(range(256)) * len(self.mode) - self.colors = {} - self.dirty = None - if (size == 0 and len(self.mode) * 256 != len(self.palette)) or ( - size != 0 and size != len(self.palette) - ): - raise ValueError("wrong palette size") - - def copy(self): - new = ImagePalette() - - new.mode = self.mode - new.rawmode = self.rawmode - if self.palette is not None: - new.palette = self.palette[:] - new.colors = self.colors.copy() - new.dirty = self.dirty - - return new - - def getdata(self): - """ - Get palette contents in format suitable for the low-level - ``im.putpalette`` primitive. - - .. warning:: This method is experimental. - """ - if self.rawmode: - return self.rawmode, self.palette - return self.mode + ";L", self.tobytes() - - def tobytes(self): - """Convert palette to bytes. - - .. warning:: This method is experimental. - """ - if self.rawmode: - raise ValueError("palette contains raw palette data") - if isinstance(self.palette, bytes): - return self.palette - arr = array.array("B", self.palette) - if hasattr(arr, "tobytes"): - return arr.tobytes() - return arr.tostring() - - # Declare tostring as an alias for tobytes - tostring = tobytes - - def getcolor(self, color): - """Given an rgb tuple, allocate palette entry. - - .. warning:: This method is experimental. - """ - if self.rawmode: - raise ValueError("palette contains raw palette data") - if isinstance(color, tuple): - try: - return self.colors[color] - except KeyError as e: - # allocate new color slot - if isinstance(self.palette, bytes): - self.palette = bytearray(self.palette) - index = len(self.colors) - if index >= 256: - raise ValueError("cannot allocate more than 256 colors") from e - self.colors[color] = index - self.palette[index] = color[0] - self.palette[index + 256] = color[1] - self.palette[index + 512] = color[2] - self.dirty = 1 - return index - else: - raise ValueError(f"unknown color specifier: {repr(color)}") - - def save(self, fp): - """Save palette to text file. - - .. warning:: This method is experimental. - """ - if self.rawmode: - raise ValueError("palette contains raw palette data") - if isinstance(fp, str): - fp = open(fp, "w") - fp.write("# Palette\n") - fp.write(f"# Mode: {self.mode}\n") - for i in range(256): - fp.write(f"{i}") - for j in range(i * len(self.mode), (i + 1) * len(self.mode)): - try: - fp.write(f" {self.palette[j]}") - except IndexError: - fp.write(" 0") - fp.write("\n") - fp.close() - - -# -------------------------------------------------------------------- -# Internal - - -def raw(rawmode, data): - palette = ImagePalette() - palette.rawmode = rawmode - palette.palette = data - palette.dirty = 1 - return palette - - -# -------------------------------------------------------------------- -# Factories - - -def make_linear_lut(black, white): - lut = [] - if black == 0: - for i in range(256): - lut.append(white * i // 255) - else: - raise NotImplementedError # FIXME - return lut - - -def make_gamma_lut(exp): - lut = [] - for i in range(256): - lut.append(int(((i / 255.0) ** exp) * 255.0 + 0.5)) - return lut - - -def negative(mode="RGB"): - palette = list(range(256)) - palette.reverse() - return ImagePalette(mode, palette * len(mode)) - - -def random(mode="RGB"): - from random import randint - - palette = [] - for i in range(256 * len(mode)): - palette.append(randint(0, 255)) - return ImagePalette(mode, palette) - - -def sepia(white="#fff0c0"): - r, g, b = ImageColor.getrgb(white) - r = make_linear_lut(0, r) - g = make_linear_lut(0, g) - b = make_linear_lut(0, b) - return ImagePalette("RGB", r + g + b) - - -def wedge(mode="RGB"): - return ImagePalette(mode, list(range(256)) * len(mode)) - - -def load(filename): - - # FIXME: supports GIMP gradients only - - with open(filename, "rb") as fp: - - for paletteHandler in [ - GimpPaletteFile.GimpPaletteFile, - GimpGradientFile.GimpGradientFile, - PaletteFile.PaletteFile, - ]: - try: - fp.seek(0) - lut = paletteHandler(fp).getpalette() - if lut: - break - except (SyntaxError, ValueError): - # import traceback - # traceback.print_exc() - pass - else: - raise OSError("cannot load palette") - - return lut # data, rawmode diff --git a/PIL/ImagePath.py b/PIL/ImagePath.py deleted file mode 100644 index 3d3538c..0000000 --- a/PIL/ImagePath.py +++ /dev/null @@ -1,19 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# path interface -# -# History: -# 1996-11-04 fl Created -# 2002-04-14 fl Added documentation stub class -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# - -from . import Image - -Path = Image.core.path diff --git a/PIL/ImageQt.py b/PIL/ImageQt.py deleted file mode 100644 index 64f07be..0000000 --- a/PIL/ImageQt.py +++ /dev/null @@ -1,202 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# a simple Qt image interface. -# -# history: -# 2006-06-03 fl: created -# 2006-06-04 fl: inherit from QImage instead of wrapping it -# 2006-06-05 fl: removed toimage helper; move string support to ImageQt -# 2013-11-13 fl: add support for Qt5 (aurelien.ballier@cyclonit.com) -# -# Copyright (c) 2006 by Secret Labs AB -# Copyright (c) 2006 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import sys -from io import BytesIO - -from . import Image -from ._util import isPath - -qt_versions = [ - ["side6", "PySide6"], - ["5", "PyQt5"], - ["side2", "PySide2"], -] - -# If a version has already been imported, attempt it first -qt_versions.sort(key=lambda qt_version: qt_version[1] in sys.modules, reverse=True) -for qt_version, qt_module in qt_versions: - try: - if qt_module == "PySide6": - from PySide6.QtCore import QBuffer, QIODevice - from PySide6.QtGui import QImage, QPixmap, qRgba - elif qt_module == "PyQt5": - from PyQt5.QtCore import QBuffer, QIODevice - from PyQt5.QtGui import QImage, QPixmap, qRgba - elif qt_module == "PySide2": - from PySide2.QtCore import QBuffer, QIODevice - from PySide2.QtGui import QImage, QPixmap, qRgba - except (ImportError, RuntimeError): - continue - qt_is_installed = True - break -else: - qt_is_installed = False - qt_version = None - - -def rgb(r, g, b, a=255): - """(Internal) Turns an RGB color into a Qt compatible color integer.""" - # use qRgb to pack the colors, and then turn the resulting long - # into a negative integer with the same bitpattern. - return qRgba(r, g, b, a) & 0xFFFFFFFF - - -def fromqimage(im): - """ - :param im: A PIL Image object, or a file name - (given either as Python string or a PyQt string object) - """ - buffer = QBuffer() - buffer.open(QIODevice.ReadWrite) - # preserve alpha channel with png - # otherwise ppm is more friendly with Image.open - if im.hasAlphaChannel(): - im.save(buffer, "png") - else: - im.save(buffer, "ppm") - - b = BytesIO() - b.write(buffer.data()) - buffer.close() - b.seek(0) - - return Image.open(b) - - -def fromqpixmap(im): - return fromqimage(im) - # buffer = QBuffer() - # buffer.open(QIODevice.ReadWrite) - # # im.save(buffer) - # # What if png doesn't support some image features like animation? - # im.save(buffer, 'ppm') - # bytes_io = BytesIO() - # bytes_io.write(buffer.data()) - # buffer.close() - # bytes_io.seek(0) - # return Image.open(bytes_io) - - -def align8to32(bytes, width, mode): - """ - converts each scanline of data from 8 bit to 32 bit aligned - """ - - bits_per_pixel = {"1": 1, "L": 8, "P": 8}[mode] - - # calculate bytes per line and the extra padding if needed - bits_per_line = bits_per_pixel * width - full_bytes_per_line, remaining_bits_per_line = divmod(bits_per_line, 8) - bytes_per_line = full_bytes_per_line + (1 if remaining_bits_per_line else 0) - - extra_padding = -bytes_per_line % 4 - - # already 32 bit aligned by luck - if not extra_padding: - return bytes - - new_data = [] - for i in range(len(bytes) // bytes_per_line): - new_data.append( - bytes[i * bytes_per_line : (i + 1) * bytes_per_line] - + b"\x00" * extra_padding - ) - - return b"".join(new_data) - - -def _toqclass_helper(im): - data = None - colortable = None - - # handle filename, if given instead of image name - if hasattr(im, "toUtf8"): - # FIXME - is this really the best way to do this? - im = str(im.toUtf8(), "utf-8") - if isPath(im): - im = Image.open(im) - - if im.mode == "1": - format = QImage.Format_Mono - elif im.mode == "L": - format = QImage.Format_Indexed8 - colortable = [] - for i in range(256): - colortable.append(rgb(i, i, i)) - elif im.mode == "P": - format = QImage.Format_Indexed8 - colortable = [] - palette = im.getpalette() - for i in range(0, len(palette), 3): - colortable.append(rgb(*palette[i : i + 3])) - elif im.mode == "RGB": - data = im.tobytes("raw", "BGRX") - format = QImage.Format_RGB32 - elif im.mode == "RGBA": - data = im.tobytes("raw", "BGRA") - format = QImage.Format_ARGB32 - else: - raise ValueError(f"unsupported image mode {repr(im.mode)}") - - __data = data or align8to32(im.tobytes(), im.size[0], im.mode) - return {"data": __data, "im": im, "format": format, "colortable": colortable} - - -if qt_is_installed: - - class ImageQt(QImage): - def __init__(self, im): - """ - An PIL image wrapper for Qt. This is a subclass of PyQt's QImage - class. - - :param im: A PIL Image object, or a file name (given either as - Python string or a PyQt string object). - """ - im_data = _toqclass_helper(im) - # must keep a reference, or Qt will crash! - # All QImage constructors that take data operate on an existing - # buffer, so this buffer has to hang on for the life of the image. - # Fixes https://github.com/python-pillow/Pillow/issues/1370 - self.__data = im_data["data"] - super().__init__( - self.__data, - im_data["im"].size[0], - im_data["im"].size[1], - im_data["format"], - ) - if im_data["colortable"]: - self.setColorTable(im_data["colortable"]) - - -def toqimage(im): - return ImageQt(im) - - -def toqpixmap(im): - # # This doesn't work. For now using a dumb approach. - # im_data = _toqclass_helper(im) - # result = QPixmap(im_data['im'].size[0], im_data['im'].size[1]) - # result.loadFromData(im_data['data']) - # Fix some strange bug that causes - if im.mode == "RGB": - im = im.convert("RGBA") - - qimage = toqimage(im) - return QPixmap.fromImage(qimage) diff --git a/PIL/ImageSequence.py b/PIL/ImageSequence.py deleted file mode 100644 index 9df910a..0000000 --- a/PIL/ImageSequence.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# sequence support classes -# -# history: -# 1997-02-20 fl Created -# -# Copyright (c) 1997 by Secret Labs AB. -# Copyright (c) 1997 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -## - - -class Iterator: - """ - This class implements an iterator object that can be used to loop - over an image sequence. - - You can use the ``[]`` operator to access elements by index. This operator - will raise an :py:exc:`IndexError` if you try to access a nonexistent - frame. - - :param im: An image object. - """ - - def __init__(self, im): - if not hasattr(im, "seek"): - raise AttributeError("im must have seek method") - self.im = im - self.position = getattr(self.im, "_min_frame", 0) - - def __getitem__(self, ix): - try: - self.im.seek(ix) - return self.im - except EOFError as e: - raise IndexError from e # end of sequence - - def __iter__(self): - return self - - def __next__(self): - try: - self.im.seek(self.position) - self.position += 1 - return self.im - except EOFError as e: - raise StopIteration from e - - -def all_frames(im, func=None): - """ - Applies a given function to all frames in an image or a list of images. - The frames are returned as a list of separate images. - - :param im: An image, or a list of images. - :param func: The function to apply to all of the image frames. - :returns: A list of images. - """ - if not isinstance(im, list): - im = [im] - - ims = [] - for imSequence in im: - current = imSequence.tell() - - ims += [im_frame.copy() for im_frame in Iterator(imSequence)] - - imSequence.seek(current) - return [func(im) for im in ims] if func else ims diff --git a/PIL/ImageShow.py b/PIL/ImageShow.py deleted file mode 100644 index 1ada825..0000000 --- a/PIL/ImageShow.py +++ /dev/null @@ -1,236 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# im.show() drivers -# -# History: -# 2008-04-06 fl Created -# -# Copyright (c) Secret Labs AB 2008. -# -# See the README file for information on usage and redistribution. -# -import os -import shutil -import subprocess -import sys -import tempfile -from shlex import quote - -from PIL import Image - -_viewers = [] - - -def register(viewer, order=1): - """ - The :py:func:`register` function is used to register additional viewers. - - :param viewer: The viewer to be registered. - :param order: - Zero or a negative integer to prepend this viewer to the list, - a positive integer to append it. - """ - try: - if issubclass(viewer, Viewer): - viewer = viewer() - except TypeError: - pass # raised if viewer wasn't a class - if order > 0: - _viewers.append(viewer) - else: - _viewers.insert(0, viewer) - - -def show(image, title=None, **options): - r""" - Display a given image. - - :param image: An image object. - :param title: Optional title. Not all viewers can display the title. - :param \**options: Additional viewer options. - :returns: ``True`` if a suitable viewer was found, ``False`` otherwise. - """ - for viewer in _viewers: - if viewer.show(image, title=title, **options): - return 1 - return 0 - - -class Viewer: - """Base class for viewers.""" - - # main api - - def show(self, image, **options): - """ - The main function for displaying an image. - Converts the given image to the target format and displays it. - """ - - # save temporary image to disk - if not ( - image.mode in ("1", "RGBA") - or (self.format == "PNG" and image.mode in ("I;16", "LA")) - ): - base = Image.getmodebase(image.mode) - if image.mode != base: - image = image.convert(base) - - return self.show_image(image, **options) - - # hook methods - - format = None - """The format to convert the image into.""" - options = {} - """Additional options used to convert the image.""" - - def get_format(self, image): - """Return format name, or ``None`` to save as PGM/PPM.""" - return self.format - - def get_command(self, file, **options): - """ - Returns the command used to display the file. - Not implemented in the base class. - """ - raise NotImplementedError - - def save_image(self, image): - """Save to temporary file and return filename.""" - return image._dump(format=self.get_format(image), **self.options) - - def show_image(self, image, **options): - """Display the given image.""" - return self.show_file(self.save_image(image), **options) - - def show_file(self, file, **options): - """Display the given file.""" - os.system(self.get_command(file, **options)) - return 1 - - -# -------------------------------------------------------------------- - - -class WindowsViewer(Viewer): - """The default viewer on Windows is the default system application for PNG files.""" - - format = "PNG" - options = {"compress_level": 1} - - def get_command(self, file, **options): - return ( - f'start "Pillow" /WAIT "{file}" ' - "&& ping -n 2 127.0.0.1 >NUL " - f'&& del /f "{file}"' - ) - - -if sys.platform == "win32": - register(WindowsViewer) - - -class MacViewer(Viewer): - """The default viewer on MacOS using ``Preview.app``.""" - - format = "PNG" - options = {"compress_level": 1} - - def get_command(self, file, **options): - # on darwin open returns immediately resulting in the temp - # file removal while app is opening - command = "open -a Preview.app" - command = f"({command} {quote(file)}; sleep 20; rm -f {quote(file)})&" - return command - - def show_file(self, file, **options): - """Display given file""" - fd, path = tempfile.mkstemp() - with os.fdopen(fd, "w") as f: - f.write(file) - with open(path) as f: - subprocess.Popen( - ["im=$(cat); open -a Preview.app $im; sleep 20; rm -f $im"], - shell=True, - stdin=f, - ) - os.remove(path) - return 1 - - -if sys.platform == "darwin": - register(MacViewer) - - -class UnixViewer(Viewer): - format = "PNG" - options = {"compress_level": 1} - - def get_command(self, file, **options): - command = self.get_command_ex(file, **options)[0] - return f"({command} {quote(file)}; rm -f {quote(file)})&" - - def show_file(self, file, **options): - """Display given file""" - fd, path = tempfile.mkstemp() - with os.fdopen(fd, "w") as f: - f.write(file) - with open(path) as f: - command = self.get_command_ex(file, **options)[0] - subprocess.Popen( - ["im=$(cat);" + command + " $im; rm -f $im"], shell=True, stdin=f - ) - os.remove(path) - return 1 - - -class DisplayViewer(UnixViewer): - """The ImageMagick ``display`` command.""" - - def get_command_ex(self, file, **options): - command = executable = "display" - return command, executable - - -class EogViewer(UnixViewer): - """The GNOME Image Viewer ``eog`` command.""" - - def get_command_ex(self, file, **options): - command = executable = "eog" - return command, executable - - -class XVViewer(UnixViewer): - """ - The X Viewer ``xv`` command. - This viewer supports the ``title`` parameter. - """ - - def get_command_ex(self, file, title=None, **options): - # note: xv is pretty outdated. most modern systems have - # imagemagick's display command instead. - command = executable = "xv" - if title: - command += f" -name {quote(title)}" - return command, executable - - -if sys.platform not in ("win32", "darwin"): # unixoids - if shutil.which("display"): - register(DisplayViewer) - if shutil.which("eog"): - register(EogViewer) - if shutil.which("xv"): - register(XVViewer) - -if __name__ == "__main__": - - if len(sys.argv) < 2: - print("Syntax: python ImageShow.py imagefile [title]") - sys.exit() - - with Image.open(sys.argv[1]) as im: - print(show(im, *sys.argv[2:])) diff --git a/PIL/ImageStat.py b/PIL/ImageStat.py deleted file mode 100644 index 50bafc9..0000000 --- a/PIL/ImageStat.py +++ /dev/null @@ -1,147 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# global image statistics -# -# History: -# 1996-04-05 fl Created -# 1997-05-21 fl Added mask; added rms, var, stddev attributes -# 1997-08-05 fl Added median -# 1998-07-05 hk Fixed integer overflow error -# -# Notes: -# This class shows how to implement delayed evaluation of attributes. -# To get a certain value, simply access the corresponding attribute. -# The __getattr__ dispatcher takes care of the rest. -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996-97. -# -# See the README file for information on usage and redistribution. -# - -import functools -import math -import operator - - -class Stat: - def __init__(self, image_or_list, mask=None): - try: - if mask: - self.h = image_or_list.histogram(mask) - else: - self.h = image_or_list.histogram() - except AttributeError: - self.h = image_or_list # assume it to be a histogram list - if not isinstance(self.h, list): - raise TypeError("first argument must be image or list") - self.bands = list(range(len(self.h) // 256)) - - def __getattr__(self, id): - """Calculate missing attribute""" - if id[:4] == "_get": - raise AttributeError(id) - # calculate missing attribute - v = getattr(self, "_get" + id)() - setattr(self, id, v) - return v - - def _getextrema(self): - """Get min/max values for each band in the image""" - - def minmax(histogram): - n = 255 - x = 0 - for i in range(256): - if histogram[i]: - n = min(n, i) - x = max(x, i) - return n, x # returns (255, 0) if there's no data in the histogram - - v = [] - for i in range(0, len(self.h), 256): - v.append(minmax(self.h[i:])) - return v - - def _getcount(self): - """Get total number of pixels in each layer""" - - v = [] - for i in range(0, len(self.h), 256): - v.append(functools.reduce(operator.add, self.h[i : i + 256])) - return v - - def _getsum(self): - """Get sum of all pixels in each layer""" - - v = [] - for i in range(0, len(self.h), 256): - layerSum = 0.0 - for j in range(256): - layerSum += j * self.h[i + j] - v.append(layerSum) - return v - - def _getsum2(self): - """Get squared sum of all pixels in each layer""" - - v = [] - for i in range(0, len(self.h), 256): - sum2 = 0.0 - for j in range(256): - sum2 += (j ** 2) * float(self.h[i + j]) - v.append(sum2) - return v - - def _getmean(self): - """Get average pixel level for each layer""" - - v = [] - for i in self.bands: - v.append(self.sum[i] / self.count[i]) - return v - - def _getmedian(self): - """Get median pixel level for each layer""" - - v = [] - for i in self.bands: - s = 0 - half = self.count[i] // 2 - b = i * 256 - for j in range(256): - s = s + self.h[b + j] - if s > half: - break - v.append(j) - return v - - def _getrms(self): - """Get RMS for each layer""" - - v = [] - for i in self.bands: - v.append(math.sqrt(self.sum2[i] / self.count[i])) - return v - - def _getvar(self): - """Get variance for each layer""" - - v = [] - for i in self.bands: - n = self.count[i] - v.append((self.sum2[i] - (self.sum[i] ** 2.0) / n) / n) - return v - - def _getstddev(self): - """Get standard deviation for each layer""" - - v = [] - for i in self.bands: - v.append(math.sqrt(self.var[i])) - return v - - -Global = Stat # compatibility diff --git a/PIL/ImageTk.py b/PIL/ImageTk.py deleted file mode 100644 index 62db7a7..0000000 --- a/PIL/ImageTk.py +++ /dev/null @@ -1,300 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# a Tk display interface -# -# History: -# 96-04-08 fl Created -# 96-09-06 fl Added getimage method -# 96-11-01 fl Rewritten, removed image attribute and crop method -# 97-05-09 fl Use PyImagingPaste method instead of image type -# 97-05-12 fl Minor tweaks to match the IFUNC95 interface -# 97-05-17 fl Support the "pilbitmap" booster patch -# 97-06-05 fl Added file= and data= argument to image constructors -# 98-03-09 fl Added width and height methods to Image classes -# 98-07-02 fl Use default mode for "P" images without palette attribute -# 98-07-02 fl Explicitly destroy Tkinter image objects -# 99-07-24 fl Support multiple Tk interpreters (from Greg Couch) -# 99-07-26 fl Automatically hook into Tkinter (if possible) -# 99-08-15 fl Hook uses _imagingtk instead of _imaging -# -# Copyright (c) 1997-1999 by Secret Labs AB -# Copyright (c) 1996-1997 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import tkinter -from io import BytesIO - -from . import Image - -# -------------------------------------------------------------------- -# Check for Tkinter interface hooks - -_pilbitmap_ok = None - - -def _pilbitmap_check(): - global _pilbitmap_ok - if _pilbitmap_ok is None: - try: - im = Image.new("1", (1, 1)) - tkinter.BitmapImage(data=f"PIL:{im.im.id}") - _pilbitmap_ok = 1 - except tkinter.TclError: - _pilbitmap_ok = 0 - return _pilbitmap_ok - - -def _get_image_from_kw(kw): - source = None - if "file" in kw: - source = kw.pop("file") - elif "data" in kw: - source = BytesIO(kw.pop("data")) - if source: - return Image.open(source) - - -# -------------------------------------------------------------------- -# PhotoImage - - -class PhotoImage: - """ - A Tkinter-compatible photo image. This can be used - everywhere Tkinter expects an image object. If the image is an RGBA - image, pixels having alpha 0 are treated as transparent. - - The constructor takes either a PIL image, or a mode and a size. - Alternatively, you can use the ``file`` or ``data`` options to initialize - the photo image object. - - :param image: Either a PIL image, or a mode string. If a mode string is - used, a size must also be given. - :param size: If the first argument is a mode string, this defines the size - of the image. - :keyword file: A filename to load the image from (using - ``Image.open(file)``). - :keyword data: An 8-bit string containing image data (as loaded from an - image file). - """ - - def __init__(self, image=None, size=None, **kw): - - # Tk compatibility: file or data - if image is None: - image = _get_image_from_kw(kw) - - if hasattr(image, "mode") and hasattr(image, "size"): - # got an image instead of a mode - mode = image.mode - if mode == "P": - # palette mapped data - image.load() - try: - mode = image.palette.mode - except AttributeError: - mode = "RGB" # default - size = image.size - kw["width"], kw["height"] = size - else: - mode = image - image = None - - if mode not in ["1", "L", "RGB", "RGBA"]: - mode = Image.getmodebase(mode) - - self.__mode = mode - self.__size = size - self.__photo = tkinter.PhotoImage(**kw) - self.tk = self.__photo.tk - if image: - self.paste(image) - - def __del__(self): - name = self.__photo.name - self.__photo.name = None - try: - self.__photo.tk.call("image", "delete", name) - except Exception: - pass # ignore internal errors - - def __str__(self): - """ - Get the Tkinter photo image identifier. This method is automatically - called by Tkinter whenever a PhotoImage object is passed to a Tkinter - method. - - :return: A Tkinter photo image identifier (a string). - """ - return str(self.__photo) - - def width(self): - """ - Get the width of the image. - - :return: The width, in pixels. - """ - return self.__size[0] - - def height(self): - """ - Get the height of the image. - - :return: The height, in pixels. - """ - return self.__size[1] - - def paste(self, im, box=None): - """ - Paste a PIL image into the photo image. Note that this can - be very slow if the photo image is displayed. - - :param im: A PIL image. The size must match the target region. If the - mode does not match, the image is converted to the mode of - the bitmap image. - :param box: A 4-tuple defining the left, upper, right, and lower pixel - coordinate. See :ref:`coordinate-system`. If None is given - instead of a tuple, all of the image is assumed. - """ - - # convert to blittable - im.load() - image = im.im - if image.isblock() and im.mode == self.__mode: - block = image - else: - block = image.new_block(self.__mode, im.size) - image.convert2(block, image) # convert directly between buffers - - tk = self.__photo.tk - - try: - tk.call("PyImagingPhoto", self.__photo, block.id) - except tkinter.TclError: - # activate Tkinter hook - try: - from . import _imagingtk - - try: - if hasattr(tk, "interp"): - # Required for PyPy, which always has CFFI installed - from cffi import FFI - - ffi = FFI() - - # PyPy is using an FFI CDATA element - # (Pdb) self.tk.interp - # - _imagingtk.tkinit(int(ffi.cast("uintptr_t", tk.interp)), 1) - else: - _imagingtk.tkinit(tk.interpaddr(), 1) - except AttributeError: - _imagingtk.tkinit(id(tk), 0) - tk.call("PyImagingPhoto", self.__photo, block.id) - except (ImportError, AttributeError, tkinter.TclError): - raise # configuration problem; cannot attach to Tkinter - - -# -------------------------------------------------------------------- -# BitmapImage - - -class BitmapImage: - """ - A Tkinter-compatible bitmap image. This can be used everywhere Tkinter - expects an image object. - - The given image must have mode "1". Pixels having value 0 are treated as - transparent. Options, if any, are passed on to Tkinter. The most commonly - used option is ``foreground``, which is used to specify the color for the - non-transparent parts. See the Tkinter documentation for information on - how to specify colours. - - :param image: A PIL image. - """ - - def __init__(self, image=None, **kw): - - # Tk compatibility: file or data - if image is None: - image = _get_image_from_kw(kw) - - self.__mode = image.mode - self.__size = image.size - - if _pilbitmap_check(): - # fast way (requires the pilbitmap booster patch) - image.load() - kw["data"] = f"PIL:{image.im.id}" - self.__im = image # must keep a reference - else: - # slow but safe way - kw["data"] = image.tobitmap() - self.__photo = tkinter.BitmapImage(**kw) - - def __del__(self): - name = self.__photo.name - self.__photo.name = None - try: - self.__photo.tk.call("image", "delete", name) - except Exception: - pass # ignore internal errors - - def width(self): - """ - Get the width of the image. - - :return: The width, in pixels. - """ - return self.__size[0] - - def height(self): - """ - Get the height of the image. - - :return: The height, in pixels. - """ - return self.__size[1] - - def __str__(self): - """ - Get the Tkinter bitmap image identifier. This method is automatically - called by Tkinter whenever a BitmapImage object is passed to a Tkinter - method. - - :return: A Tkinter bitmap image identifier (a string). - """ - return str(self.__photo) - - -def getimage(photo): - """Copies the contents of a PhotoImage to a PIL image memory.""" - im = Image.new("RGBA", (photo.width(), photo.height())) - block = im.im - - photo.tk.call("PyImagingPhotoGet", photo, block.id) - - return im - - -def _show(image, title): - """Helper for the Image.show method.""" - - class UI(tkinter.Label): - def __init__(self, master, im): - if im.mode == "1": - self.image = BitmapImage(im, foreground="white", master=master) - else: - self.image = PhotoImage(im, master=master) - super().__init__(master, image=self.image, bg="black", bd=0) - - if not tkinter._default_root: - raise OSError("tkinter not initialized") - top = tkinter.Toplevel() - if title: - top.title(title) - UI(top, image).pack() diff --git a/PIL/ImageTransform.py b/PIL/ImageTransform.py deleted file mode 100644 index 77791ab..0000000 --- a/PIL/ImageTransform.py +++ /dev/null @@ -1,102 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# transform wrappers -# -# History: -# 2002-04-08 fl Created -# -# Copyright (c) 2002 by Secret Labs AB -# Copyright (c) 2002 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -from . import Image - - -class Transform(Image.ImageTransformHandler): - def __init__(self, data): - self.data = data - - def getdata(self): - return self.method, self.data - - def transform(self, size, image, **options): - # can be overridden - method, data = self.getdata() - return image.transform(size, method, data, **options) - - -class AffineTransform(Transform): - """ - Define an affine image transform. - - This function takes a 6-tuple (a, b, c, d, e, f) which contain the first - two rows from an affine transform matrix. For each pixel (x, y) in the - output image, the new value is taken from a position (a x + b y + c, - d x + e y + f) in the input image, rounded to nearest pixel. - - This function can be used to scale, translate, rotate, and shear the - original image. - - See :py:meth:`~PIL.Image.Image.transform` - - :param matrix: A 6-tuple (a, b, c, d, e, f) containing the first two rows - from an affine transform matrix. - """ - - method = Image.AFFINE - - -class ExtentTransform(Transform): - """ - Define a transform to extract a subregion from an image. - - Maps a rectangle (defined by two corners) from the image to a rectangle of - the given size. The resulting image will contain data sampled from between - the corners, such that (x0, y0) in the input image will end up at (0,0) in - the output image, and (x1, y1) at size. - - This method can be used to crop, stretch, shrink, or mirror an arbitrary - rectangle in the current image. It is slightly slower than crop, but about - as fast as a corresponding resize operation. - - See :py:meth:`~PIL.Image.Image.transform` - - :param bbox: A 4-tuple (x0, y0, x1, y1) which specifies two points in the - input image's coordinate system. See :ref:`coordinate-system`. - """ - - method = Image.EXTENT - - -class QuadTransform(Transform): - """ - Define a quad image transform. - - Maps a quadrilateral (a region defined by four corners) from the image to a - rectangle of the given size. - - See :py:meth:`~PIL.Image.Image.transform` - - :param xy: An 8-tuple (x0, y0, x1, y1, x2, y2, x3, y3) which contain the - upper left, lower left, lower right, and upper right corner of the - source quadrilateral. - """ - - method = Image.QUAD - - -class MeshTransform(Transform): - """ - Define a mesh image transform. A mesh transform consists of one or more - individual quad transforms. - - See :py:meth:`~PIL.Image.Image.transform` - - :param data: A list of (bbox, quad) tuples. - """ - - method = Image.MESH diff --git a/PIL/ImageWin.py b/PIL/ImageWin.py deleted file mode 100644 index ca9b14c..0000000 --- a/PIL/ImageWin.py +++ /dev/null @@ -1,230 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# a Windows DIB display interface -# -# History: -# 1996-05-20 fl Created -# 1996-09-20 fl Fixed subregion exposure -# 1997-09-21 fl Added draw primitive (for tzPrint) -# 2003-05-21 fl Added experimental Window/ImageWindow classes -# 2003-09-05 fl Added fromstring/tostring methods -# -# Copyright (c) Secret Labs AB 1997-2003. -# Copyright (c) Fredrik Lundh 1996-2003. -# -# See the README file for information on usage and redistribution. -# - -from . import Image - - -class HDC: - """ - Wraps an HDC integer. The resulting object can be passed to the - :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` - methods. - """ - - def __init__(self, dc): - self.dc = dc - - def __int__(self): - return self.dc - - -class HWND: - """ - Wraps an HWND integer. The resulting object can be passed to the - :py:meth:`~PIL.ImageWin.Dib.draw` and :py:meth:`~PIL.ImageWin.Dib.expose` - methods, instead of a DC. - """ - - def __init__(self, wnd): - self.wnd = wnd - - def __int__(self): - return self.wnd - - -class Dib: - """ - A Windows bitmap with the given mode and size. The mode can be one of "1", - "L", "P", or "RGB". - - If the display requires a palette, this constructor creates a suitable - palette and associates it with the image. For an "L" image, 128 greylevels - are allocated. For an "RGB" image, a 6x6x6 colour cube is used, together - with 20 greylevels. - - To make sure that palettes work properly under Windows, you must call the - ``palette`` method upon certain events from Windows. - - :param image: Either a PIL image, or a mode string. If a mode string is - used, a size must also be given. The mode can be one of "1", - "L", "P", or "RGB". - :param size: If the first argument is a mode string, this - defines the size of the image. - """ - - def __init__(self, image, size=None): - if hasattr(image, "mode") and hasattr(image, "size"): - mode = image.mode - size = image.size - else: - mode = image - image = None - if mode not in ["1", "L", "P", "RGB"]: - mode = Image.getmodebase(mode) - self.image = Image.core.display(mode, size) - self.mode = mode - self.size = size - if image: - self.paste(image) - - def expose(self, handle): - """ - Copy the bitmap contents to a device context. - - :param handle: Device context (HDC), cast to a Python integer, or an - HDC or HWND instance. In PythonWin, you can use - ``CDC.GetHandleAttrib()`` to get a suitable handle. - """ - if isinstance(handle, HWND): - dc = self.image.getdc(handle) - try: - result = self.image.expose(dc) - finally: - self.image.releasedc(handle, dc) - else: - result = self.image.expose(handle) - return result - - def draw(self, handle, dst, src=None): - """ - Same as expose, but allows you to specify where to draw the image, and - what part of it to draw. - - The destination and source areas are given as 4-tuple rectangles. If - the source is omitted, the entire image is copied. If the source and - the destination have different sizes, the image is resized as - necessary. - """ - if not src: - src = (0, 0) + self.size - if isinstance(handle, HWND): - dc = self.image.getdc(handle) - try: - result = self.image.draw(dc, dst, src) - finally: - self.image.releasedc(handle, dc) - else: - result = self.image.draw(handle, dst, src) - return result - - def query_palette(self, handle): - """ - Installs the palette associated with the image in the given device - context. - - This method should be called upon **QUERYNEWPALETTE** and - **PALETTECHANGED** events from Windows. If this method returns a - non-zero value, one or more display palette entries were changed, and - the image should be redrawn. - - :param handle: Device context (HDC), cast to a Python integer, or an - HDC or HWND instance. - :return: A true value if one or more entries were changed (this - indicates that the image should be redrawn). - """ - if isinstance(handle, HWND): - handle = self.image.getdc(handle) - try: - result = self.image.query_palette(handle) - finally: - self.image.releasedc(handle, handle) - else: - result = self.image.query_palette(handle) - return result - - def paste(self, im, box=None): - """ - Paste a PIL image into the bitmap image. - - :param im: A PIL image. The size must match the target region. - If the mode does not match, the image is converted to the - mode of the bitmap image. - :param box: A 4-tuple defining the left, upper, right, and - lower pixel coordinate. See :ref:`coordinate-system`. If - None is given instead of a tuple, all of the image is - assumed. - """ - im.load() - if self.mode != im.mode: - im = im.convert(self.mode) - if box: - self.image.paste(im.im, box) - else: - self.image.paste(im.im) - - def frombytes(self, buffer): - """ - Load display memory contents from byte data. - - :param buffer: A buffer containing display data (usually - data returned from :py:func:`~PIL.ImageWin.Dib.tobytes`) - """ - return self.image.frombytes(buffer) - - def tobytes(self): - """ - Copy display memory contents to bytes object. - - :return: A bytes object containing display data. - """ - return self.image.tobytes() - - -class Window: - """Create a Window with the given title size.""" - - def __init__(self, title="PIL", width=None, height=None): - self.hwnd = Image.core.createwindow( - title, self.__dispatcher, width or 0, height or 0 - ) - - def __dispatcher(self, action, *args): - return getattr(self, "ui_handle_" + action)(*args) - - def ui_handle_clear(self, dc, x0, y0, x1, y1): - pass - - def ui_handle_damage(self, x0, y0, x1, y1): - pass - - def ui_handle_destroy(self): - pass - - def ui_handle_repair(self, dc, x0, y0, x1, y1): - pass - - def ui_handle_resize(self, width, height): - pass - - def mainloop(self): - Image.core.eventloop() - - -class ImageWindow(Window): - """Create an image window which displays the given image.""" - - def __init__(self, image, title="PIL"): - if not isinstance(image, Dib): - image = Dib(image) - self.image = image - width, height = image.size - super().__init__(title, width=width, height=height) - - def ui_handle_repair(self, dc, x0, y0, x1, y1): - self.image.draw(dc, (x0, y0, x1, y1)) diff --git a/PIL/ImtImagePlugin.py b/PIL/ImtImagePlugin.py deleted file mode 100644 index 21ffd74..0000000 --- a/PIL/ImtImagePlugin.py +++ /dev/null @@ -1,93 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# IM Tools support for PIL -# -# history: -# 1996-05-27 fl Created (read 8-bit images only) -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.2) -# -# Copyright (c) Secret Labs AB 1997-2001. -# Copyright (c) Fredrik Lundh 1996-2001. -# -# See the README file for information on usage and redistribution. -# - - -import re - -from . import Image, ImageFile - -# -# -------------------------------------------------------------------- - -field = re.compile(br"([a-z]*) ([^ \r\n]*)") - - -## -# Image plugin for IM Tools images. - - -class ImtImageFile(ImageFile.ImageFile): - - format = "IMT" - format_description = "IM Tools" - - def _open(self): - - # Quick rejection: if there's not a LF among the first - # 100 bytes, this is (probably) not a text header. - - if b"\n" not in self.fp.read(100): - raise SyntaxError("not an IM file") - self.fp.seek(0) - - xsize = ysize = 0 - - while True: - - s = self.fp.read(1) - if not s: - break - - if s == b"\x0C": - - # image data begins - self.tile = [ - ("raw", (0, 0) + self.size, self.fp.tell(), (self.mode, 0, 1)) - ] - - break - - else: - - # read key/value pair - # FIXME: dangerous, may read whole file - s = s + self.fp.readline() - if len(s) == 1 or len(s) > 100: - break - if s[0] == ord(b"*"): - continue # comment - - m = field.match(s) - if not m: - break - k, v = m.group(1, 2) - if k == "width": - xsize = int(v) - self._size = xsize, ysize - elif k == "height": - ysize = int(v) - self._size = xsize, ysize - elif k == "pixel" and v == "n8": - self.mode = "L" - - -# -# -------------------------------------------------------------------- - -Image.register_open(ImtImageFile.format, ImtImageFile) - -# -# no extension registered (".im" is simply too common) diff --git a/PIL/IptcImagePlugin.py b/PIL/IptcImagePlugin.py deleted file mode 100644 index 0bbe506..0000000 --- a/PIL/IptcImagePlugin.py +++ /dev/null @@ -1,230 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# IPTC/NAA file handling -# -# history: -# 1995-10-01 fl Created -# 1998-03-09 fl Cleaned up and added to PIL -# 2002-06-18 fl Added getiptcinfo helper -# -# Copyright (c) Secret Labs AB 1997-2002. -# Copyright (c) Fredrik Lundh 1995. -# -# See the README file for information on usage and redistribution. -# -import os -import tempfile - -from . import Image, ImageFile -from ._binary import i8 -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._binary import o8 - -COMPRESSION = {1: "raw", 5: "jpeg"} - -PAD = o8(0) * 4 - - -# -# Helpers - - -def i(c): - return i32((PAD + c)[-4:]) - - -def dump(c): - for i in c: - print("%02x" % i8(i), end=" ") - print() - - -## -# Image plugin for IPTC/NAA datastreams. To read IPTC/NAA fields -# from TIFF and JPEG files, use the getiptcinfo function. - - -class IptcImageFile(ImageFile.ImageFile): - - format = "IPTC" - format_description = "IPTC/NAA" - - def getint(self, key): - return i(self.info[key]) - - def field(self): - # - # get a IPTC field header - s = self.fp.read(5) - if not len(s): - return None, 0 - - tag = s[1], s[2] - - # syntax - if s[0] != 0x1C or tag[0] < 1 or tag[0] > 9: - raise SyntaxError("invalid IPTC/NAA file") - - # field size - size = s[3] - if size > 132: - raise OSError("illegal field length in IPTC/NAA file") - elif size == 128: - size = 0 - elif size > 128: - size = i(self.fp.read(size - 128)) - else: - size = i16(s, 3) - - return tag, size - - def _open(self): - - # load descriptive fields - while True: - offset = self.fp.tell() - tag, size = self.field() - if not tag or tag == (8, 10): - break - if size: - tagdata = self.fp.read(size) - else: - tagdata = None - if tag in self.info: - if isinstance(self.info[tag], list): - self.info[tag].append(tagdata) - else: - self.info[tag] = [self.info[tag], tagdata] - else: - self.info[tag] = tagdata - - # mode - layers = i8(self.info[(3, 60)][0]) - component = i8(self.info[(3, 60)][1]) - if (3, 65) in self.info: - id = i8(self.info[(3, 65)][0]) - 1 - else: - id = 0 - if layers == 1 and not component: - self.mode = "L" - elif layers == 3 and component: - self.mode = "RGB"[id] - elif layers == 4 and component: - self.mode = "CMYK"[id] - - # size - self._size = self.getint((3, 20)), self.getint((3, 30)) - - # compression - try: - compression = COMPRESSION[self.getint((3, 120))] - except KeyError as e: - raise OSError("Unknown IPTC image compression") from e - - # tile - if tag == (8, 10): - self.tile = [ - ("iptc", (compression, offset), (0, 0, self.size[0], self.size[1])) - ] - - def load(self): - - if len(self.tile) != 1 or self.tile[0][0] != "iptc": - return ImageFile.ImageFile.load(self) - - type, tile, box = self.tile[0] - - encoding, offset = tile - - self.fp.seek(offset) - - # Copy image data to temporary file - o_fd, outfile = tempfile.mkstemp(text=False) - o = os.fdopen(o_fd) - if encoding == "raw": - # To simplify access to the extracted file, - # prepend a PPM header - o.write("P5\n%d %d\n255\n" % self.size) - while True: - type, size = self.field() - if type != (8, 10): - break - while size > 0: - s = self.fp.read(min(size, 8192)) - if not s: - break - o.write(s) - size -= len(s) - o.close() - - try: - with Image.open(outfile) as _im: - _im.load() - self.im = _im.im - finally: - try: - os.unlink(outfile) - except OSError: - pass - - -Image.register_open(IptcImageFile.format, IptcImageFile) - -Image.register_extension(IptcImageFile.format, ".iim") - - -def getiptcinfo(im): - """ - Get IPTC information from TIFF, JPEG, or IPTC file. - - :param im: An image containing IPTC data. - :returns: A dictionary containing IPTC information, or None if - no IPTC information block was found. - """ - import io - - from . import JpegImagePlugin, TiffImagePlugin - - data = None - - if isinstance(im, IptcImageFile): - # return info dictionary right away - return im.info - - elif isinstance(im, JpegImagePlugin.JpegImageFile): - # extract the IPTC/NAA resource - photoshop = im.info.get("photoshop") - if photoshop: - data = photoshop.get(0x0404) - - elif isinstance(im, TiffImagePlugin.TiffImageFile): - # get raw data from the IPTC/NAA tag (PhotoShop tags the data - # as 4-byte integers, so we cannot use the get method...) - try: - data = im.tag.tagdata[TiffImagePlugin.IPTC_NAA_CHUNK] - except (AttributeError, KeyError): - pass - - if data is None: - return None # no properties - - # create an IptcImagePlugin object without initializing it - class FakeImage: - pass - - im = FakeImage() - im.__class__ = IptcImageFile - - # parse the IPTC information chunk - im.info = {} - im.fp = io.BytesIO(data) - - try: - im._open() - except (IndexError, KeyError): - pass # expected failure - - return im.info diff --git a/PIL/Jpeg2KImagePlugin.py b/PIL/Jpeg2KImagePlugin.py deleted file mode 100644 index 0b0d433..0000000 --- a/PIL/Jpeg2KImagePlugin.py +++ /dev/null @@ -1,314 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# JPEG2000 file handling -# -# History: -# 2014-03-12 ajh Created -# -# Copyright (c) 2014 Coriolis Systems Limited -# Copyright (c) 2014 Alastair Houghton -# -# See the README file for information on usage and redistribution. -# -import io -import os -import struct - -from . import Image, ImageFile - - -def _parse_codestream(fp): - """Parse the JPEG 2000 codestream to extract the size and component - count from the SIZ marker segment, returning a PIL (size, mode) tuple.""" - - hdr = fp.read(2) - lsiz = struct.unpack(">H", hdr)[0] - siz = hdr + fp.read(lsiz - 2) - lsiz, rsiz, xsiz, ysiz, xosiz, yosiz, _, _, _, _, csiz = struct.unpack_from( - ">HHIIIIIIIIH", siz - ) - ssiz = [None] * csiz - xrsiz = [None] * csiz - yrsiz = [None] * csiz - for i in range(csiz): - ssiz[i], xrsiz[i], yrsiz[i] = struct.unpack_from(">BBB", siz, 36 + 3 * i) - - size = (xsiz - xosiz, ysiz - yosiz) - if csiz == 1: - if (yrsiz[0] & 0x7F) > 8: - mode = "I;16" - else: - mode = "L" - elif csiz == 2: - mode = "LA" - elif csiz == 3: - mode = "RGB" - elif csiz == 4: - mode = "RGBA" - else: - mode = None - - return (size, mode) - - -def _parse_jp2_header(fp): - """Parse the JP2 header box to extract size, component count and - color space information, returning a (size, mode, mimetype) tuple.""" - - # Find the JP2 header box - header = None - mimetype = None - while True: - lbox, tbox = struct.unpack(">I4s", fp.read(8)) - if lbox == 1: - lbox = struct.unpack(">Q", fp.read(8))[0] - hlen = 16 - else: - hlen = 8 - - if lbox < hlen: - raise SyntaxError("Invalid JP2 header length") - - if tbox == b"jp2h": - header = fp.read(lbox - hlen) - break - elif tbox == b"ftyp": - if fp.read(4) == b"jpx ": - mimetype = "image/jpx" - fp.seek(lbox - hlen - 4, os.SEEK_CUR) - else: - fp.seek(lbox - hlen, os.SEEK_CUR) - - if header is None: - raise SyntaxError("could not find JP2 header") - - size = None - mode = None - bpc = None - nc = None - - hio = io.BytesIO(header) - while True: - lbox, tbox = struct.unpack(">I4s", hio.read(8)) - if lbox == 1: - lbox = struct.unpack(">Q", hio.read(8))[0] - hlen = 16 - else: - hlen = 8 - - content = hio.read(lbox - hlen) - - if tbox == b"ihdr": - height, width, nc, bpc, c, unkc, ipr = struct.unpack(">IIHBBBB", content) - size = (width, height) - if unkc: - if nc == 1 and (bpc & 0x7F) > 8: - mode = "I;16" - elif nc == 1: - mode = "L" - elif nc == 2: - mode = "LA" - elif nc == 3: - mode = "RGB" - elif nc == 4: - mode = "RGBA" - break - elif tbox == b"colr": - meth, prec, approx = struct.unpack_from(">BBB", content) - if meth == 1: - cs = struct.unpack_from(">I", content, 3)[0] - if cs == 16: # sRGB - if nc == 1 and (bpc & 0x7F) > 8: - mode = "I;16" - elif nc == 1: - mode = "L" - elif nc == 3: - mode = "RGB" - elif nc == 4: - mode = "RGBA" - break - elif cs == 17: # grayscale - if nc == 1 and (bpc & 0x7F) > 8: - mode = "I;16" - elif nc == 1: - mode = "L" - elif nc == 2: - mode = "LA" - break - elif cs == 18: # sYCC - if nc == 3: - mode = "RGB" - elif nc == 4: - mode = "RGBA" - break - - if size is None or mode is None: - raise SyntaxError("Malformed jp2 header") - - return (size, mode, mimetype) - - -## -# Image plugin for JPEG2000 images. - - -class Jpeg2KImageFile(ImageFile.ImageFile): - format = "JPEG2000" - format_description = "JPEG 2000 (ISO 15444)" - - def _open(self): - sig = self.fp.read(4) - if sig == b"\xff\x4f\xff\x51": - self.codec = "j2k" - self._size, self.mode = _parse_codestream(self.fp) - else: - sig = sig + self.fp.read(8) - - if sig == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a": - self.codec = "jp2" - header = _parse_jp2_header(self.fp) - self._size, self.mode, self.custom_mimetype = header - else: - raise SyntaxError("not a JPEG 2000 file") - - if self.size is None or self.mode is None: - raise SyntaxError("unable to determine size/mode") - - self._reduce = 0 - self.layers = 0 - - fd = -1 - length = -1 - - try: - fd = self.fp.fileno() - length = os.fstat(fd).st_size - except Exception: - fd = -1 - try: - pos = self.fp.tell() - self.fp.seek(0, io.SEEK_END) - length = self.fp.tell() - self.fp.seek(pos) - except Exception: - length = -1 - - self.tile = [ - ( - "jpeg2k", - (0, 0) + self.size, - 0, - (self.codec, self._reduce, self.layers, fd, length), - ) - ] - - @property - def reduce(self): - # https://github.com/python-pillow/Pillow/issues/4343 found that the - # new Image 'reduce' method was shadowed by this plugin's 'reduce' - # property. This attempts to allow for both scenarios - return self._reduce or super().reduce - - @reduce.setter - def reduce(self, value): - self._reduce = value - - def load(self): - if self.tile and self._reduce: - power = 1 << self._reduce - adjust = power >> 1 - self._size = ( - int((self.size[0] + adjust) / power), - int((self.size[1] + adjust) / power), - ) - - # Update the reduce and layers settings - t = self.tile[0] - t3 = (t[3][0], self._reduce, self.layers, t[3][3], t[3][4]) - self.tile = [(t[0], (0, 0) + self.size, t[2], t3)] - - return ImageFile.ImageFile.load(self) - - -def _accept(prefix): - return ( - prefix[:4] == b"\xff\x4f\xff\x51" - or prefix[:12] == b"\x00\x00\x00\x0cjP \x0d\x0a\x87\x0a" - ) - - -# ------------------------------------------------------------ -# Save support - - -def _save(im, fp, filename): - if filename.endswith(".j2k"): - kind = "j2k" - else: - kind = "jp2" - - # Get the keyword arguments - info = im.encoderinfo - - offset = info.get("offset", None) - tile_offset = info.get("tile_offset", None) - tile_size = info.get("tile_size", None) - quality_mode = info.get("quality_mode", "rates") - quality_layers = info.get("quality_layers", None) - if quality_layers is not None and not ( - isinstance(quality_layers, (list, tuple)) - and all( - [ - isinstance(quality_layer, (int, float)) - for quality_layer in quality_layers - ] - ) - ): - raise ValueError("quality_layers must be a sequence of numbers") - - num_resolutions = info.get("num_resolutions", 0) - cblk_size = info.get("codeblock_size", None) - precinct_size = info.get("precinct_size", None) - irreversible = info.get("irreversible", False) - progression = info.get("progression", "LRCP") - cinema_mode = info.get("cinema_mode", "no") - fd = -1 - - if hasattr(fp, "fileno"): - try: - fd = fp.fileno() - except Exception: - fd = -1 - - im.encoderconfig = ( - offset, - tile_offset, - tile_size, - quality_mode, - quality_layers, - num_resolutions, - cblk_size, - precinct_size, - irreversible, - progression, - cinema_mode, - fd, - ) - - ImageFile._save(im, fp, [("jpeg2k", (0, 0) + im.size, 0, kind)]) - - -# ------------------------------------------------------------ -# Registry stuff - - -Image.register_open(Jpeg2KImageFile.format, Jpeg2KImageFile, _accept) -Image.register_save(Jpeg2KImageFile.format, _save) - -Image.register_extensions( - Jpeg2KImageFile.format, [".jp2", ".j2k", ".jpc", ".jpf", ".jpx", ".j2c"] -) - -Image.register_mime(Jpeg2KImageFile.format, "image/jp2") diff --git a/PIL/JpegImagePlugin.py b/PIL/JpegImagePlugin.py deleted file mode 100644 index 054495e..0000000 --- a/PIL/JpegImagePlugin.py +++ /dev/null @@ -1,805 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# JPEG (JFIF) file handling -# -# See "Digital Compression and Coding of Continuous-Tone Still Images, -# Part 1, Requirements and Guidelines" (CCITT T.81 / ISO 10918-1) -# -# History: -# 1995-09-09 fl Created -# 1995-09-13 fl Added full parser -# 1996-03-25 fl Added hack to use the IJG command line utilities -# 1996-05-05 fl Workaround Photoshop 2.5 CMYK polarity bug -# 1996-05-28 fl Added draft support, JFIF version (0.1) -# 1996-12-30 fl Added encoder options, added progression property (0.2) -# 1997-08-27 fl Save mode 1 images as BW (0.3) -# 1998-07-12 fl Added YCbCr to draft and save methods (0.4) -# 1998-10-19 fl Don't hang on files using 16-bit DQT's (0.4.1) -# 2001-04-16 fl Extract DPI settings from JFIF files (0.4.2) -# 2002-07-01 fl Skip pad bytes before markers; identify Exif files (0.4.3) -# 2003-04-25 fl Added experimental EXIF decoder (0.5) -# 2003-06-06 fl Added experimental EXIF GPSinfo decoder -# 2003-09-13 fl Extract COM markers -# 2009-09-06 fl Added icc_profile support (from Florian Hoech) -# 2009-03-06 fl Changed CMYK handling; always use Adobe polarity (0.6) -# 2009-03-08 fl Added subsampling support (from Justin Huff). -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-1996 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# -import array -import io -import os -import struct -import subprocess -import sys -import tempfile -import warnings - -from . import Image, ImageFile, TiffImagePlugin -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._binary import o8 -from .JpegPresets import presets - -# -# Parser - - -def Skip(self, marker): - n = i16(self.fp.read(2)) - 2 - ImageFile._safe_read(self.fp, n) - - -def APP(self, marker): - # - # Application marker. Store these in the APP dictionary. - # Also look for well-known application markers. - - n = i16(self.fp.read(2)) - 2 - s = ImageFile._safe_read(self.fp, n) - - app = "APP%d" % (marker & 15) - - self.app[app] = s # compatibility - self.applist.append((app, s)) - - if marker == 0xFFE0 and s[:4] == b"JFIF": - # extract JFIF information - self.info["jfif"] = version = i16(s, 5) # version - self.info["jfif_version"] = divmod(version, 256) - # extract JFIF properties - try: - jfif_unit = s[7] - jfif_density = i16(s, 8), i16(s, 10) - except Exception: - pass - else: - if jfif_unit == 1: - self.info["dpi"] = jfif_density - self.info["jfif_unit"] = jfif_unit - self.info["jfif_density"] = jfif_density - elif marker == 0xFFE1 and s[:5] == b"Exif\0": - if "exif" not in self.info: - # extract EXIF information (incomplete) - self.info["exif"] = s # FIXME: value will change - elif marker == 0xFFE2 and s[:5] == b"FPXR\0": - # extract FlashPix information (incomplete) - self.info["flashpix"] = s # FIXME: value will change - elif marker == 0xFFE2 and s[:12] == b"ICC_PROFILE\0": - # Since an ICC profile can be larger than the maximum size of - # a JPEG marker (64K), we need provisions to split it into - # multiple markers. The format defined by the ICC specifies - # one or more APP2 markers containing the following data: - # Identifying string ASCII "ICC_PROFILE\0" (12 bytes) - # Marker sequence number 1, 2, etc (1 byte) - # Number of markers Total of APP2's used (1 byte) - # Profile data (remainder of APP2 data) - # Decoders should use the marker sequence numbers to - # reassemble the profile, rather than assuming that the APP2 - # markers appear in the correct sequence. - self.icclist.append(s) - elif marker == 0xFFED and s[:14] == b"Photoshop 3.0\x00": - # parse the image resource block - offset = 14 - photoshop = self.info.setdefault("photoshop", {}) - while s[offset : offset + 4] == b"8BIM": - try: - offset += 4 - # resource code - code = i16(s, offset) - offset += 2 - # resource name (usually empty) - name_len = s[offset] - # name = s[offset+1:offset+1+name_len] - offset += 1 + name_len - offset += offset & 1 # align - # resource data block - size = i32(s, offset) - offset += 4 - data = s[offset : offset + size] - if code == 0x03ED: # ResolutionInfo - data = { - "XResolution": i32(data, 0) / 65536, - "DisplayedUnitsX": i16(data, 4), - "YResolution": i32(data, 8) / 65536, - "DisplayedUnitsY": i16(data, 12), - } - photoshop[code] = data - offset += size - offset += offset & 1 # align - except struct.error: - break # insufficient data - - elif marker == 0xFFEE and s[:5] == b"Adobe": - self.info["adobe"] = i16(s, 5) - # extract Adobe custom properties - try: - adobe_transform = s[1] - except Exception: - pass - else: - self.info["adobe_transform"] = adobe_transform - elif marker == 0xFFE2 and s[:4] == b"MPF\0": - # extract MPO information - self.info["mp"] = s[4:] - # offset is current location minus buffer size - # plus constant header size - self.info["mpoffset"] = self.fp.tell() - n + 4 - - # If DPI isn't in JPEG header, fetch from EXIF - if "dpi" not in self.info and "exif" in self.info: - try: - exif = self.getexif() - resolution_unit = exif[0x0128] - x_resolution = exif[0x011A] - try: - dpi = float(x_resolution[0]) / x_resolution[1] - except TypeError: - dpi = x_resolution - if resolution_unit == 3: # cm - # 1 dpcm = 2.54 dpi - dpi *= 2.54 - self.info["dpi"] = int(dpi + 0.5), int(dpi + 0.5) - except (KeyError, SyntaxError, ValueError, ZeroDivisionError): - # SyntaxError for invalid/unreadable EXIF - # KeyError for dpi not included - # ZeroDivisionError for invalid dpi rational value - # ValueError for x_resolution[0] being an invalid float - self.info["dpi"] = 72, 72 - - -def COM(self, marker): - # - # Comment marker. Store these in the APP dictionary. - n = i16(self.fp.read(2)) - 2 - s = ImageFile._safe_read(self.fp, n) - - self.info["comment"] = s - self.app["COM"] = s # compatibility - self.applist.append(("COM", s)) - - -def SOF(self, marker): - # - # Start of frame marker. Defines the size and mode of the - # image. JPEG is colour blind, so we use some simple - # heuristics to map the number of layers to an appropriate - # mode. Note that this could be made a bit brighter, by - # looking for JFIF and Adobe APP markers. - - n = i16(self.fp.read(2)) - 2 - s = ImageFile._safe_read(self.fp, n) - self._size = i16(s, 3), i16(s, 1) - - self.bits = s[0] - if self.bits != 8: - raise SyntaxError(f"cannot handle {self.bits}-bit layers") - - self.layers = s[5] - if self.layers == 1: - self.mode = "L" - elif self.layers == 3: - self.mode = "RGB" - elif self.layers == 4: - self.mode = "CMYK" - else: - raise SyntaxError(f"cannot handle {self.layers}-layer images") - - if marker in [0xFFC2, 0xFFC6, 0xFFCA, 0xFFCE]: - self.info["progressive"] = self.info["progression"] = 1 - - if self.icclist: - # fixup icc profile - self.icclist.sort() # sort by sequence number - if self.icclist[0][13] == len(self.icclist): - profile = [] - for p in self.icclist: - profile.append(p[14:]) - icc_profile = b"".join(profile) - else: - icc_profile = None # wrong number of fragments - self.info["icc_profile"] = icc_profile - self.icclist = [] - - for i in range(6, len(s), 3): - t = s[i : i + 3] - # 4-tuples: id, vsamp, hsamp, qtable - self.layer.append((t[0], t[1] // 16, t[1] & 15, t[2])) - - -def DQT(self, marker): - # - # Define quantization table. Note that there might be more - # than one table in each marker. - - # FIXME: The quantization tables can be used to estimate the - # compression quality. - - n = i16(self.fp.read(2)) - 2 - s = ImageFile._safe_read(self.fp, n) - while len(s): - v = s[0] - precision = 1 if (v // 16 == 0) else 2 # in bytes - qt_length = 1 + precision * 64 - if len(s) < qt_length: - raise SyntaxError("bad quantization table marker") - data = array.array("B" if precision == 1 else "H", s[1:qt_length]) - if sys.byteorder == "little" and precision > 1: - data.byteswap() # the values are always big-endian - self.quantization[v & 15] = data - s = s[qt_length:] - - -# -# JPEG marker table - -MARKER = { - 0xFFC0: ("SOF0", "Baseline DCT", SOF), - 0xFFC1: ("SOF1", "Extended Sequential DCT", SOF), - 0xFFC2: ("SOF2", "Progressive DCT", SOF), - 0xFFC3: ("SOF3", "Spatial lossless", SOF), - 0xFFC4: ("DHT", "Define Huffman table", Skip), - 0xFFC5: ("SOF5", "Differential sequential DCT", SOF), - 0xFFC6: ("SOF6", "Differential progressive DCT", SOF), - 0xFFC7: ("SOF7", "Differential spatial", SOF), - 0xFFC8: ("JPG", "Extension", None), - 0xFFC9: ("SOF9", "Extended sequential DCT (AC)", SOF), - 0xFFCA: ("SOF10", "Progressive DCT (AC)", SOF), - 0xFFCB: ("SOF11", "Spatial lossless DCT (AC)", SOF), - 0xFFCC: ("DAC", "Define arithmetic coding conditioning", Skip), - 0xFFCD: ("SOF13", "Differential sequential DCT (AC)", SOF), - 0xFFCE: ("SOF14", "Differential progressive DCT (AC)", SOF), - 0xFFCF: ("SOF15", "Differential spatial (AC)", SOF), - 0xFFD0: ("RST0", "Restart 0", None), - 0xFFD1: ("RST1", "Restart 1", None), - 0xFFD2: ("RST2", "Restart 2", None), - 0xFFD3: ("RST3", "Restart 3", None), - 0xFFD4: ("RST4", "Restart 4", None), - 0xFFD5: ("RST5", "Restart 5", None), - 0xFFD6: ("RST6", "Restart 6", None), - 0xFFD7: ("RST7", "Restart 7", None), - 0xFFD8: ("SOI", "Start of image", None), - 0xFFD9: ("EOI", "End of image", None), - 0xFFDA: ("SOS", "Start of scan", Skip), - 0xFFDB: ("DQT", "Define quantization table", DQT), - 0xFFDC: ("DNL", "Define number of lines", Skip), - 0xFFDD: ("DRI", "Define restart interval", Skip), - 0xFFDE: ("DHP", "Define hierarchical progression", SOF), - 0xFFDF: ("EXP", "Expand reference component", Skip), - 0xFFE0: ("APP0", "Application segment 0", APP), - 0xFFE1: ("APP1", "Application segment 1", APP), - 0xFFE2: ("APP2", "Application segment 2", APP), - 0xFFE3: ("APP3", "Application segment 3", APP), - 0xFFE4: ("APP4", "Application segment 4", APP), - 0xFFE5: ("APP5", "Application segment 5", APP), - 0xFFE6: ("APP6", "Application segment 6", APP), - 0xFFE7: ("APP7", "Application segment 7", APP), - 0xFFE8: ("APP8", "Application segment 8", APP), - 0xFFE9: ("APP9", "Application segment 9", APP), - 0xFFEA: ("APP10", "Application segment 10", APP), - 0xFFEB: ("APP11", "Application segment 11", APP), - 0xFFEC: ("APP12", "Application segment 12", APP), - 0xFFED: ("APP13", "Application segment 13", APP), - 0xFFEE: ("APP14", "Application segment 14", APP), - 0xFFEF: ("APP15", "Application segment 15", APP), - 0xFFF0: ("JPG0", "Extension 0", None), - 0xFFF1: ("JPG1", "Extension 1", None), - 0xFFF2: ("JPG2", "Extension 2", None), - 0xFFF3: ("JPG3", "Extension 3", None), - 0xFFF4: ("JPG4", "Extension 4", None), - 0xFFF5: ("JPG5", "Extension 5", None), - 0xFFF6: ("JPG6", "Extension 6", None), - 0xFFF7: ("JPG7", "Extension 7", None), - 0xFFF8: ("JPG8", "Extension 8", None), - 0xFFF9: ("JPG9", "Extension 9", None), - 0xFFFA: ("JPG10", "Extension 10", None), - 0xFFFB: ("JPG11", "Extension 11", None), - 0xFFFC: ("JPG12", "Extension 12", None), - 0xFFFD: ("JPG13", "Extension 13", None), - 0xFFFE: ("COM", "Comment", COM), -} - - -def _accept(prefix): - # Magic number was taken from https://en.wikipedia.org/wiki/JPEG - return prefix[0:3] == b"\xFF\xD8\xFF" - - -## -# Image plugin for JPEG and JFIF images. - - -class JpegImageFile(ImageFile.ImageFile): - - format = "JPEG" - format_description = "JPEG (ISO 10918)" - - def _open(self): - - s = self.fp.read(3) - - if not _accept(s): - raise SyntaxError("not a JPEG file") - s = b"\xFF" - - # Create attributes - self.bits = self.layers = 0 - - # JPEG specifics (internal) - self.layer = [] - self.huffman_dc = {} - self.huffman_ac = {} - self.quantization = {} - self.app = {} # compatibility - self.applist = [] - self.icclist = [] - - while True: - - i = s[0] - if i == 0xFF: - s = s + self.fp.read(1) - i = i16(s) - else: - # Skip non-0xFF junk - s = self.fp.read(1) - continue - - if i in MARKER: - name, description, handler = MARKER[i] - if handler is not None: - handler(self, i) - if i == 0xFFDA: # start of scan - rawmode = self.mode - if self.mode == "CMYK": - rawmode = "CMYK;I" # assume adobe conventions - self.tile = [("jpeg", (0, 0) + self.size, 0, (rawmode, ""))] - # self.__offset = self.fp.tell() - break - s = self.fp.read(1) - elif i == 0 or i == 0xFFFF: - # padded marker or junk; move on - s = b"\xff" - elif i == 0xFF00: # Skip extraneous data (escaped 0xFF) - s = self.fp.read(1) - else: - raise SyntaxError("no marker found") - - def load_read(self, read_bytes): - """ - internal: read more image data - For premature EOF and LOAD_TRUNCATED_IMAGES adds EOI marker - so libjpeg can finish decoding - """ - s = self.fp.read(read_bytes) - - if not s and ImageFile.LOAD_TRUNCATED_IMAGES: - # Premature EOF. - # Pretend file is finished adding EOI marker - return b"\xFF\xD9" - - return s - - def draft(self, mode, size): - - if len(self.tile) != 1: - return - - # Protect from second call - if self.decoderconfig: - return - - d, e, o, a = self.tile[0] - scale = 1 - original_size = self.size - - if a[0] == "RGB" and mode in ["L", "YCbCr"]: - self.mode = mode - a = mode, "" - - if size: - scale = min(self.size[0] // size[0], self.size[1] // size[1]) - for s in [8, 4, 2, 1]: - if scale >= s: - break - e = ( - e[0], - e[1], - (e[2] - e[0] + s - 1) // s + e[0], - (e[3] - e[1] + s - 1) // s + e[1], - ) - self._size = ((self.size[0] + s - 1) // s, (self.size[1] + s - 1) // s) - scale = s - - self.tile = [(d, e, o, a)] - self.decoderconfig = (scale, 0) - - box = (0, 0, original_size[0] / scale, original_size[1] / scale) - return (self.mode, box) - - def load_djpeg(self): - - # ALTERNATIVE: handle JPEGs via the IJG command line utilities - - f, path = tempfile.mkstemp() - os.close(f) - if os.path.exists(self.filename): - subprocess.check_call(["djpeg", "-outfile", path, self.filename]) - else: - raise ValueError("Invalid Filename") - - try: - with Image.open(path) as _im: - _im.load() - self.im = _im.im - finally: - try: - os.unlink(path) - except OSError: - pass - - self.mode = self.im.mode - self._size = self.im.size - - self.tile = [] - - def _getexif(self): - return _getexif(self) - - def _getmp(self): - return _getmp(self) - - -def _getexif(self): - if "exif" not in self.info: - return None - return dict(self.getexif()) - - -def _getmp(self): - # Extract MP information. This method was inspired by the "highly - # experimental" _getexif version that's been in use for years now, - # itself based on the ImageFileDirectory class in the TIFF plugin. - - # The MP record essentially consists of a TIFF file embedded in a JPEG - # application marker. - try: - data = self.info["mp"] - except KeyError: - return None - file_contents = io.BytesIO(data) - head = file_contents.read(8) - endianness = ">" if head[:4] == b"\x4d\x4d\x00\x2a" else "<" - # process dictionary - try: - info = TiffImagePlugin.ImageFileDirectory_v2(head) - file_contents.seek(info.next) - info.load(file_contents) - mp = dict(info) - except Exception as e: - raise SyntaxError("malformed MP Index (unreadable directory)") from e - # it's an error not to have a number of images - try: - quant = mp[0xB001] - except KeyError as e: - raise SyntaxError("malformed MP Index (no number of images)") from e - # get MP entries - mpentries = [] - try: - rawmpentries = mp[0xB002] - for entrynum in range(0, quant): - unpackedentry = struct.unpack_from( - f"{endianness}LLLHH", rawmpentries, entrynum * 16 - ) - labels = ("Attribute", "Size", "DataOffset", "EntryNo1", "EntryNo2") - mpentry = dict(zip(labels, unpackedentry)) - mpentryattr = { - "DependentParentImageFlag": bool(mpentry["Attribute"] & (1 << 31)), - "DependentChildImageFlag": bool(mpentry["Attribute"] & (1 << 30)), - "RepresentativeImageFlag": bool(mpentry["Attribute"] & (1 << 29)), - "Reserved": (mpentry["Attribute"] & (3 << 27)) >> 27, - "ImageDataFormat": (mpentry["Attribute"] & (7 << 24)) >> 24, - "MPType": mpentry["Attribute"] & 0x00FFFFFF, - } - if mpentryattr["ImageDataFormat"] == 0: - mpentryattr["ImageDataFormat"] = "JPEG" - else: - raise SyntaxError("unsupported picture format in MPO") - mptypemap = { - 0x000000: "Undefined", - 0x010001: "Large Thumbnail (VGA Equivalent)", - 0x010002: "Large Thumbnail (Full HD Equivalent)", - 0x020001: "Multi-Frame Image (Panorama)", - 0x020002: "Multi-Frame Image: (Disparity)", - 0x020003: "Multi-Frame Image: (Multi-Angle)", - 0x030000: "Baseline MP Primary Image", - } - mpentryattr["MPType"] = mptypemap.get(mpentryattr["MPType"], "Unknown") - mpentry["Attribute"] = mpentryattr - mpentries.append(mpentry) - mp[0xB002] = mpentries - except KeyError as e: - raise SyntaxError("malformed MP Index (bad MP Entry)") from e - # Next we should try and parse the individual image unique ID list; - # we don't because I've never seen this actually used in a real MPO - # file and so can't test it. - return mp - - -# -------------------------------------------------------------------- -# stuff to save JPEG files - -RAWMODE = { - "1": "L", - "L": "L", - "RGB": "RGB", - "RGBX": "RGB", - "CMYK": "CMYK;I", # assume adobe conventions - "YCbCr": "YCbCr", -} - -# fmt: off -zigzag_index = ( - 0, 1, 5, 6, 14, 15, 27, 28, - 2, 4, 7, 13, 16, 26, 29, 42, - 3, 8, 12, 17, 25, 30, 41, 43, - 9, 11, 18, 24, 31, 40, 44, 53, - 10, 19, 23, 32, 39, 45, 52, 54, - 20, 22, 33, 38, 46, 51, 55, 60, - 21, 34, 37, 47, 50, 56, 59, 61, - 35, 36, 48, 49, 57, 58, 62, 63, -) - -samplings = { - (1, 1, 1, 1, 1, 1): 0, - (2, 1, 1, 1, 1, 1): 1, - (2, 2, 1, 1, 1, 1): 2, -} -# fmt: on - - -def convert_dict_qtables(qtables): - qtables = [qtables[key] for key in range(len(qtables)) if key in qtables] - for idx, table in enumerate(qtables): - qtables[idx] = [table[i] for i in zigzag_index] - return qtables - - -def get_sampling(im): - # There's no subsampling when images have only 1 layer - # (grayscale images) or when they are CMYK (4 layers), - # so set subsampling to the default value. - # - # NOTE: currently Pillow can't encode JPEG to YCCK format. - # If YCCK support is added in the future, subsampling code will have - # to be updated (here and in JpegEncode.c) to deal with 4 layers. - if not hasattr(im, "layers") or im.layers in (1, 4): - return -1 - sampling = im.layer[0][1:3] + im.layer[1][1:3] + im.layer[2][1:3] - return samplings.get(sampling, -1) - - -def _save(im, fp, filename): - - try: - rawmode = RAWMODE[im.mode] - except KeyError as e: - raise OSError(f"cannot write mode {im.mode} as JPEG") from e - - info = im.encoderinfo - - dpi = [round(x) for x in info.get("dpi", (0, 0))] - - quality = info.get("quality", -1) - subsampling = info.get("subsampling", -1) - qtables = info.get("qtables") - - if quality == "keep": - quality = -1 - subsampling = "keep" - qtables = "keep" - elif quality in presets: - preset = presets[quality] - quality = -1 - subsampling = preset.get("subsampling", -1) - qtables = preset.get("quantization") - elif not isinstance(quality, int): - raise ValueError("Invalid quality setting") - else: - if subsampling in presets: - subsampling = presets[subsampling].get("subsampling", -1) - if isinstance(qtables, str) and qtables in presets: - qtables = presets[qtables].get("quantization") - - if subsampling == "4:4:4": - subsampling = 0 - elif subsampling == "4:2:2": - subsampling = 1 - elif subsampling == "4:2:0": - subsampling = 2 - elif subsampling == "4:1:1": - # For compatibility. Before Pillow 4.3, 4:1:1 actually meant 4:2:0. - # Set 4:2:0 if someone is still using that value. - subsampling = 2 - elif subsampling == "keep": - if im.format != "JPEG": - raise ValueError("Cannot use 'keep' when original image is not a JPEG") - subsampling = get_sampling(im) - - def validate_qtables(qtables): - if qtables is None: - return qtables - if isinstance(qtables, str): - try: - lines = [ - int(num) - for line in qtables.splitlines() - for num in line.split("#", 1)[0].split() - ] - except ValueError as e: - raise ValueError("Invalid quantization table") from e - else: - qtables = [lines[s : s + 64] for s in range(0, len(lines), 64)] - if isinstance(qtables, (tuple, list, dict)): - if isinstance(qtables, dict): - qtables = convert_dict_qtables(qtables) - elif isinstance(qtables, tuple): - qtables = list(qtables) - if not (0 < len(qtables) < 5): - raise ValueError("None or too many quantization tables") - for idx, table in enumerate(qtables): - try: - if len(table) != 64: - raise TypeError - table = array.array("H", table) - except TypeError as e: - raise ValueError("Invalid quantization table") from e - else: - qtables[idx] = list(table) - return qtables - - if qtables == "keep": - if im.format != "JPEG": - raise ValueError("Cannot use 'keep' when original image is not a JPEG") - qtables = getattr(im, "quantization", None) - qtables = validate_qtables(qtables) - - extra = b"" - - icc_profile = info.get("icc_profile") - if icc_profile: - ICC_OVERHEAD_LEN = 14 - MAX_BYTES_IN_MARKER = 65533 - MAX_DATA_BYTES_IN_MARKER = MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN - markers = [] - while icc_profile: - markers.append(icc_profile[:MAX_DATA_BYTES_IN_MARKER]) - icc_profile = icc_profile[MAX_DATA_BYTES_IN_MARKER:] - i = 1 - for marker in markers: - size = struct.pack(">H", 2 + ICC_OVERHEAD_LEN + len(marker)) - extra += ( - b"\xFF\xE2" - + size - + b"ICC_PROFILE\0" - + o8(i) - + o8(len(markers)) - + marker - ) - i += 1 - - # "progressive" is the official name, but older documentation - # says "progression" - # FIXME: issue a warning if the wrong form is used (post-1.1.7) - progressive = info.get("progressive", False) or info.get("progression", False) - - optimize = info.get("optimize", False) - - exif = info.get("exif", b"") - if isinstance(exif, Image.Exif): - exif = exif.tobytes() - - # get keyword arguments - im.encoderconfig = ( - quality, - progressive, - info.get("smooth", 0), - optimize, - info.get("streamtype", 0), - dpi[0], - dpi[1], - subsampling, - qtables, - extra, - exif, - ) - - # if we optimize, libjpeg needs a buffer big enough to hold the whole image - # in a shot. Guessing on the size, at im.size bytes. (raw pixel size is - # channels*size, this is a value that's been used in a django patch. - # https://github.com/matthewwithanm/django-imagekit/issues/50 - bufsize = 0 - if optimize or progressive: - # CMYK can be bigger - if im.mode == "CMYK": - bufsize = 4 * im.size[0] * im.size[1] - # keep sets quality to -1, but the actual value may be high. - elif quality >= 95 or quality == -1: - bufsize = 2 * im.size[0] * im.size[1] - else: - bufsize = im.size[0] * im.size[1] - - # The EXIF info needs to be written as one block, + APP1, + one spare byte. - # Ensure that our buffer is big enough. Same with the icc_profile block. - bufsize = max(ImageFile.MAXBLOCK, bufsize, len(exif) + 5, len(extra) + 1) - - ImageFile._save(im, fp, [("jpeg", (0, 0) + im.size, 0, rawmode)], bufsize) - - -def _save_cjpeg(im, fp, filename): - # ALTERNATIVE: handle JPEGs via the IJG command line utilities. - tempfile = im._dump() - subprocess.check_call(["cjpeg", "-outfile", filename, tempfile]) - try: - os.unlink(tempfile) - except OSError: - pass - - -## -# Factory for making JPEG and MPO instances -def jpeg_factory(fp=None, filename=None): - im = JpegImageFile(fp, filename) - try: - mpheader = im._getmp() - if mpheader[45057] > 1: - # It's actually an MPO - from .MpoImagePlugin import MpoImageFile - - # Don't reload everything, just convert it. - im = MpoImageFile.adopt(im, mpheader) - except (TypeError, IndexError): - # It is really a JPEG - pass - except SyntaxError: - warnings.warn( - "Image appears to be a malformed MPO file, it will be " - "interpreted as a base JPEG file" - ) - return im - - -# --------------------------------------------------------------------- -# Registry stuff - -Image.register_open(JpegImageFile.format, jpeg_factory, _accept) -Image.register_save(JpegImageFile.format, _save) - -Image.register_extensions(JpegImageFile.format, [".jfif", ".jpe", ".jpg", ".jpeg"]) - -Image.register_mime(JpegImageFile.format, "image/jpeg") diff --git a/PIL/JpegPresets.py b/PIL/JpegPresets.py deleted file mode 100644 index 79d10eb..0000000 --- a/PIL/JpegPresets.py +++ /dev/null @@ -1,248 +0,0 @@ -""" -JPEG quality settings equivalent to the Photoshop settings. -Can be used when saving JPEG files. - -The following presets are available by default: -``web_low``, ``web_medium``, ``web_high``, ``web_very_high``, ``web_maximum``, -``low``, ``medium``, ``high``, ``maximum``. -More presets can be added to the :py:data:`presets` dict if needed. - -To apply the preset, specify:: - - quality="preset_name" - -To apply only the quantization table:: - - qtables="preset_name" - -To apply only the subsampling setting:: - - subsampling="preset_name" - -Example:: - - im.save("image_name.jpg", quality="web_high") - -Subsampling ------------ - -Subsampling is the practice of encoding images by implementing less resolution -for chroma information than for luma information. -(ref.: https://en.wikipedia.org/wiki/Chroma_subsampling) - -Possible subsampling values are 0, 1 and 2 that correspond to 4:4:4, 4:2:2 and -4:2:0. - -You can get the subsampling of a JPEG with the -:func:`.JpegImagePlugin.get_sampling` function. - -In JPEG compressed data a JPEG marker is used instead of an EXIF tag. -(ref.: https://www.exiv2.org/tags.html) - - -Quantization tables -------------------- - -They are values use by the DCT (Discrete cosine transform) to remove -*unnecessary* information from the image (the lossy part of the compression). -(ref.: https://en.wikipedia.org/wiki/Quantization_matrix#Quantization_matrices, -https://en.wikipedia.org/wiki/JPEG#Quantization) - -You can get the quantization tables of a JPEG with:: - - im.quantization - -This will return a dict with a number of arrays. You can pass this dict -directly as the qtables argument when saving a JPEG. - -The tables format between im.quantization and quantization in presets differ in -3 ways: - -1. The base container of the preset is a list with sublists instead of dict. - dict[0] -> list[0], dict[1] -> list[1], ... -2. Each table in a preset is a list instead of an array. -3. The zigzag order is remove in the preset (needed by libjpeg >= 6a). - -You can convert the dict format to the preset format with the -:func:`.JpegImagePlugin.convert_dict_qtables()` function. - -Libjpeg ref.: -https://web.archive.org/web/20120328125543/http://www.jpegcameras.com/libjpeg/libjpeg-3.html - -""" - -# fmt: off -presets = { - 'web_low': {'subsampling': 2, # "4:2:0" - 'quantization': [ - [20, 16, 25, 39, 50, 46, 62, 68, - 16, 18, 23, 38, 38, 53, 65, 68, - 25, 23, 31, 38, 53, 65, 68, 68, - 39, 38, 38, 53, 65, 68, 68, 68, - 50, 38, 53, 65, 68, 68, 68, 68, - 46, 53, 65, 68, 68, 68, 68, 68, - 62, 65, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68], - [21, 25, 32, 38, 54, 68, 68, 68, - 25, 28, 24, 38, 54, 68, 68, 68, - 32, 24, 32, 43, 66, 68, 68, 68, - 38, 38, 43, 53, 68, 68, 68, 68, - 54, 54, 66, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68] - ]}, - 'web_medium': {'subsampling': 2, # "4:2:0" - 'quantization': [ - [16, 11, 11, 16, 23, 27, 31, 30, - 11, 12, 12, 15, 20, 23, 23, 30, - 11, 12, 13, 16, 23, 26, 35, 47, - 16, 15, 16, 23, 26, 37, 47, 64, - 23, 20, 23, 26, 39, 51, 64, 64, - 27, 23, 26, 37, 51, 64, 64, 64, - 31, 23, 35, 47, 64, 64, 64, 64, - 30, 30, 47, 64, 64, 64, 64, 64], - [17, 15, 17, 21, 20, 26, 38, 48, - 15, 19, 18, 17, 20, 26, 35, 43, - 17, 18, 20, 22, 26, 30, 46, 53, - 21, 17, 22, 28, 30, 39, 53, 64, - 20, 20, 26, 30, 39, 48, 64, 64, - 26, 26, 30, 39, 48, 63, 64, 64, - 38, 35, 46, 53, 64, 64, 64, 64, - 48, 43, 53, 64, 64, 64, 64, 64] - ]}, - 'web_high': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [6, 4, 4, 6, 9, 11, 12, 16, - 4, 5, 5, 6, 8, 10, 12, 12, - 4, 5, 5, 6, 10, 12, 14, 19, - 6, 6, 6, 11, 12, 15, 19, 28, - 9, 8, 10, 12, 16, 20, 27, 31, - 11, 10, 12, 15, 20, 27, 31, 31, - 12, 12, 14, 19, 27, 31, 31, 31, - 16, 12, 19, 28, 31, 31, 31, 31], - [7, 7, 13, 24, 26, 31, 31, 31, - 7, 12, 16, 21, 31, 31, 31, 31, - 13, 16, 17, 31, 31, 31, 31, 31, - 24, 21, 31, 31, 31, 31, 31, 31, - 26, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31, - 31, 31, 31, 31, 31, 31, 31, 31] - ]}, - 'web_very_high': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [2, 2, 2, 2, 3, 4, 5, 6, - 2, 2, 2, 2, 3, 4, 5, 6, - 2, 2, 2, 2, 4, 5, 7, 9, - 2, 2, 2, 4, 5, 7, 9, 12, - 3, 3, 4, 5, 8, 10, 12, 12, - 4, 4, 5, 7, 10, 12, 12, 12, - 5, 5, 7, 9, 12, 12, 12, 12, - 6, 6, 9, 12, 12, 12, 12, 12], - [3, 3, 5, 9, 13, 15, 15, 15, - 3, 4, 6, 11, 14, 12, 12, 12, - 5, 6, 9, 14, 12, 12, 12, 12, - 9, 11, 14, 12, 12, 12, 12, 12, - 13, 14, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12] - ]}, - 'web_maximum': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 2, 2, - 1, 1, 1, 1, 1, 2, 2, 3, - 1, 1, 1, 1, 2, 2, 3, 3, - 1, 1, 1, 2, 2, 3, 3, 3, - 1, 1, 2, 2, 3, 3, 3, 3], - [1, 1, 1, 2, 2, 3, 3, 3, - 1, 1, 1, 2, 3, 3, 3, 3, - 1, 1, 1, 3, 3, 3, 3, 3, - 2, 2, 3, 3, 3, 3, 3, 3, - 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3] - ]}, - 'low': {'subsampling': 2, # "4:2:0" - 'quantization': [ - [18, 14, 14, 21, 30, 35, 34, 17, - 14, 16, 16, 19, 26, 23, 12, 12, - 14, 16, 17, 21, 23, 12, 12, 12, - 21, 19, 21, 23, 12, 12, 12, 12, - 30, 26, 23, 12, 12, 12, 12, 12, - 35, 23, 12, 12, 12, 12, 12, 12, - 34, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12], - [20, 19, 22, 27, 20, 20, 17, 17, - 19, 25, 23, 14, 14, 12, 12, 12, - 22, 23, 14, 14, 12, 12, 12, 12, - 27, 14, 14, 12, 12, 12, 12, 12, - 20, 14, 12, 12, 12, 12, 12, 12, - 20, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12] - ]}, - 'medium': {'subsampling': 2, # "4:2:0" - 'quantization': [ - [12, 8, 8, 12, 17, 21, 24, 17, - 8, 9, 9, 11, 15, 19, 12, 12, - 8, 9, 10, 12, 19, 12, 12, 12, - 12, 11, 12, 21, 12, 12, 12, 12, - 17, 15, 19, 12, 12, 12, 12, 12, - 21, 19, 12, 12, 12, 12, 12, 12, - 24, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12], - [13, 11, 13, 16, 20, 20, 17, 17, - 11, 14, 14, 14, 14, 12, 12, 12, - 13, 14, 14, 14, 12, 12, 12, 12, - 16, 14, 14, 12, 12, 12, 12, 12, - 20, 14, 12, 12, 12, 12, 12, 12, - 20, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12] - ]}, - 'high': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [6, 4, 4, 6, 9, 11, 12, 16, - 4, 5, 5, 6, 8, 10, 12, 12, - 4, 5, 5, 6, 10, 12, 12, 12, - 6, 6, 6, 11, 12, 12, 12, 12, - 9, 8, 10, 12, 12, 12, 12, 12, - 11, 10, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, - 16, 12, 12, 12, 12, 12, 12, 12], - [7, 7, 13, 24, 20, 20, 17, 17, - 7, 12, 16, 14, 14, 12, 12, 12, - 13, 16, 14, 14, 12, 12, 12, 12, - 24, 14, 14, 12, 12, 12, 12, 12, - 20, 14, 12, 12, 12, 12, 12, 12, - 20, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12, - 17, 12, 12, 12, 12, 12, 12, 12] - ]}, - 'maximum': {'subsampling': 0, # "4:4:4" - 'quantization': [ - [2, 2, 2, 2, 3, 4, 5, 6, - 2, 2, 2, 2, 3, 4, 5, 6, - 2, 2, 2, 2, 4, 5, 7, 9, - 2, 2, 2, 4, 5, 7, 9, 12, - 3, 3, 4, 5, 8, 10, 12, 12, - 4, 4, 5, 7, 10, 12, 12, 12, - 5, 5, 7, 9, 12, 12, 12, 12, - 6, 6, 9, 12, 12, 12, 12, 12], - [3, 3, 5, 9, 13, 15, 15, 15, - 3, 4, 6, 10, 14, 12, 12, 12, - 5, 6, 9, 14, 12, 12, 12, 12, - 9, 10, 14, 12, 12, 12, 12, 12, - 13, 14, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12, - 15, 12, 12, 12, 12, 12, 12, 12] - ]}, -} -# fmt: on diff --git a/PIL/McIdasImagePlugin.py b/PIL/McIdasImagePlugin.py deleted file mode 100644 index cd047fe..0000000 --- a/PIL/McIdasImagePlugin.py +++ /dev/null @@ -1,75 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Basic McIdas support for PIL -# -# History: -# 1997-05-05 fl Created (8-bit images only) -# 2009-03-08 fl Added 16/32-bit support. -# -# Thanks to Richard Jones and Craig Swank for specs and samples. -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# - -import struct - -from . import Image, ImageFile - - -def _accept(s): - return s[:8] == b"\x00\x00\x00\x00\x00\x00\x00\x04" - - -## -# Image plugin for McIdas area images. - - -class McIdasImageFile(ImageFile.ImageFile): - - format = "MCIDAS" - format_description = "McIdas area file" - - def _open(self): - - # parse area file directory - s = self.fp.read(256) - if not _accept(s) or len(s) != 256: - raise SyntaxError("not an McIdas area file") - - self.area_descriptor_raw = s - self.area_descriptor = w = [0] + list(struct.unpack("!64i", s)) - - # get mode - if w[11] == 1: - mode = rawmode = "L" - elif w[11] == 2: - # FIXME: add memory map support - mode = "I" - rawmode = "I;16B" - elif w[11] == 4: - # FIXME: add memory map support - mode = "I" - rawmode = "I;32B" - else: - raise SyntaxError("unsupported McIdas format") - - self.mode = mode - self._size = w[10], w[9] - - offset = w[34] + w[15] - stride = w[15] + w[10] * w[11] * w[14] - - self.tile = [("raw", (0, 0) + self.size, offset, (rawmode, stride, 1))] - - -# -------------------------------------------------------------------- -# registry - -Image.register_open(McIdasImageFile.format, McIdasImageFile, _accept) - -# no default extension diff --git a/PIL/MicImagePlugin.py b/PIL/MicImagePlugin.py deleted file mode 100644 index 2aed260..0000000 --- a/PIL/MicImagePlugin.py +++ /dev/null @@ -1,107 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Microsoft Image Composer support for PIL -# -# Notes: -# uses TiffImagePlugin.py to read the actual image streams -# -# History: -# 97-01-20 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# - - -import olefile - -from . import Image, TiffImagePlugin - -# -# -------------------------------------------------------------------- - - -def _accept(prefix): - return prefix[:8] == olefile.MAGIC - - -## -# Image plugin for Microsoft's Image Composer file format. - - -class MicImageFile(TiffImagePlugin.TiffImageFile): - - format = "MIC" - format_description = "Microsoft Image Composer" - _close_exclusive_fp_after_loading = False - - def _open(self): - - # read the OLE directory and see if this is a likely - # to be a Microsoft Image Composer file - - try: - self.ole = olefile.OleFileIO(self.fp) - except OSError as e: - raise SyntaxError("not an MIC file; invalid OLE file") from e - - # find ACI subfiles with Image members (maybe not the - # best way to identify MIC files, but what the... ;-) - - self.images = [] - for path in self.ole.listdir(): - if path[1:] and path[0][-4:] == ".ACI" and path[1] == "Image": - self.images.append(path) - - # if we didn't find any images, this is probably not - # an MIC file. - if not self.images: - raise SyntaxError("not an MIC file; no image entries") - - self.__fp = self.fp - self.frame = None - self._n_frames = len(self.images) - self.is_animated = self._n_frames > 1 - - if len(self.images) > 1: - self.category = Image.CONTAINER - - self.seek(0) - - def seek(self, frame): - if not self._seek_check(frame): - return - try: - filename = self.images[frame] - except IndexError as e: - raise EOFError("no such frame") from e - - self.fp = self.ole.openstream(filename) - - TiffImagePlugin.TiffImageFile._open(self) - - self.frame = frame - - def tell(self): - return self.frame - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -# -# -------------------------------------------------------------------- - -Image.register_open(MicImageFile.format, MicImageFile, _accept) - -Image.register_extension(MicImageFile.format, ".mic") diff --git a/PIL/MpegImagePlugin.py b/PIL/MpegImagePlugin.py deleted file mode 100644 index a358dfd..0000000 --- a/PIL/MpegImagePlugin.py +++ /dev/null @@ -1,83 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# MPEG file handling -# -# History: -# 95-09-09 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1995. -# -# See the README file for information on usage and redistribution. -# - - -from . import Image, ImageFile -from ._binary import i8 - -# -# Bitstream parser - - -class BitStream: - def __init__(self, fp): - self.fp = fp - self.bits = 0 - self.bitbuffer = 0 - - def next(self): - return i8(self.fp.read(1)) - - def peek(self, bits): - while self.bits < bits: - c = self.next() - if c < 0: - self.bits = 0 - continue - self.bitbuffer = (self.bitbuffer << 8) + c - self.bits += 8 - return self.bitbuffer >> (self.bits - bits) & (1 << bits) - 1 - - def skip(self, bits): - while self.bits < bits: - self.bitbuffer = (self.bitbuffer << 8) + i8(self.fp.read(1)) - self.bits += 8 - self.bits = self.bits - bits - - def read(self, bits): - v = self.peek(bits) - self.bits = self.bits - bits - return v - - -## -# Image plugin for MPEG streams. This plugin can identify a stream, -# but it cannot read it. - - -class MpegImageFile(ImageFile.ImageFile): - - format = "MPEG" - format_description = "MPEG" - - def _open(self): - - s = BitStream(self.fp) - - if s.read(32) != 0x1B3: - raise SyntaxError("not an MPEG file") - - self.mode = "RGB" - self._size = s.read(12), s.read(12) - - -# -------------------------------------------------------------------- -# Registry stuff - -Image.register_open(MpegImageFile.format, MpegImageFile) - -Image.register_extensions(MpegImageFile.format, [".mpg", ".mpeg"]) - -Image.register_mime(MpegImageFile.format, "video/mpeg") diff --git a/PIL/MpoImagePlugin.py b/PIL/MpoImagePlugin.py deleted file mode 100644 index 575cc9c..0000000 --- a/PIL/MpoImagePlugin.py +++ /dev/null @@ -1,134 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# MPO file handling -# -# See "Multi-Picture Format" (CIPA DC-007-Translation 2009, Standard of the -# Camera & Imaging Products Association) -# -# The multi-picture object combines multiple JPEG images (with a modified EXIF -# data format) into a single file. While it can theoretically be used much like -# a GIF animation, it is commonly used to represent 3D photographs and is (as -# of this writing) the most commonly used format by 3D cameras. -# -# History: -# 2014-03-13 Feneric Created -# -# See the README file for information on usage and redistribution. -# - -from . import Image, ImageFile, JpegImagePlugin -from ._binary import i16be as i16 - - -def _accept(prefix): - return JpegImagePlugin._accept(prefix) - - -def _save(im, fp, filename): - # Note that we can only save the current frame at present - return JpegImagePlugin._save(im, fp, filename) - - -## -# Image plugin for MPO images. - - -class MpoImageFile(JpegImagePlugin.JpegImageFile): - - format = "MPO" - format_description = "MPO (CIPA DC-007)" - _close_exclusive_fp_after_loading = False - - def _open(self): - self.fp.seek(0) # prep the fp in order to pass the JPEG test - JpegImagePlugin.JpegImageFile._open(self) - self._after_jpeg_open() - - def _after_jpeg_open(self, mpheader=None): - self.mpinfo = mpheader if mpheader is not None else self._getmp() - self.n_frames = self.mpinfo[0xB001] - self.__mpoffsets = [ - mpent["DataOffset"] + self.info["mpoffset"] for mpent in self.mpinfo[0xB002] - ] - self.__mpoffsets[0] = 0 - # Note that the following assertion will only be invalid if something - # gets broken within JpegImagePlugin. - assert self.n_frames == len(self.__mpoffsets) - del self.info["mpoffset"] # no longer needed - self.is_animated = self.n_frames > 1 - self.__fp = self.fp # FIXME: hack - self.__fp.seek(self.__mpoffsets[0]) # get ready to read first frame - self.__frame = 0 - self.offset = 0 - # for now we can only handle reading and individual frame extraction - self.readonly = 1 - - def load_seek(self, pos): - self.__fp.seek(pos) - - def seek(self, frame): - if not self._seek_check(frame): - return - self.fp = self.__fp - self.offset = self.__mpoffsets[frame] - - self.fp.seek(self.offset + 2) # skip SOI marker - segment = self.fp.read(2) - if not segment: - raise ValueError("No data found for frame") - if i16(segment) == 0xFFE1: # APP1 - n = i16(self.fp.read(2)) - 2 - self.info["exif"] = ImageFile._safe_read(self.fp, n) - - exif = self.getexif() - if 40962 in exif and 40963 in exif: - self._size = (exif[40962], exif[40963]) - elif "exif" in self.info: - del self.info["exif"] - - self.tile = [("jpeg", (0, 0) + self.size, self.offset, (self.mode, ""))] - self.__frame = frame - - def tell(self): - return self.__frame - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - @staticmethod - def adopt(jpeg_instance, mpheader=None): - """ - Transform the instance of JpegImageFile into - an instance of MpoImageFile. - After the call, the JpegImageFile is extended - to be an MpoImageFile. - - This is essentially useful when opening a JPEG - file that reveals itself as an MPO, to avoid - double call to _open. - """ - jpeg_instance.__class__ = MpoImageFile - jpeg_instance._after_jpeg_open(mpheader) - return jpeg_instance - - -# --------------------------------------------------------------------- -# Registry stuff - -# Note that since MPO shares a factory with JPEG, we do not need to do a -# separate registration for it here. -# Image.register_open(MpoImageFile.format, -# JpegImagePlugin.jpeg_factory, _accept) -Image.register_save(MpoImageFile.format, _save) - -Image.register_extension(MpoImageFile.format, ".mpo") - -Image.register_mime(MpoImageFile.format, "image/mpo") diff --git a/PIL/MspImagePlugin.py b/PIL/MspImagePlugin.py deleted file mode 100644 index e1fdc1f..0000000 --- a/PIL/MspImagePlugin.py +++ /dev/null @@ -1,194 +0,0 @@ -# -# The Python Imaging Library. -# -# MSP file handling -# -# This is the format used by the Paint program in Windows 1 and 2. -# -# History: -# 95-09-05 fl Created -# 97-01-03 fl Read/write MSP images -# 17-02-21 es Fixed RLE interpretation -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1995-97. -# Copyright (c) Eric Soroos 2017. -# -# See the README file for information on usage and redistribution. -# -# More info on this format: https://archive.org/details/gg243631 -# Page 313: -# Figure 205. Windows Paint Version 1: "DanM" Format -# Figure 206. Windows Paint Version 2: "LinS" Format. Used in Windows V2.03 -# -# See also: http://www.fileformat.info/format/mspaint/egff.htm - -import io -import struct - -from . import Image, ImageFile -from ._binary import i16le as i16 -from ._binary import o16le as o16 - -# -# read MSP files - - -def _accept(prefix): - return prefix[:4] in [b"DanM", b"LinS"] - - -## -# Image plugin for Windows MSP images. This plugin supports both -# uncompressed (Windows 1.0). - - -class MspImageFile(ImageFile.ImageFile): - - format = "MSP" - format_description = "Windows Paint" - - def _open(self): - - # Header - s = self.fp.read(32) - if not _accept(s): - raise SyntaxError("not an MSP file") - - # Header checksum - checksum = 0 - for i in range(0, 32, 2): - checksum = checksum ^ i16(s, i) - if checksum != 0: - raise SyntaxError("bad MSP checksum") - - self.mode = "1" - self._size = i16(s, 4), i16(s, 6) - - if s[:4] == b"DanM": - self.tile = [("raw", (0, 0) + self.size, 32, ("1", 0, 1))] - else: - self.tile = [("MSP", (0, 0) + self.size, 32, None)] - - -class MspDecoder(ImageFile.PyDecoder): - # The algo for the MSP decoder is from - # http://www.fileformat.info/format/mspaint/egff.htm - # cc-by-attribution -- That page references is taken from the - # Encyclopedia of Graphics File Formats and is licensed by - # O'Reilly under the Creative Common/Attribution license - # - # For RLE encoded files, the 32byte header is followed by a scan - # line map, encoded as one 16bit word of encoded byte length per - # line. - # - # NOTE: the encoded length of the line can be 0. This was not - # handled in the previous version of this encoder, and there's no - # mention of how to handle it in the documentation. From the few - # examples I've seen, I've assumed that it is a fill of the - # background color, in this case, white. - # - # - # Pseudocode of the decoder: - # Read a BYTE value as the RunType - # If the RunType value is zero - # Read next byte as the RunCount - # Read the next byte as the RunValue - # Write the RunValue byte RunCount times - # If the RunType value is non-zero - # Use this value as the RunCount - # Read and write the next RunCount bytes literally - # - # e.g.: - # 0x00 03 ff 05 00 01 02 03 04 - # would yield the bytes: - # 0xff ff ff 00 01 02 03 04 - # - # which are then interpreted as a bit packed mode '1' image - - _pulls_fd = True - - def decode(self, buffer): - - img = io.BytesIO() - blank_line = bytearray((0xFF,) * ((self.state.xsize + 7) // 8)) - try: - self.fd.seek(32) - rowmap = struct.unpack_from( - f"<{self.state.ysize}H", self.fd.read(self.state.ysize * 2) - ) - except struct.error as e: - raise OSError("Truncated MSP file in row map") from e - - for x, rowlen in enumerate(rowmap): - try: - if rowlen == 0: - img.write(blank_line) - continue - row = self.fd.read(rowlen) - if len(row) != rowlen: - raise OSError( - "Truncated MSP file, expected %d bytes on row %s", (rowlen, x) - ) - idx = 0 - while idx < rowlen: - runtype = row[idx] - idx += 1 - if runtype == 0: - (runcount, runval) = struct.unpack_from("Bc", row, idx) - img.write(runval * runcount) - idx += 2 - else: - runcount = runtype - img.write(row[idx : idx + runcount]) - idx += runcount - - except struct.error as e: - raise OSError(f"Corrupted MSP file in row {x}") from e - - self.set_as_raw(img.getvalue(), ("1", 0, 1)) - - return 0, 0 - - -Image.register_decoder("MSP", MspDecoder) - - -# -# write MSP files (uncompressed only) - - -def _save(im, fp, filename): - - if im.mode != "1": - raise OSError(f"cannot write mode {im.mode} as MSP") - - # create MSP header - header = [0] * 16 - - header[0], header[1] = i16(b"Da"), i16(b"nM") # version 1 - header[2], header[3] = im.size - header[4], header[5] = 1, 1 - header[6], header[7] = 1, 1 - header[8], header[9] = im.size - - checksum = 0 - for h in header: - checksum = checksum ^ h - header[12] = checksum # FIXME: is this the right field? - - # header - for h in header: - fp.write(o16(h)) - - # image body - ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 32, ("1", 0, 1))]) - - -# -# registry - -Image.register_open(MspImageFile.format, MspImageFile, _accept) -Image.register_save(MspImageFile.format, _save) - -Image.register_extension(MspImageFile.format, ".msp") diff --git a/PIL/PSDraw.py b/PIL/PSDraw.py deleted file mode 100644 index c1bd933..0000000 --- a/PIL/PSDraw.py +++ /dev/null @@ -1,235 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# Simple PostScript graphics interface -# -# History: -# 1996-04-20 fl Created -# 1999-01-10 fl Added gsave/grestore to image method -# 2005-05-04 fl Fixed floating point issue in image (from Eric Etheridge) -# -# Copyright (c) 1997-2005 by Secret Labs AB. All rights reserved. -# Copyright (c) 1996 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -import sys - -from . import EpsImagePlugin - -## -# Simple PostScript graphics interface. - - -class PSDraw: - """ - Sets up printing to the given file. If ``fp`` is omitted, - :py:data:`sys.stdout` is assumed. - """ - - def __init__(self, fp=None): - if not fp: - fp = sys.stdout - self.fp = fp - - def _fp_write(self, to_write): - if self.fp == sys.stdout: - self.fp.write(to_write) - else: - self.fp.write(bytes(to_write, "UTF-8")) - - def begin_document(self, id=None): - """Set up printing of a document. (Write PostScript DSC header.)""" - # FIXME: incomplete - self._fp_write( - "%!PS-Adobe-3.0\n" - "save\n" - "/showpage { } def\n" - "%%EndComments\n" - "%%BeginDocument\n" - ) - # self._fp_write(ERROR_PS) # debugging! - self._fp_write(EDROFF_PS) - self._fp_write(VDI_PS) - self._fp_write("%%EndProlog\n") - self.isofont = {} - - def end_document(self): - """Ends printing. (Write PostScript DSC footer.)""" - self._fp_write("%%EndDocument\nrestore showpage\n%%End\n") - if hasattr(self.fp, "flush"): - self.fp.flush() - - def setfont(self, font, size): - """ - Selects which font to use. - - :param font: A PostScript font name - :param size: Size in points. - """ - if font not in self.isofont: - # reencode font - self._fp_write(f"/PSDraw-{font} ISOLatin1Encoding /{font} E\n") - self.isofont[font] = 1 - # rough - self._fp_write(f"/F0 {size} /PSDraw-{font} F\n") - - def line(self, xy0, xy1): - """ - Draws a line between the two points. Coordinates are given in - PostScript point coordinates (72 points per inch, (0, 0) is the lower - left corner of the page). - """ - self._fp_write("%d %d %d %d Vl\n" % (*xy0, *xy1)) - - def rectangle(self, box): - """ - Draws a rectangle. - - :param box: A 4-tuple of integers whose order and function is currently - undocumented. - - Hint: the tuple is passed into this format string: - - .. code-block:: python - - %d %d M %d %d 0 Vr\n - """ - self._fp_write("%d %d M %d %d 0 Vr\n" % box) - - def text(self, xy, text): - """ - Draws text at the given position. You must use - :py:meth:`~PIL.PSDraw.PSDraw.setfont` before calling this method. - """ - text = "\\(".join(text.split("(")) - text = "\\)".join(text.split(")")) - self._fp_write(f"{xy[0]} {xy[1]} M ({text}) S\n") - - def image(self, box, im, dpi=None): - """Draw a PIL image, centered in the given box.""" - # default resolution depends on mode - if not dpi: - if im.mode == "1": - dpi = 200 # fax - else: - dpi = 100 # greyscale - # image size (on paper) - x = im.size[0] * 72 / dpi - y = im.size[1] * 72 / dpi - # max allowed size - xmax = float(box[2] - box[0]) - ymax = float(box[3] - box[1]) - if x > xmax: - y = y * xmax / x - x = xmax - if y > ymax: - x = x * ymax / y - y = ymax - dx = (xmax - x) / 2 + box[0] - dy = (ymax - y) / 2 + box[1] - self._fp_write(f"gsave\n{dx:f} {dy:f} translate\n") - if (x, y) != im.size: - # EpsImagePlugin._save prints the image at (0,0,xsize,ysize) - sx = x / im.size[0] - sy = y / im.size[1] - self._fp_write(f"{sx:f} {sy:f} scale\n") - EpsImagePlugin._save(im, self.fp, None, 0) - self._fp_write("\ngrestore\n") - - -# -------------------------------------------------------------------- -# PostScript driver - -# -# EDROFF.PS -- PostScript driver for Edroff 2 -# -# History: -# 94-01-25 fl: created (edroff 2.04) -# -# Copyright (c) Fredrik Lundh 1994. -# - - -EDROFF_PS = """\ -/S { show } bind def -/P { moveto show } bind def -/M { moveto } bind def -/X { 0 rmoveto } bind def -/Y { 0 exch rmoveto } bind def -/E { findfont - dup maxlength dict begin - { - 1 index /FID ne { def } { pop pop } ifelse - } forall - /Encoding exch def - dup /FontName exch def - currentdict end definefont pop -} bind def -/F { findfont exch scalefont dup setfont - [ exch /setfont cvx ] cvx bind def -} bind def -""" - -# -# VDI.PS -- PostScript driver for VDI meta commands -# -# History: -# 94-01-25 fl: created (edroff 2.04) -# -# Copyright (c) Fredrik Lundh 1994. -# - -VDI_PS = """\ -/Vm { moveto } bind def -/Va { newpath arcn stroke } bind def -/Vl { moveto lineto stroke } bind def -/Vc { newpath 0 360 arc closepath } bind def -/Vr { exch dup 0 rlineto - exch dup neg 0 exch rlineto - exch neg 0 rlineto - 0 exch rlineto - 100 div setgray fill 0 setgray } bind def -/Tm matrix def -/Ve { Tm currentmatrix pop - translate scale newpath 0 0 .5 0 360 arc closepath - Tm setmatrix -} bind def -/Vf { currentgray exch setgray fill setgray } bind def -""" - -# -# ERROR.PS -- Error handler -# -# History: -# 89-11-21 fl: created (pslist 1.10) -# - -ERROR_PS = """\ -/landscape false def -/errorBUF 200 string def -/errorNL { currentpoint 10 sub exch pop 72 exch moveto } def -errordict begin /handleerror { - initmatrix /Courier findfont 10 scalefont setfont - newpath 72 720 moveto $error begin /newerror false def - (PostScript Error) show errorNL errorNL - (Error: ) show - /errorname load errorBUF cvs show errorNL errorNL - (Command: ) show - /command load dup type /stringtype ne { errorBUF cvs } if show - errorNL errorNL - (VMstatus: ) show - vmstatus errorBUF cvs show ( bytes available, ) show - errorBUF cvs show ( bytes used at level ) show - errorBUF cvs show errorNL errorNL - (Operand stargck: ) show errorNL /ostargck load { - dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL - } forall errorNL - (Execution stargck: ) show errorNL /estargck load { - dup type /stringtype ne { errorBUF cvs } if 72 0 rmoveto show errorNL - } forall - end showpage -} def end -""" diff --git a/PIL/PaletteFile.py b/PIL/PaletteFile.py deleted file mode 100644 index 6ccaa1f..0000000 --- a/PIL/PaletteFile.py +++ /dev/null @@ -1,53 +0,0 @@ -# -# Python Imaging Library -# $Id$ -# -# stuff to read simple, teragon-style palette files -# -# History: -# 97-08-23 fl Created -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# - -from ._binary import o8 - - -class PaletteFile: - """File handler for Teragon-style palette files.""" - - rawmode = "RGB" - - def __init__(self, fp): - - self.palette = [(i, i, i) for i in range(256)] - - while True: - - s = fp.readline() - - if not s: - break - if s[0:1] == b"#": - continue - if len(s) > 100: - raise SyntaxError("bad palette file") - - v = [int(x) for x in s.split()] - try: - [i, r, g, b] = v - except ValueError: - [i, r] = v - g = b = r - - if 0 <= i <= 255: - self.palette[i] = o8(r) + o8(g) + o8(b) - - self.palette = b"".join(self.palette) - - def getpalette(self): - - return self.palette, self.rawmode diff --git a/PIL/PalmImagePlugin.py b/PIL/PalmImagePlugin.py deleted file mode 100644 index 700f10e..0000000 --- a/PIL/PalmImagePlugin.py +++ /dev/null @@ -1,227 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# - -## -# Image plugin for Palm pixmap images (output only). -## - -from . import Image, ImageFile -from ._binary import o8 -from ._binary import o16be as o16b - -# fmt: off -_Palm8BitColormapValues = ( - (255, 255, 255), (255, 204, 255), (255, 153, 255), (255, 102, 255), - (255, 51, 255), (255, 0, 255), (255, 255, 204), (255, 204, 204), - (255, 153, 204), (255, 102, 204), (255, 51, 204), (255, 0, 204), - (255, 255, 153), (255, 204, 153), (255, 153, 153), (255, 102, 153), - (255, 51, 153), (255, 0, 153), (204, 255, 255), (204, 204, 255), - (204, 153, 255), (204, 102, 255), (204, 51, 255), (204, 0, 255), - (204, 255, 204), (204, 204, 204), (204, 153, 204), (204, 102, 204), - (204, 51, 204), (204, 0, 204), (204, 255, 153), (204, 204, 153), - (204, 153, 153), (204, 102, 153), (204, 51, 153), (204, 0, 153), - (153, 255, 255), (153, 204, 255), (153, 153, 255), (153, 102, 255), - (153, 51, 255), (153, 0, 255), (153, 255, 204), (153, 204, 204), - (153, 153, 204), (153, 102, 204), (153, 51, 204), (153, 0, 204), - (153, 255, 153), (153, 204, 153), (153, 153, 153), (153, 102, 153), - (153, 51, 153), (153, 0, 153), (102, 255, 255), (102, 204, 255), - (102, 153, 255), (102, 102, 255), (102, 51, 255), (102, 0, 255), - (102, 255, 204), (102, 204, 204), (102, 153, 204), (102, 102, 204), - (102, 51, 204), (102, 0, 204), (102, 255, 153), (102, 204, 153), - (102, 153, 153), (102, 102, 153), (102, 51, 153), (102, 0, 153), - (51, 255, 255), (51, 204, 255), (51, 153, 255), (51, 102, 255), - (51, 51, 255), (51, 0, 255), (51, 255, 204), (51, 204, 204), - (51, 153, 204), (51, 102, 204), (51, 51, 204), (51, 0, 204), - (51, 255, 153), (51, 204, 153), (51, 153, 153), (51, 102, 153), - (51, 51, 153), (51, 0, 153), (0, 255, 255), (0, 204, 255), - (0, 153, 255), (0, 102, 255), (0, 51, 255), (0, 0, 255), - (0, 255, 204), (0, 204, 204), (0, 153, 204), (0, 102, 204), - (0, 51, 204), (0, 0, 204), (0, 255, 153), (0, 204, 153), - (0, 153, 153), (0, 102, 153), (0, 51, 153), (0, 0, 153), - (255, 255, 102), (255, 204, 102), (255, 153, 102), (255, 102, 102), - (255, 51, 102), (255, 0, 102), (255, 255, 51), (255, 204, 51), - (255, 153, 51), (255, 102, 51), (255, 51, 51), (255, 0, 51), - (255, 255, 0), (255, 204, 0), (255, 153, 0), (255, 102, 0), - (255, 51, 0), (255, 0, 0), (204, 255, 102), (204, 204, 102), - (204, 153, 102), (204, 102, 102), (204, 51, 102), (204, 0, 102), - (204, 255, 51), (204, 204, 51), (204, 153, 51), (204, 102, 51), - (204, 51, 51), (204, 0, 51), (204, 255, 0), (204, 204, 0), - (204, 153, 0), (204, 102, 0), (204, 51, 0), (204, 0, 0), - (153, 255, 102), (153, 204, 102), (153, 153, 102), (153, 102, 102), - (153, 51, 102), (153, 0, 102), (153, 255, 51), (153, 204, 51), - (153, 153, 51), (153, 102, 51), (153, 51, 51), (153, 0, 51), - (153, 255, 0), (153, 204, 0), (153, 153, 0), (153, 102, 0), - (153, 51, 0), (153, 0, 0), (102, 255, 102), (102, 204, 102), - (102, 153, 102), (102, 102, 102), (102, 51, 102), (102, 0, 102), - (102, 255, 51), (102, 204, 51), (102, 153, 51), (102, 102, 51), - (102, 51, 51), (102, 0, 51), (102, 255, 0), (102, 204, 0), - (102, 153, 0), (102, 102, 0), (102, 51, 0), (102, 0, 0), - (51, 255, 102), (51, 204, 102), (51, 153, 102), (51, 102, 102), - (51, 51, 102), (51, 0, 102), (51, 255, 51), (51, 204, 51), - (51, 153, 51), (51, 102, 51), (51, 51, 51), (51, 0, 51), - (51, 255, 0), (51, 204, 0), (51, 153, 0), (51, 102, 0), - (51, 51, 0), (51, 0, 0), (0, 255, 102), (0, 204, 102), - (0, 153, 102), (0, 102, 102), (0, 51, 102), (0, 0, 102), - (0, 255, 51), (0, 204, 51), (0, 153, 51), (0, 102, 51), - (0, 51, 51), (0, 0, 51), (0, 255, 0), (0, 204, 0), - (0, 153, 0), (0, 102, 0), (0, 51, 0), (17, 17, 17), - (34, 34, 34), (68, 68, 68), (85, 85, 85), (119, 119, 119), - (136, 136, 136), (170, 170, 170), (187, 187, 187), (221, 221, 221), - (238, 238, 238), (192, 192, 192), (128, 0, 0), (128, 0, 128), - (0, 128, 0), (0, 128, 128), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0), - (0, 0, 0), (0, 0, 0), (0, 0, 0), (0, 0, 0)) -# fmt: on - - -# so build a prototype image to be used for palette resampling -def build_prototype_image(): - image = Image.new("L", (1, len(_Palm8BitColormapValues))) - image.putdata(list(range(len(_Palm8BitColormapValues)))) - palettedata = () - for colormapValue in _Palm8BitColormapValues: - palettedata += colormapValue - palettedata += (0, 0, 0) * (256 - len(_Palm8BitColormapValues)) - image.putpalette(palettedata) - return image - - -Palm8BitColormapImage = build_prototype_image() - -# OK, we now have in Palm8BitColormapImage, -# a "P"-mode image with the right palette -# -# -------------------------------------------------------------------- - -_FLAGS = {"custom-colormap": 0x4000, "is-compressed": 0x8000, "has-transparent": 0x2000} - -_COMPRESSION_TYPES = {"none": 0xFF, "rle": 0x01, "scanline": 0x00} - - -# -# -------------------------------------------------------------------- - -## -# (Internal) Image save plugin for the Palm format. - - -def _save(im, fp, filename): - - if im.mode == "P": - - # we assume this is a color Palm image with the standard colormap, - # unless the "info" dict has a "custom-colormap" field - - rawmode = "P" - bpp = 8 - version = 1 - - elif im.mode == "L": - if im.encoderinfo.get("bpp") in (1, 2, 4): - # this is 8-bit grayscale, so we shift it to get the high-order bits, - # and invert it because - # Palm does greyscale from white (0) to black (1) - bpp = im.encoderinfo["bpp"] - im = im.point( - lambda x, shift=8 - bpp, maxval=(1 << bpp) - 1: maxval - (x >> shift) - ) - elif im.info.get("bpp") in (1, 2, 4): - # here we assume that even though the inherent mode is 8-bit grayscale, - # only the lower bpp bits are significant. - # We invert them to match the Palm. - bpp = im.info["bpp"] - im = im.point(lambda x, maxval=(1 << bpp) - 1: maxval - (x & maxval)) - else: - raise OSError(f"cannot write mode {im.mode} as Palm") - - # we ignore the palette here - im.mode = "P" - rawmode = "P;" + str(bpp) - version = 1 - - elif im.mode == "1": - - # monochrome -- write it inverted, as is the Palm standard - rawmode = "1;I" - bpp = 1 - version = 0 - - else: - - raise OSError(f"cannot write mode {im.mode} as Palm") - - # - # make sure image data is available - im.load() - - # write header - - cols = im.size[0] - rows = im.size[1] - - rowbytes = int((cols + (16 // bpp - 1)) / (16 // bpp)) * 2 - transparent_index = 0 - compression_type = _COMPRESSION_TYPES["none"] - - flags = 0 - if im.mode == "P" and "custom-colormap" in im.info: - flags = flags & _FLAGS["custom-colormap"] - colormapsize = 4 * 256 + 2 - colormapmode = im.palette.mode - colormap = im.getdata().getpalette() - else: - colormapsize = 0 - - if "offset" in im.info: - offset = (rowbytes * rows + 16 + 3 + colormapsize) // 4 - else: - offset = 0 - - fp.write(o16b(cols) + o16b(rows) + o16b(rowbytes) + o16b(flags)) - fp.write(o8(bpp)) - fp.write(o8(version)) - fp.write(o16b(offset)) - fp.write(o8(transparent_index)) - fp.write(o8(compression_type)) - fp.write(o16b(0)) # reserved by Palm - - # now write colormap if necessary - - if colormapsize > 0: - fp.write(o16b(256)) - for i in range(256): - fp.write(o8(i)) - if colormapmode == "RGB": - fp.write( - o8(colormap[3 * i]) - + o8(colormap[3 * i + 1]) - + o8(colormap[3 * i + 2]) - ) - elif colormapmode == "RGBA": - fp.write( - o8(colormap[4 * i]) - + o8(colormap[4 * i + 1]) - + o8(colormap[4 * i + 2]) - ) - - # now convert data to raw form - ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, rowbytes, 1))]) - - if hasattr(fp, "flush"): - fp.flush() - - -# -# -------------------------------------------------------------------- - -Image.register_save("Palm", _save) - -Image.register_extension("Palm", ".palm") - -Image.register_mime("Palm", "image/palm") diff --git a/PIL/PcdImagePlugin.py b/PIL/PcdImagePlugin.py deleted file mode 100644 index 38caf5c..0000000 --- a/PIL/PcdImagePlugin.py +++ /dev/null @@ -1,63 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PCD file handling -# -# History: -# 96-05-10 fl Created -# 96-05-27 fl Added draft mode (128x192, 256x384) -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# - - -from . import Image, ImageFile - -## -# Image plugin for PhotoCD images. This plugin only reads the 768x512 -# image from the file; higher resolutions are encoded in a proprietary -# encoding. - - -class PcdImageFile(ImageFile.ImageFile): - - format = "PCD" - format_description = "Kodak PhotoCD" - - def _open(self): - - # rough - self.fp.seek(2048) - s = self.fp.read(2048) - - if s[:4] != b"PCD_": - raise SyntaxError("not a PCD file") - - orientation = s[1538] & 3 - self.tile_post_rotate = None - if orientation == 1: - self.tile_post_rotate = 90 - elif orientation == 3: - self.tile_post_rotate = -90 - - self.mode = "RGB" - self._size = 768, 512 # FIXME: not correct for rotated images! - self.tile = [("pcd", (0, 0) + self.size, 96 * 2048, None)] - - def load_end(self): - if self.tile_post_rotate: - # Handle rotated PCDs - self.im = self.im.rotate(self.tile_post_rotate) - self._size = self.im.size - - -# -# registry - -Image.register_open(PcdImageFile.format, PcdImageFile) - -Image.register_extension(PcdImageFile.format, ".pcd") diff --git a/PIL/PcfFontFile.py b/PIL/PcfFontFile.py deleted file mode 100644 index 6a4eb22..0000000 --- a/PIL/PcfFontFile.py +++ /dev/null @@ -1,248 +0,0 @@ -# -# THIS IS WORK IN PROGRESS -# -# The Python Imaging Library -# $Id$ -# -# portable compiled font file parser -# -# history: -# 1997-08-19 fl created -# 2003-09-13 fl fixed loading of unicode fonts -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1997-2003 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -import io - -from . import FontFile, Image -from ._binary import i8 -from ._binary import i16be as b16 -from ._binary import i16le as l16 -from ._binary import i32be as b32 -from ._binary import i32le as l32 - -# -------------------------------------------------------------------- -# declarations - -PCF_MAGIC = 0x70636601 # "\x01fcp" - -PCF_PROPERTIES = 1 << 0 -PCF_ACCELERATORS = 1 << 1 -PCF_METRICS = 1 << 2 -PCF_BITMAPS = 1 << 3 -PCF_INK_METRICS = 1 << 4 -PCF_BDF_ENCODINGS = 1 << 5 -PCF_SWIDTHS = 1 << 6 -PCF_GLYPH_NAMES = 1 << 7 -PCF_BDF_ACCELERATORS = 1 << 8 - -BYTES_PER_ROW = [ - lambda bits: ((bits + 7) >> 3), - lambda bits: ((bits + 15) >> 3) & ~1, - lambda bits: ((bits + 31) >> 3) & ~3, - lambda bits: ((bits + 63) >> 3) & ~7, -] - - -def sz(s, o): - return s[o : s.index(b"\0", o)] - - -class PcfFontFile(FontFile.FontFile): - """Font file plugin for the X11 PCF format.""" - - name = "name" - - def __init__(self, fp, charset_encoding="iso8859-1"): - - self.charset_encoding = charset_encoding - - magic = l32(fp.read(4)) - if magic != PCF_MAGIC: - raise SyntaxError("not a PCF file") - - super().__init__() - - count = l32(fp.read(4)) - self.toc = {} - for i in range(count): - type = l32(fp.read(4)) - self.toc[type] = l32(fp.read(4)), l32(fp.read(4)), l32(fp.read(4)) - - self.fp = fp - - self.info = self._load_properties() - - metrics = self._load_metrics() - bitmaps = self._load_bitmaps(metrics) - encoding = self._load_encoding() - - # - # create glyph structure - - for ch in range(256): - ix = encoding[ch] - if ix is not None: - x, y, l, r, w, a, d, f = metrics[ix] - glyph = (w, 0), (l, d - y, x + l, d), (0, 0, x, y), bitmaps[ix] - self.glyph[ch] = glyph - - def _getformat(self, tag): - - format, size, offset = self.toc[tag] - - fp = self.fp - fp.seek(offset) - - format = l32(fp.read(4)) - - if format & 4: - i16, i32 = b16, b32 - else: - i16, i32 = l16, l32 - - return fp, format, i16, i32 - - def _load_properties(self): - - # - # font properties - - properties = {} - - fp, format, i16, i32 = self._getformat(PCF_PROPERTIES) - - nprops = i32(fp.read(4)) - - # read property description - p = [] - for i in range(nprops): - p.append((i32(fp.read(4)), i8(fp.read(1)), i32(fp.read(4)))) - if nprops & 3: - fp.seek(4 - (nprops & 3), io.SEEK_CUR) # pad - - data = fp.read(i32(fp.read(4))) - - for k, s, v in p: - k = sz(data, k) - if s: - v = sz(data, v) - properties[k] = v - - return properties - - def _load_metrics(self): - - # - # font metrics - - metrics = [] - - fp, format, i16, i32 = self._getformat(PCF_METRICS) - - append = metrics.append - - if (format & 0xFF00) == 0x100: - - # "compressed" metrics - for i in range(i16(fp.read(2))): - left = i8(fp.read(1)) - 128 - right = i8(fp.read(1)) - 128 - width = i8(fp.read(1)) - 128 - ascent = i8(fp.read(1)) - 128 - descent = i8(fp.read(1)) - 128 - xsize = right - left - ysize = ascent + descent - append((xsize, ysize, left, right, width, ascent, descent, 0)) - - else: - - # "jumbo" metrics - for i in range(i32(fp.read(4))): - left = i16(fp.read(2)) - right = i16(fp.read(2)) - width = i16(fp.read(2)) - ascent = i16(fp.read(2)) - descent = i16(fp.read(2)) - attributes = i16(fp.read(2)) - xsize = right - left - ysize = ascent + descent - append((xsize, ysize, left, right, width, ascent, descent, attributes)) - - return metrics - - def _load_bitmaps(self, metrics): - - # - # bitmap data - - bitmaps = [] - - fp, format, i16, i32 = self._getformat(PCF_BITMAPS) - - nbitmaps = i32(fp.read(4)) - - if nbitmaps != len(metrics): - raise OSError("Wrong number of bitmaps") - - offsets = [] - for i in range(nbitmaps): - offsets.append(i32(fp.read(4))) - - bitmapSizes = [] - for i in range(4): - bitmapSizes.append(i32(fp.read(4))) - - # byteorder = format & 4 # non-zero => MSB - bitorder = format & 8 # non-zero => MSB - padindex = format & 3 - - bitmapsize = bitmapSizes[padindex] - offsets.append(bitmapsize) - - data = fp.read(bitmapsize) - - pad = BYTES_PER_ROW[padindex] - mode = "1;R" - if bitorder: - mode = "1" - - for i in range(nbitmaps): - x, y, l, r, w, a, d, f = metrics[i] - b, e = offsets[i], offsets[i + 1] - bitmaps.append(Image.frombytes("1", (x, y), data[b:e], "raw", mode, pad(x))) - - return bitmaps - - def _load_encoding(self): - - # map character code to bitmap index - encoding = [None] * 256 - - fp, format, i16, i32 = self._getformat(PCF_BDF_ENCODINGS) - - firstCol, lastCol = i16(fp.read(2)), i16(fp.read(2)) - firstRow, lastRow = i16(fp.read(2)), i16(fp.read(2)) - - i16(fp.read(2)) # default - - nencoding = (lastCol - firstCol + 1) * (lastRow - firstRow + 1) - - encodingOffsets = [i16(fp.read(2)) for _ in range(nencoding)] - - for i in range(firstCol, len(encoding)): - try: - encodingOffset = encodingOffsets[ - ord(bytearray([i]).decode(self.charset_encoding)) - ] - if encodingOffset != 0xFFFF: - encoding[i] = encodingOffset - except UnicodeDecodeError: - # character is not supported in selected encoding - pass - - return encoding diff --git a/PIL/PcxImagePlugin.py b/PIL/PcxImagePlugin.py deleted file mode 100644 index a24d44b..0000000 --- a/PIL/PcxImagePlugin.py +++ /dev/null @@ -1,213 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PCX file handling -# -# This format was originally used by ZSoft's popular PaintBrush -# program for the IBM PC. It is also supported by many MS-DOS and -# Windows applications, including the Windows PaintBrush program in -# Windows 3. -# -# history: -# 1995-09-01 fl Created -# 1996-05-20 fl Fixed RGB support -# 1997-01-03 fl Fixed 2-bit and 4-bit support -# 1999-02-03 fl Fixed 8-bit support (broken in 1.0b1) -# 1999-02-07 fl Added write support -# 2002-06-09 fl Made 2-bit and 4-bit support a bit more robust -# 2002-07-30 fl Seek from to current position, not beginning of file -# 2003-06-03 fl Extract DPI settings (info["dpi"]) -# -# Copyright (c) 1997-2003 by Secret Labs AB. -# Copyright (c) 1995-2003 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -import io -import logging - -from . import Image, ImageFile, ImagePalette -from ._binary import i16le as i16 -from ._binary import o8 -from ._binary import o16le as o16 - -logger = logging.getLogger(__name__) - - -def _accept(prefix): - return prefix[0] == 10 and prefix[1] in [0, 2, 3, 5] - - -## -# Image plugin for Paintbrush images. - - -class PcxImageFile(ImageFile.ImageFile): - - format = "PCX" - format_description = "Paintbrush" - - def _open(self): - - # header - s = self.fp.read(128) - if not _accept(s): - raise SyntaxError("not a PCX file") - - # image - bbox = i16(s, 4), i16(s, 6), i16(s, 8) + 1, i16(s, 10) + 1 - if bbox[2] <= bbox[0] or bbox[3] <= bbox[1]: - raise SyntaxError("bad PCX image size") - logger.debug("BBox: %s %s %s %s", *bbox) - - # format - version = s[1] - bits = s[3] - planes = s[65] - ignored_stride = i16(s, 66) - logger.debug( - "PCX version %s, bits %s, planes %s, stride %s", - version, - bits, - planes, - ignored_stride, - ) - - self.info["dpi"] = i16(s, 12), i16(s, 14) - - if bits == 1 and planes == 1: - mode = rawmode = "1" - - elif bits == 1 and planes in (2, 4): - mode = "P" - rawmode = "P;%dL" % planes - self.palette = ImagePalette.raw("RGB", s[16:64]) - - elif version == 5 and bits == 8 and planes == 1: - mode = rawmode = "L" - # FIXME: hey, this doesn't work with the incremental loader !!! - self.fp.seek(-769, io.SEEK_END) - s = self.fp.read(769) - if len(s) == 769 and s[0] == 12: - # check if the palette is linear greyscale - for i in range(256): - if s[i * 3 + 1 : i * 3 + 4] != o8(i) * 3: - mode = rawmode = "P" - break - if mode == "P": - self.palette = ImagePalette.raw("RGB", s[1:]) - self.fp.seek(128) - - elif version == 5 and bits == 8 and planes == 3: - mode = "RGB" - rawmode = "RGB;L" - - else: - raise OSError("unknown PCX mode") - - self.mode = mode - self._size = bbox[2] - bbox[0], bbox[3] - bbox[1] - - # don't trust the passed in stride. Calculate for ourselves. - # CVE-2020-35655 - stride = (self._size[0] * bits + 7) // 8 - stride += stride % 2 - - bbox = (0, 0) + self.size - logger.debug("size: %sx%s", *self.size) - - self.tile = [("pcx", bbox, self.fp.tell(), (rawmode, planes * stride))] - - -# -------------------------------------------------------------------- -# save PCX files - - -SAVE = { - # mode: (version, bits, planes, raw mode) - "1": (2, 1, 1, "1"), - "L": (5, 8, 1, "L"), - "P": (5, 8, 1, "P"), - "RGB": (5, 8, 3, "RGB;L"), -} - - -def _save(im, fp, filename): - - try: - version, bits, planes, rawmode = SAVE[im.mode] - except KeyError as e: - raise ValueError(f"Cannot save {im.mode} images as PCX") from e - - # bytes per plane - stride = (im.size[0] * bits + 7) // 8 - # stride should be even - stride += stride % 2 - # Stride needs to be kept in sync with the PcxEncode.c version. - # Ideally it should be passed in in the state, but the bytes value - # gets overwritten. - - logger.debug( - "PcxImagePlugin._save: xwidth: %d, bits: %d, stride: %d", - im.size[0], - bits, - stride, - ) - - # under windows, we could determine the current screen size with - # "Image.core.display_mode()[1]", but I think that's overkill... - - screen = im.size - - dpi = 100, 100 - - # PCX header - fp.write( - o8(10) - + o8(version) - + o8(1) - + o8(bits) - + o16(0) - + o16(0) - + o16(im.size[0] - 1) - + o16(im.size[1] - 1) - + o16(dpi[0]) - + o16(dpi[1]) - + b"\0" * 24 - + b"\xFF" * 24 - + b"\0" - + o8(planes) - + o16(stride) - + o16(1) - + o16(screen[0]) - + o16(screen[1]) - + b"\0" * 54 - ) - - assert fp.tell() == 128 - - ImageFile._save(im, fp, [("pcx", (0, 0) + im.size, 0, (rawmode, bits * planes))]) - - if im.mode == "P": - # colour palette - fp.write(o8(12)) - fp.write(im.im.getpalette("RGB", "RGB")) # 768 bytes - elif im.mode == "L": - # greyscale palette - fp.write(o8(12)) - for i in range(256): - fp.write(o8(i) * 3) - - -# -------------------------------------------------------------------- -# registry - - -Image.register_open(PcxImageFile.format, PcxImageFile, _accept) -Image.register_save(PcxImageFile.format, _save) - -Image.register_extension(PcxImageFile.format, ".pcx") - -Image.register_mime(PcxImageFile.format, "image/x-pcx") diff --git a/PIL/PdfImagePlugin.py b/PIL/PdfImagePlugin.py deleted file mode 100644 index 36c8fb8..0000000 --- a/PIL/PdfImagePlugin.py +++ /dev/null @@ -1,246 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PDF (Acrobat) file handling -# -# History: -# 1996-07-16 fl Created -# 1997-01-18 fl Fixed header -# 2004-02-21 fl Fixes for 1/L/CMYK images, etc. -# 2004-02-24 fl Fixes for 1 and P images. -# -# Copyright (c) 1997-2004 by Secret Labs AB. All rights reserved. -# Copyright (c) 1996-1997 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -## -# Image plugin for PDF images (output only). -## - -import io -import os -import time - -from . import Image, ImageFile, ImageSequence, PdfParser, __version__ - -# -# -------------------------------------------------------------------- - -# object ids: -# 1. catalogue -# 2. pages -# 3. image -# 4. page -# 5. page contents - - -def _save_all(im, fp, filename): - _save(im, fp, filename, save_all=True) - - -## -# (Internal) Image save plugin for the PDF format. - - -def _save(im, fp, filename, save_all=False): - is_appending = im.encoderinfo.get("append", False) - if is_appending: - existing_pdf = PdfParser.PdfParser(f=fp, filename=filename, mode="r+b") - else: - existing_pdf = PdfParser.PdfParser(f=fp, filename=filename, mode="w+b") - - resolution = im.encoderinfo.get("resolution", 72.0) - - info = { - "title": None - if is_appending - else os.path.splitext(os.path.basename(filename))[0], - "author": None, - "subject": None, - "keywords": None, - "creator": None, - "producer": None, - "creationDate": None if is_appending else time.gmtime(), - "modDate": None if is_appending else time.gmtime(), - } - for k, default in info.items(): - v = im.encoderinfo.get(k) if k in im.encoderinfo else default - if v: - existing_pdf.info[k[0].upper() + k[1:]] = v - - # - # make sure image data is available - im.load() - - existing_pdf.start_writing() - existing_pdf.write_header() - existing_pdf.write_comment(f"created by Pillow {__version__} PDF driver") - - # - # pages - ims = [im] - if save_all: - append_images = im.encoderinfo.get("append_images", []) - for append_im in append_images: - append_im.encoderinfo = im.encoderinfo.copy() - ims.append(append_im) - numberOfPages = 0 - image_refs = [] - page_refs = [] - contents_refs = [] - for im in ims: - im_numberOfPages = 1 - if save_all: - try: - im_numberOfPages = im.n_frames - except AttributeError: - # Image format does not have n_frames. - # It is a single frame image - pass - numberOfPages += im_numberOfPages - for i in range(im_numberOfPages): - image_refs.append(existing_pdf.next_object_id(0)) - page_refs.append(existing_pdf.next_object_id(0)) - contents_refs.append(existing_pdf.next_object_id(0)) - existing_pdf.pages.append(page_refs[-1]) - - # - # catalog and list of pages - existing_pdf.write_catalog() - - pageNumber = 0 - for imSequence in ims: - im_pages = ImageSequence.Iterator(imSequence) if save_all else [imSequence] - for im in im_pages: - # FIXME: Should replace ASCIIHexDecode with RunLengthDecode - # (packbits) or LZWDecode (tiff/lzw compression). Note that - # PDF 1.2 also supports Flatedecode (zip compression). - - bits = 8 - params = None - decode = None - - if im.mode == "1": - filter = "ASCIIHexDecode" - colorspace = PdfParser.PdfName("DeviceGray") - procset = "ImageB" # grayscale - bits = 1 - elif im.mode == "L": - filter = "DCTDecode" - # params = f"<< /Predictor 15 /Columns {width-2} >>" - colorspace = PdfParser.PdfName("DeviceGray") - procset = "ImageB" # grayscale - elif im.mode == "P": - filter = "ASCIIHexDecode" - palette = im.im.getpalette("RGB") - colorspace = [ - PdfParser.PdfName("Indexed"), - PdfParser.PdfName("DeviceRGB"), - 255, - PdfParser.PdfBinary(palette), - ] - procset = "ImageI" # indexed color - elif im.mode == "RGB": - filter = "DCTDecode" - colorspace = PdfParser.PdfName("DeviceRGB") - procset = "ImageC" # color images - elif im.mode == "CMYK": - filter = "DCTDecode" - colorspace = PdfParser.PdfName("DeviceCMYK") - procset = "ImageC" # color images - decode = [1, 0, 1, 0, 1, 0, 1, 0] - else: - raise ValueError(f"cannot save mode {im.mode}") - - # - # image - - op = io.BytesIO() - - if filter == "ASCIIHexDecode": - if bits == 1: - # FIXME: the hex encoder doesn't support packed 1-bit - # images; do things the hard way... - data = im.tobytes("raw", "1") - im = Image.new("L", im.size) - im.putdata(data) - ImageFile._save(im, op, [("hex", (0, 0) + im.size, 0, im.mode)]) - elif filter == "DCTDecode": - Image.SAVE["JPEG"](im, op, filename) - elif filter == "FlateDecode": - ImageFile._save(im, op, [("zip", (0, 0) + im.size, 0, im.mode)]) - elif filter == "RunLengthDecode": - ImageFile._save(im, op, [("packbits", (0, 0) + im.size, 0, im.mode)]) - else: - raise ValueError(f"unsupported PDF filter ({filter})") - - # - # Get image characteristics - - width, height = im.size - - existing_pdf.write_obj( - image_refs[pageNumber], - stream=op.getvalue(), - Type=PdfParser.PdfName("XObject"), - Subtype=PdfParser.PdfName("Image"), - Width=width, # * 72.0 / resolution, - Height=height, # * 72.0 / resolution, - Filter=PdfParser.PdfName(filter), - BitsPerComponent=bits, - Decode=decode, - DecodeParams=params, - ColorSpace=colorspace, - ) - - # - # page - - existing_pdf.write_page( - page_refs[pageNumber], - Resources=PdfParser.PdfDict( - ProcSet=[PdfParser.PdfName("PDF"), PdfParser.PdfName(procset)], - XObject=PdfParser.PdfDict(image=image_refs[pageNumber]), - ), - MediaBox=[ - 0, - 0, - int(width * 72.0 / resolution), - int(height * 72.0 / resolution), - ], - Contents=contents_refs[pageNumber], - ) - - # - # page contents - - page_contents = b"q %d 0 0 %d 0 0 cm /image Do Q\n" % ( - int(width * 72.0 / resolution), - int(height * 72.0 / resolution), - ) - - existing_pdf.write_obj(contents_refs[pageNumber], stream=page_contents) - - pageNumber += 1 - - # - # trailer - existing_pdf.write_xref_and_trailer() - if hasattr(fp, "flush"): - fp.flush() - existing_pdf.close() - - -# -# -------------------------------------------------------------------- - - -Image.register_save("PDF", _save) -Image.register_save_all("PDF", _save_all) - -Image.register_extension("PDF", ".pdf") - -Image.register_mime("PDF", "application/pdf") diff --git a/PIL/PdfParser.py b/PIL/PdfParser.py deleted file mode 100644 index 975905f..0000000 --- a/PIL/PdfParser.py +++ /dev/null @@ -1,994 +0,0 @@ -import calendar -import codecs -import collections -import mmap -import os -import re -import time -import zlib - - -# see 7.9.2.2 Text String Type on page 86 and D.3 PDFDocEncoding Character Set -# on page 656 -def encode_text(s): - return codecs.BOM_UTF16_BE + s.encode("utf_16_be") - - -PDFDocEncoding = { - 0x16: "\u0017", - 0x18: "\u02D8", - 0x19: "\u02C7", - 0x1A: "\u02C6", - 0x1B: "\u02D9", - 0x1C: "\u02DD", - 0x1D: "\u02DB", - 0x1E: "\u02DA", - 0x1F: "\u02DC", - 0x80: "\u2022", - 0x81: "\u2020", - 0x82: "\u2021", - 0x83: "\u2026", - 0x84: "\u2014", - 0x85: "\u2013", - 0x86: "\u0192", - 0x87: "\u2044", - 0x88: "\u2039", - 0x89: "\u203A", - 0x8A: "\u2212", - 0x8B: "\u2030", - 0x8C: "\u201E", - 0x8D: "\u201C", - 0x8E: "\u201D", - 0x8F: "\u2018", - 0x90: "\u2019", - 0x91: "\u201A", - 0x92: "\u2122", - 0x93: "\uFB01", - 0x94: "\uFB02", - 0x95: "\u0141", - 0x96: "\u0152", - 0x97: "\u0160", - 0x98: "\u0178", - 0x99: "\u017D", - 0x9A: "\u0131", - 0x9B: "\u0142", - 0x9C: "\u0153", - 0x9D: "\u0161", - 0x9E: "\u017E", - 0xA0: "\u20AC", -} - - -def decode_text(b): - if b[: len(codecs.BOM_UTF16_BE)] == codecs.BOM_UTF16_BE: - return b[len(codecs.BOM_UTF16_BE) :].decode("utf_16_be") - else: - return "".join(PDFDocEncoding.get(byte, chr(byte)) for byte in b) - - -class PdfFormatError(RuntimeError): - """An error that probably indicates a syntactic or semantic error in the - PDF file structure""" - - pass - - -def check_format_condition(condition, error_message): - if not condition: - raise PdfFormatError(error_message) - - -class IndirectReference( - collections.namedtuple("IndirectReferenceTuple", ["object_id", "generation"]) -): - def __str__(self): - return "%s %s R" % self - - def __bytes__(self): - return self.__str__().encode("us-ascii") - - def __eq__(self, other): - return ( - other.__class__ is self.__class__ - and other.object_id == self.object_id - and other.generation == self.generation - ) - - def __ne__(self, other): - return not (self == other) - - def __hash__(self): - return hash((self.object_id, self.generation)) - - -class IndirectObjectDef(IndirectReference): - def __str__(self): - return "%s %s obj" % self - - -class XrefTable: - def __init__(self): - self.existing_entries = {} # object ID => (offset, generation) - self.new_entries = {} # object ID => (offset, generation) - self.deleted_entries = {0: 65536} # object ID => generation - self.reading_finished = False - - def __setitem__(self, key, value): - if self.reading_finished: - self.new_entries[key] = value - else: - self.existing_entries[key] = value - if key in self.deleted_entries: - del self.deleted_entries[key] - - def __getitem__(self, key): - try: - return self.new_entries[key] - except KeyError: - return self.existing_entries[key] - - def __delitem__(self, key): - if key in self.new_entries: - generation = self.new_entries[key][1] + 1 - del self.new_entries[key] - self.deleted_entries[key] = generation - elif key in self.existing_entries: - generation = self.existing_entries[key][1] + 1 - self.deleted_entries[key] = generation - elif key in self.deleted_entries: - generation = self.deleted_entries[key] - else: - raise IndexError( - "object ID " + str(key) + " cannot be deleted because it doesn't exist" - ) - - def __contains__(self, key): - return key in self.existing_entries or key in self.new_entries - - def __len__(self): - return len( - set(self.existing_entries.keys()) - | set(self.new_entries.keys()) - | set(self.deleted_entries.keys()) - ) - - def keys(self): - return ( - set(self.existing_entries.keys()) - set(self.deleted_entries.keys()) - ) | set(self.new_entries.keys()) - - def write(self, f): - keys = sorted(set(self.new_entries.keys()) | set(self.deleted_entries.keys())) - deleted_keys = sorted(set(self.deleted_entries.keys())) - startxref = f.tell() - f.write(b"xref\n") - while keys: - # find a contiguous sequence of object IDs - prev = None - for index, key in enumerate(keys): - if prev is None or prev + 1 == key: - prev = key - else: - contiguous_keys = keys[:index] - keys = keys[index:] - break - else: - contiguous_keys = keys - keys = None - f.write(b"%d %d\n" % (contiguous_keys[0], len(contiguous_keys))) - for object_id in contiguous_keys: - if object_id in self.new_entries: - f.write(b"%010d %05d n \n" % self.new_entries[object_id]) - else: - this_deleted_object_id = deleted_keys.pop(0) - check_format_condition( - object_id == this_deleted_object_id, - f"expected the next deleted object ID to be {object_id}, " - f"instead found {this_deleted_object_id}", - ) - try: - next_in_linked_list = deleted_keys[0] - except IndexError: - next_in_linked_list = 0 - f.write( - b"%010d %05d f \n" - % (next_in_linked_list, self.deleted_entries[object_id]) - ) - return startxref - - -class PdfName: - def __init__(self, name): - if isinstance(name, PdfName): - self.name = name.name - elif isinstance(name, bytes): - self.name = name - else: - self.name = name.encode("us-ascii") - - def name_as_str(self): - return self.name.decode("us-ascii") - - def __eq__(self, other): - return ( - isinstance(other, PdfName) and other.name == self.name - ) or other == self.name - - def __hash__(self): - return hash(self.name) - - def __repr__(self): - return f"PdfName({repr(self.name)})" - - @classmethod - def from_pdf_stream(cls, data): - return cls(PdfParser.interpret_name(data)) - - allowed_chars = set(range(33, 127)) - {ord(c) for c in "#%/()<>[]{}"} - - def __bytes__(self): - result = bytearray(b"/") - for b in self.name: - if b in self.allowed_chars: - result.append(b) - else: - result.extend(b"#%02X" % b) - return bytes(result) - - -class PdfArray(list): - def __bytes__(self): - return b"[ " + b" ".join(pdf_repr(x) for x in self) + b" ]" - - -class PdfDict(collections.UserDict): - def __setattr__(self, key, value): - if key == "data": - collections.UserDict.__setattr__(self, key, value) - else: - self[key.encode("us-ascii")] = value - - def __getattr__(self, key): - try: - value = self[key.encode("us-ascii")] - except KeyError as e: - raise AttributeError(key) from e - if isinstance(value, bytes): - value = decode_text(value) - if key.endswith("Date"): - if value.startswith("D:"): - value = value[2:] - - relationship = "Z" - if len(value) > 17: - relationship = value[14] - offset = int(value[15:17]) * 60 - if len(value) > 20: - offset += int(value[18:20]) - - format = "%Y%m%d%H%M%S"[: len(value) - 2] - value = time.strptime(value[: len(format) + 2], format) - if relationship in ["+", "-"]: - offset *= 60 - if relationship == "+": - offset *= -1 - value = time.gmtime(calendar.timegm(value) + offset) - return value - - def __bytes__(self): - out = bytearray(b"<<") - for key, value in self.items(): - if value is None: - continue - value = pdf_repr(value) - out.extend(b"\n") - out.extend(bytes(PdfName(key))) - out.extend(b" ") - out.extend(value) - out.extend(b"\n>>") - return bytes(out) - - -class PdfBinary: - def __init__(self, data): - self.data = data - - def __bytes__(self): - return b"<%s>" % b"".join(b"%02X" % b for b in self.data) - - -class PdfStream: - def __init__(self, dictionary, buf): - self.dictionary = dictionary - self.buf = buf - - def decode(self): - try: - filter = self.dictionary.Filter - except AttributeError: - return self.buf - if filter == b"FlateDecode": - try: - expected_length = self.dictionary.DL - except AttributeError: - expected_length = self.dictionary.Length - return zlib.decompress(self.buf, bufsize=int(expected_length)) - else: - raise NotImplementedError( - f"stream filter {repr(self.dictionary.Filter)} unknown/unsupported" - ) - - -def pdf_repr(x): - if x is True: - return b"true" - elif x is False: - return b"false" - elif x is None: - return b"null" - elif isinstance(x, (PdfName, PdfDict, PdfArray, PdfBinary)): - return bytes(x) - elif isinstance(x, int): - return str(x).encode("us-ascii") - elif isinstance(x, time.struct_time): - return b"(D:" + time.strftime("%Y%m%d%H%M%SZ", x).encode("us-ascii") + b")" - elif isinstance(x, dict): - return bytes(PdfDict(x)) - elif isinstance(x, list): - return bytes(PdfArray(x)) - elif isinstance(x, str): - return pdf_repr(encode_text(x)) - elif isinstance(x, bytes): - # XXX escape more chars? handle binary garbage - x = x.replace(b"\\", b"\\\\") - x = x.replace(b"(", b"\\(") - x = x.replace(b")", b"\\)") - return b"(" + x + b")" - else: - return bytes(x) - - -class PdfParser: - """Based on - https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf - Supports PDF up to 1.4 - """ - - def __init__(self, filename=None, f=None, buf=None, start_offset=0, mode="rb"): - if buf and f: - raise RuntimeError("specify buf or f or filename, but not both buf and f") - self.filename = filename - self.buf = buf - self.f = f - self.start_offset = start_offset - self.should_close_buf = False - self.should_close_file = False - if filename is not None and f is None: - self.f = f = open(filename, mode) - self.should_close_file = True - if f is not None: - self.buf = buf = self.get_buf_from_file(f) - self.should_close_buf = True - if not filename and hasattr(f, "name"): - self.filename = f.name - self.cached_objects = {} - if buf: - self.read_pdf_info() - else: - self.file_size_total = self.file_size_this = 0 - self.root = PdfDict() - self.root_ref = None - self.info = PdfDict() - self.info_ref = None - self.page_tree_root = {} - self.pages = [] - self.orig_pages = [] - self.pages_ref = None - self.last_xref_section_offset = None - self.trailer_dict = {} - self.xref_table = XrefTable() - self.xref_table.reading_finished = True - if f: - self.seek_end() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, traceback): - self.close() - return False # do not suppress exceptions - - def start_writing(self): - self.close_buf() - self.seek_end() - - def close_buf(self): - try: - self.buf.close() - except AttributeError: - pass - self.buf = None - - def close(self): - if self.should_close_buf: - self.close_buf() - if self.f is not None and self.should_close_file: - self.f.close() - self.f = None - - def seek_end(self): - self.f.seek(0, os.SEEK_END) - - def write_header(self): - self.f.write(b"%PDF-1.4\n") - - def write_comment(self, s): - self.f.write(f"% {s}\n".encode("utf-8")) - - def write_catalog(self): - self.del_root() - self.root_ref = self.next_object_id(self.f.tell()) - self.pages_ref = self.next_object_id(0) - self.rewrite_pages() - self.write_obj(self.root_ref, Type=PdfName(b"Catalog"), Pages=self.pages_ref) - self.write_obj( - self.pages_ref, - Type=PdfName(b"Pages"), - Count=len(self.pages), - Kids=self.pages, - ) - return self.root_ref - - def rewrite_pages(self): - pages_tree_nodes_to_delete = [] - for i, page_ref in enumerate(self.orig_pages): - page_info = self.cached_objects[page_ref] - del self.xref_table[page_ref.object_id] - pages_tree_nodes_to_delete.append(page_info[PdfName(b"Parent")]) - if page_ref not in self.pages: - # the page has been deleted - continue - # make dict keys into strings for passing to write_page - stringified_page_info = {} - for key, value in page_info.items(): - # key should be a PdfName - stringified_page_info[key.name_as_str()] = value - stringified_page_info["Parent"] = self.pages_ref - new_page_ref = self.write_page(None, **stringified_page_info) - for j, cur_page_ref in enumerate(self.pages): - if cur_page_ref == page_ref: - # replace the page reference with the new one - self.pages[j] = new_page_ref - # delete redundant Pages tree nodes from xref table - for pages_tree_node_ref in pages_tree_nodes_to_delete: - while pages_tree_node_ref: - pages_tree_node = self.cached_objects[pages_tree_node_ref] - if pages_tree_node_ref.object_id in self.xref_table: - del self.xref_table[pages_tree_node_ref.object_id] - pages_tree_node_ref = pages_tree_node.get(b"Parent", None) - self.orig_pages = [] - - def write_xref_and_trailer(self, new_root_ref=None): - if new_root_ref: - self.del_root() - self.root_ref = new_root_ref - if self.info: - self.info_ref = self.write_obj(None, self.info) - start_xref = self.xref_table.write(self.f) - num_entries = len(self.xref_table) - trailer_dict = {b"Root": self.root_ref, b"Size": num_entries} - if self.last_xref_section_offset is not None: - trailer_dict[b"Prev"] = self.last_xref_section_offset - if self.info: - trailer_dict[b"Info"] = self.info_ref - self.last_xref_section_offset = start_xref - self.f.write( - b"trailer\n" - + bytes(PdfDict(trailer_dict)) - + b"\nstartxref\n%d\n%%%%EOF" % start_xref - ) - - def write_page(self, ref, *objs, **dict_obj): - if isinstance(ref, int): - ref = self.pages[ref] - if "Type" not in dict_obj: - dict_obj["Type"] = PdfName(b"Page") - if "Parent" not in dict_obj: - dict_obj["Parent"] = self.pages_ref - return self.write_obj(ref, *objs, **dict_obj) - - def write_obj(self, ref, *objs, **dict_obj): - f = self.f - if ref is None: - ref = self.next_object_id(f.tell()) - else: - self.xref_table[ref.object_id] = (f.tell(), ref.generation) - f.write(bytes(IndirectObjectDef(*ref))) - stream = dict_obj.pop("stream", None) - if stream is not None: - dict_obj["Length"] = len(stream) - if dict_obj: - f.write(pdf_repr(dict_obj)) - for obj in objs: - f.write(pdf_repr(obj)) - if stream is not None: - f.write(b"stream\n") - f.write(stream) - f.write(b"\nendstream\n") - f.write(b"endobj\n") - return ref - - def del_root(self): - if self.root_ref is None: - return - del self.xref_table[self.root_ref.object_id] - del self.xref_table[self.root[b"Pages"].object_id] - - @staticmethod - def get_buf_from_file(f): - if hasattr(f, "getbuffer"): - return f.getbuffer() - elif hasattr(f, "getvalue"): - return f.getvalue() - else: - try: - return mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) - except ValueError: # cannot mmap an empty file - return b"" - - def read_pdf_info(self): - self.file_size_total = len(self.buf) - self.file_size_this = self.file_size_total - self.start_offset - self.read_trailer() - self.root_ref = self.trailer_dict[b"Root"] - self.info_ref = self.trailer_dict.get(b"Info", None) - self.root = PdfDict(self.read_indirect(self.root_ref)) - if self.info_ref is None: - self.info = PdfDict() - else: - self.info = PdfDict(self.read_indirect(self.info_ref)) - check_format_condition(b"Type" in self.root, "/Type missing in Root") - check_format_condition( - self.root[b"Type"] == b"Catalog", "/Type in Root is not /Catalog" - ) - check_format_condition(b"Pages" in self.root, "/Pages missing in Root") - check_format_condition( - isinstance(self.root[b"Pages"], IndirectReference), - "/Pages in Root is not an indirect reference", - ) - self.pages_ref = self.root[b"Pages"] - self.page_tree_root = self.read_indirect(self.pages_ref) - self.pages = self.linearize_page_tree(self.page_tree_root) - # save the original list of page references - # in case the user modifies, adds or deletes some pages - # and we need to rewrite the pages and their list - self.orig_pages = self.pages[:] - - def next_object_id(self, offset=None): - try: - # TODO: support reuse of deleted objects - reference = IndirectReference(max(self.xref_table.keys()) + 1, 0) - except ValueError: - reference = IndirectReference(1, 0) - if offset is not None: - self.xref_table[reference.object_id] = (offset, 0) - return reference - - delimiter = br"[][()<>{}/%]" - delimiter_or_ws = br"[][()<>{}/%\000\011\012\014\015\040]" - whitespace = br"[\000\011\012\014\015\040]" - whitespace_or_hex = br"[\000\011\012\014\015\0400-9a-fA-F]" - whitespace_optional = whitespace + b"*" - whitespace_mandatory = whitespace + b"+" - newline_only = br"[\r\n]+" - newline = whitespace_optional + newline_only + whitespace_optional - re_trailer_end = re.compile( - whitespace_mandatory - + br"trailer" - + whitespace_optional - + br"\<\<(.*\>\>)" - + newline - + br"startxref" - + newline - + br"([0-9]+)" - + newline - + br"%%EOF" - + whitespace_optional - + br"$", - re.DOTALL, - ) - re_trailer_prev = re.compile( - whitespace_optional - + br"trailer" - + whitespace_optional - + br"\<\<(.*?\>\>)" - + newline - + br"startxref" - + newline - + br"([0-9]+)" - + newline - + br"%%EOF" - + whitespace_optional, - re.DOTALL, - ) - - def read_trailer(self): - search_start_offset = len(self.buf) - 16384 - if search_start_offset < self.start_offset: - search_start_offset = self.start_offset - m = self.re_trailer_end.search(self.buf, search_start_offset) - check_format_condition(m, "trailer end not found") - # make sure we found the LAST trailer - last_match = m - while m: - last_match = m - m = self.re_trailer_end.search(self.buf, m.start() + 16) - if not m: - m = last_match - trailer_data = m.group(1) - self.last_xref_section_offset = int(m.group(2)) - self.trailer_dict = self.interpret_trailer(trailer_data) - self.xref_table = XrefTable() - self.read_xref_table(xref_section_offset=self.last_xref_section_offset) - if b"Prev" in self.trailer_dict: - self.read_prev_trailer(self.trailer_dict[b"Prev"]) - - def read_prev_trailer(self, xref_section_offset): - trailer_offset = self.read_xref_table(xref_section_offset=xref_section_offset) - m = self.re_trailer_prev.search( - self.buf[trailer_offset : trailer_offset + 16384] - ) - check_format_condition(m, "previous trailer not found") - trailer_data = m.group(1) - check_format_condition( - int(m.group(2)) == xref_section_offset, - "xref section offset in previous trailer doesn't match what was expected", - ) - trailer_dict = self.interpret_trailer(trailer_data) - if b"Prev" in trailer_dict: - self.read_prev_trailer(trailer_dict[b"Prev"]) - - re_whitespace_optional = re.compile(whitespace_optional) - re_name = re.compile( - whitespace_optional - + br"/([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=" - + delimiter_or_ws - + br")" - ) - re_dict_start = re.compile(whitespace_optional + br"\<\<") - re_dict_end = re.compile(whitespace_optional + br"\>\>" + whitespace_optional) - - @classmethod - def interpret_trailer(cls, trailer_data): - trailer = {} - offset = 0 - while True: - m = cls.re_name.match(trailer_data, offset) - if not m: - m = cls.re_dict_end.match(trailer_data, offset) - check_format_condition( - m and m.end() == len(trailer_data), - "name not found in trailer, remaining data: " - + repr(trailer_data[offset:]), - ) - break - key = cls.interpret_name(m.group(1)) - value, offset = cls.get_value(trailer_data, m.end()) - trailer[key] = value - check_format_condition( - b"Size" in trailer and isinstance(trailer[b"Size"], int), - "/Size not in trailer or not an integer", - ) - check_format_condition( - b"Root" in trailer and isinstance(trailer[b"Root"], IndirectReference), - "/Root not in trailer or not an indirect reference", - ) - return trailer - - re_hashes_in_name = re.compile(br"([^#]*)(#([0-9a-fA-F]{2}))?") - - @classmethod - def interpret_name(cls, raw, as_text=False): - name = b"" - for m in cls.re_hashes_in_name.finditer(raw): - if m.group(3): - name += m.group(1) + bytearray.fromhex(m.group(3).decode("us-ascii")) - else: - name += m.group(1) - if as_text: - return name.decode("utf-8") - else: - return bytes(name) - - re_null = re.compile(whitespace_optional + br"null(?=" + delimiter_or_ws + br")") - re_true = re.compile(whitespace_optional + br"true(?=" + delimiter_or_ws + br")") - re_false = re.compile(whitespace_optional + br"false(?=" + delimiter_or_ws + br")") - re_int = re.compile( - whitespace_optional + br"([-+]?[0-9]+)(?=" + delimiter_or_ws + br")" - ) - re_real = re.compile( - whitespace_optional - + br"([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=" - + delimiter_or_ws - + br")" - ) - re_array_start = re.compile(whitespace_optional + br"\[") - re_array_end = re.compile(whitespace_optional + br"]") - re_string_hex = re.compile( - whitespace_optional + br"\<(" + whitespace_or_hex + br"*)\>" - ) - re_string_lit = re.compile(whitespace_optional + br"\(") - re_indirect_reference = re.compile( - whitespace_optional - + br"([-+]?[0-9]+)" - + whitespace_mandatory - + br"([-+]?[0-9]+)" - + whitespace_mandatory - + br"R(?=" - + delimiter_or_ws - + br")" - ) - re_indirect_def_start = re.compile( - whitespace_optional - + br"([-+]?[0-9]+)" - + whitespace_mandatory - + br"([-+]?[0-9]+)" - + whitespace_mandatory - + br"obj(?=" - + delimiter_or_ws - + br")" - ) - re_indirect_def_end = re.compile( - whitespace_optional + br"endobj(?=" + delimiter_or_ws + br")" - ) - re_comment = re.compile( - br"(" + whitespace_optional + br"%[^\r\n]*" + newline + br")*" - ) - re_stream_start = re.compile(whitespace_optional + br"stream\r?\n") - re_stream_end = re.compile( - whitespace_optional + br"endstream(?=" + delimiter_or_ws + br")" - ) - - @classmethod - def get_value(cls, data, offset, expect_indirect=None, max_nesting=-1): - if max_nesting == 0: - return None, None - m = cls.re_comment.match(data, offset) - if m: - offset = m.end() - m = cls.re_indirect_def_start.match(data, offset) - if m: - check_format_condition( - int(m.group(1)) > 0, - "indirect object definition: object ID must be greater than 0", - ) - check_format_condition( - int(m.group(2)) >= 0, - "indirect object definition: generation must be non-negative", - ) - check_format_condition( - expect_indirect is None - or expect_indirect - == IndirectReference(int(m.group(1)), int(m.group(2))), - "indirect object definition different than expected", - ) - object, offset = cls.get_value(data, m.end(), max_nesting=max_nesting - 1) - if offset is None: - return object, None - m = cls.re_indirect_def_end.match(data, offset) - check_format_condition(m, "indirect object definition end not found") - return object, m.end() - check_format_condition( - not expect_indirect, "indirect object definition not found" - ) - m = cls.re_indirect_reference.match(data, offset) - if m: - check_format_condition( - int(m.group(1)) > 0, - "indirect object reference: object ID must be greater than 0", - ) - check_format_condition( - int(m.group(2)) >= 0, - "indirect object reference: generation must be non-negative", - ) - return IndirectReference(int(m.group(1)), int(m.group(2))), m.end() - m = cls.re_dict_start.match(data, offset) - if m: - offset = m.end() - result = {} - m = cls.re_dict_end.match(data, offset) - while not m: - key, offset = cls.get_value(data, offset, max_nesting=max_nesting - 1) - if offset is None: - return result, None - value, offset = cls.get_value(data, offset, max_nesting=max_nesting - 1) - result[key] = value - if offset is None: - return result, None - m = cls.re_dict_end.match(data, offset) - offset = m.end() - m = cls.re_stream_start.match(data, offset) - if m: - try: - stream_len = int(result[b"Length"]) - except (TypeError, KeyError, ValueError) as e: - raise PdfFormatError( - "bad or missing Length in stream dict (%r)" - % result.get(b"Length", None) - ) from e - stream_data = data[m.end() : m.end() + stream_len] - m = cls.re_stream_end.match(data, m.end() + stream_len) - check_format_condition(m, "stream end not found") - offset = m.end() - result = PdfStream(PdfDict(result), stream_data) - else: - result = PdfDict(result) - return result, offset - m = cls.re_array_start.match(data, offset) - if m: - offset = m.end() - result = [] - m = cls.re_array_end.match(data, offset) - while not m: - value, offset = cls.get_value(data, offset, max_nesting=max_nesting - 1) - result.append(value) - if offset is None: - return result, None - m = cls.re_array_end.match(data, offset) - return result, m.end() - m = cls.re_null.match(data, offset) - if m: - return None, m.end() - m = cls.re_true.match(data, offset) - if m: - return True, m.end() - m = cls.re_false.match(data, offset) - if m: - return False, m.end() - m = cls.re_name.match(data, offset) - if m: - return PdfName(cls.interpret_name(m.group(1))), m.end() - m = cls.re_int.match(data, offset) - if m: - return int(m.group(1)), m.end() - m = cls.re_real.match(data, offset) - if m: - # XXX Decimal instead of float??? - return float(m.group(1)), m.end() - m = cls.re_string_hex.match(data, offset) - if m: - # filter out whitespace - hex_string = bytearray( - [b for b in m.group(1) if b in b"0123456789abcdefABCDEF"] - ) - if len(hex_string) % 2 == 1: - # append a 0 if the length is not even - yes, at the end - hex_string.append(ord(b"0")) - return bytearray.fromhex(hex_string.decode("us-ascii")), m.end() - m = cls.re_string_lit.match(data, offset) - if m: - return cls.get_literal_string(data, m.end()) - # return None, offset # fallback (only for debugging) - raise PdfFormatError("unrecognized object: " + repr(data[offset : offset + 32])) - - re_lit_str_token = re.compile( - br"(\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))" - ) - escaped_chars = { - b"n": b"\n", - b"r": b"\r", - b"t": b"\t", - b"b": b"\b", - b"f": b"\f", - b"(": b"(", - b")": b")", - b"\\": b"\\", - ord(b"n"): b"\n", - ord(b"r"): b"\r", - ord(b"t"): b"\t", - ord(b"b"): b"\b", - ord(b"f"): b"\f", - ord(b"("): b"(", - ord(b")"): b")", - ord(b"\\"): b"\\", - } - - @classmethod - def get_literal_string(cls, data, offset): - nesting_depth = 0 - result = bytearray() - for m in cls.re_lit_str_token.finditer(data, offset): - result.extend(data[offset : m.start()]) - if m.group(1): - result.extend(cls.escaped_chars[m.group(1)[1]]) - elif m.group(2): - result.append(int(m.group(2)[1:], 8)) - elif m.group(3): - pass - elif m.group(5): - result.extend(b"\n") - elif m.group(6): - result.extend(b"(") - nesting_depth += 1 - elif m.group(7): - if nesting_depth == 0: - return bytes(result), m.end() - result.extend(b")") - nesting_depth -= 1 - offset = m.end() - raise PdfFormatError("unfinished literal string") - - re_xref_section_start = re.compile(whitespace_optional + br"xref" + newline) - re_xref_subsection_start = re.compile( - whitespace_optional - + br"([0-9]+)" - + whitespace_mandatory - + br"([0-9]+)" - + whitespace_optional - + newline_only - ) - re_xref_entry = re.compile(br"([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)") - - def read_xref_table(self, xref_section_offset): - subsection_found = False - m = self.re_xref_section_start.match( - self.buf, xref_section_offset + self.start_offset - ) - check_format_condition(m, "xref section start not found") - offset = m.end() - while True: - m = self.re_xref_subsection_start.match(self.buf, offset) - if not m: - check_format_condition( - subsection_found, "xref subsection start not found" - ) - break - subsection_found = True - offset = m.end() - first_object = int(m.group(1)) - num_objects = int(m.group(2)) - for i in range(first_object, first_object + num_objects): - m = self.re_xref_entry.match(self.buf, offset) - check_format_condition(m, "xref entry not found") - offset = m.end() - is_free = m.group(3) == b"f" - generation = int(m.group(2)) - if not is_free: - new_entry = (int(m.group(1)), generation) - check_format_condition( - i not in self.xref_table or self.xref_table[i] == new_entry, - "xref entry duplicated (and not identical)", - ) - self.xref_table[i] = new_entry - return offset - - def read_indirect(self, ref, max_nesting=-1): - offset, generation = self.xref_table[ref[0]] - check_format_condition( - generation == ref[1], - f"expected to find generation {ref[1]} for object ID {ref[0]} in xref " - f"table, instead found generation {generation} at offset {offset}", - ) - value = self.get_value( - self.buf, - offset + self.start_offset, - expect_indirect=IndirectReference(*ref), - max_nesting=max_nesting, - )[0] - self.cached_objects[ref] = value - return value - - def linearize_page_tree(self, node=None): - if node is None: - node = self.page_tree_root - check_format_condition( - node[b"Type"] == b"Pages", "/Type of page tree node is not /Pages" - ) - pages = [] - for kid in node[b"Kids"]: - kid_object = self.read_indirect(kid) - if kid_object[b"Type"] == b"Page": - pages.append(kid) - else: - pages.extend(self.linearize_page_tree(node=kid_object)) - return pages diff --git a/PIL/PixarImagePlugin.py b/PIL/PixarImagePlugin.py deleted file mode 100644 index c4860b6..0000000 --- a/PIL/PixarImagePlugin.py +++ /dev/null @@ -1,70 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PIXAR raster support for PIL -# -# history: -# 97-01-29 fl Created -# -# notes: -# This is incomplete; it is based on a few samples created with -# Photoshop 2.5 and 3.0, and a summary description provided by -# Greg Coats . Hopefully, "L" and -# "RGBA" support will be added in future versions. -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1997. -# -# See the README file for information on usage and redistribution. -# - -from . import Image, ImageFile -from ._binary import i16le as i16 - -# -# helpers - - -def _accept(prefix): - return prefix[:4] == b"\200\350\000\000" - - -## -# Image plugin for PIXAR raster images. - - -class PixarImageFile(ImageFile.ImageFile): - - format = "PIXAR" - format_description = "PIXAR raster image" - - def _open(self): - - # assuming a 4-byte magic label - s = self.fp.read(4) - if not _accept(s): - raise SyntaxError("not a PIXAR file") - - # read rest of header - s = s + self.fp.read(508) - - self._size = i16(s, 418), i16(s, 416) - - # get channel/depth descriptions - mode = i16(s, 424), i16(s, 426) - - if mode == (14, 2): - self.mode = "RGB" - # FIXME: to be continued... - - # create tile descriptor (assuming "dumped") - self.tile = [("raw", (0, 0) + self.size, 1024, (self.mode, 0, 1))] - - -# -# -------------------------------------------------------------------- - -Image.register_open(PixarImageFile.format, PixarImageFile, _accept) - -Image.register_extension(PixarImageFile.format, ".pxr") diff --git a/PIL/PngImagePlugin.py b/PIL/PngImagePlugin.py deleted file mode 100644 index 2d4ac76..0000000 --- a/PIL/PngImagePlugin.py +++ /dev/null @@ -1,1395 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PNG support code -# -# See "PNG (Portable Network Graphics) Specification, version 1.0; -# W3C Recommendation", 1996-10-01, Thomas Boutell (ed.). -# -# history: -# 1996-05-06 fl Created (couldn't resist it) -# 1996-12-14 fl Upgraded, added read and verify support (0.2) -# 1996-12-15 fl Separate PNG stream parser -# 1996-12-29 fl Added write support, added getchunks -# 1996-12-30 fl Eliminated circular references in decoder (0.3) -# 1998-07-12 fl Read/write 16-bit images as mode I (0.4) -# 2001-02-08 fl Added transparency support (from Zircon) (0.5) -# 2001-04-16 fl Don't close data source in "open" method (0.6) -# 2004-02-24 fl Don't even pretend to support interlaced files (0.7) -# 2004-08-31 fl Do basic sanity check on chunk identifiers (0.8) -# 2004-09-20 fl Added PngInfo chunk container -# 2004-12-18 fl Added DPI read support (based on code by Niki Spahiev) -# 2008-08-13 fl Added tRNS support for RGB images -# 2009-03-06 fl Support for preserving ICC profiles (by Florian Hoech) -# 2009-03-08 fl Added zTXT support (from Lowell Alleman) -# 2009-03-29 fl Read interlaced PNG files (from Conrado Porto Lopes Gouvua) -# -# Copyright (c) 1997-2009 by Secret Labs AB -# Copyright (c) 1996 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import itertools -import logging -import re -import struct -import warnings -import zlib - -from . import Image, ImageChops, ImageFile, ImagePalette, ImageSequence -from ._binary import i16be as i16 -from ._binary import i32be as i32 -from ._binary import o8 -from ._binary import o16be as o16 -from ._binary import o32be as o32 - -logger = logging.getLogger(__name__) - -is_cid = re.compile(br"\w\w\w\w").match - - -_MAGIC = b"\211PNG\r\n\032\n" - - -_MODES = { - # supported bits/color combinations, and corresponding modes/rawmodes - # Greyscale - (1, 0): ("1", "1"), - (2, 0): ("L", "L;2"), - (4, 0): ("L", "L;4"), - (8, 0): ("L", "L"), - (16, 0): ("I", "I;16B"), - # Truecolour - (8, 2): ("RGB", "RGB"), - (16, 2): ("RGB", "RGB;16B"), - # Indexed-colour - (1, 3): ("P", "P;1"), - (2, 3): ("P", "P;2"), - (4, 3): ("P", "P;4"), - (8, 3): ("P", "P"), - # Greyscale with alpha - (8, 4): ("LA", "LA"), - (16, 4): ("RGBA", "LA;16B"), # LA;16B->LA not yet available - # Truecolour with alpha - (8, 6): ("RGBA", "RGBA"), - (16, 6): ("RGBA", "RGBA;16B"), -} - - -_simple_palette = re.compile(b"^\xff*\x00\xff*$") - -MAX_TEXT_CHUNK = ImageFile.SAFEBLOCK -""" -Maximum decompressed size for a iTXt or zTXt chunk. -Eliminates decompression bombs where compressed chunks can expand 1000x. -See :ref:`Text in PNG File Format`. -""" -MAX_TEXT_MEMORY = 64 * MAX_TEXT_CHUNK -""" -Set the maximum total text chunk size. -See :ref:`Text in PNG File Format`. -""" - - -# APNG frame disposal modes -APNG_DISPOSE_OP_NONE = 0 -""" -No disposal is done on this frame before rendering the next frame. -See :ref:`Saving APNG sequences`. -""" -APNG_DISPOSE_OP_BACKGROUND = 1 -""" -This frame’s modified region is cleared to fully transparent black before rendering -the next frame. -See :ref:`Saving APNG sequences`. -""" -APNG_DISPOSE_OP_PREVIOUS = 2 -""" -This frame’s modified region is reverted to the previous frame’s contents before -rendering the next frame. -See :ref:`Saving APNG sequences`. -""" - -# APNG frame blend modes -APNG_BLEND_OP_SOURCE = 0 -""" -All color components of this frame, including alpha, overwrite the previous output -image contents. -See :ref:`Saving APNG sequences`. -""" -APNG_BLEND_OP_OVER = 1 -""" -This frame should be alpha composited with the previous output image contents. -See :ref:`Saving APNG sequences`. -""" - - -def _safe_zlib_decompress(s): - dobj = zlib.decompressobj() - plaintext = dobj.decompress(s, MAX_TEXT_CHUNK) - if dobj.unconsumed_tail: - raise ValueError("Decompressed Data Too Large") - return plaintext - - -def _crc32(data, seed=0): - return zlib.crc32(data, seed) & 0xFFFFFFFF - - -# -------------------------------------------------------------------- -# Support classes. Suitable for PNG and related formats like MNG etc. - - -class ChunkStream: - def __init__(self, fp): - - self.fp = fp - self.queue = [] - - def read(self): - """Fetch a new chunk. Returns header information.""" - cid = None - - if self.queue: - cid, pos, length = self.queue.pop() - self.fp.seek(pos) - else: - s = self.fp.read(8) - cid = s[4:] - pos = self.fp.tell() - length = i32(s) - - if not is_cid(cid): - if not ImageFile.LOAD_TRUNCATED_IMAGES: - raise SyntaxError(f"broken PNG file (chunk {repr(cid)})") - - return cid, pos, length - - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def close(self): - self.queue = self.crc = self.fp = None - - def push(self, cid, pos, length): - - self.queue.append((cid, pos, length)) - - def call(self, cid, pos, length): - """Call the appropriate chunk handler""" - - logger.debug("STREAM %r %s %s", cid, pos, length) - return getattr(self, "chunk_" + cid.decode("ascii"))(pos, length) - - def crc(self, cid, data): - """Read and verify checksum""" - - # Skip CRC checks for ancillary chunks if allowed to load truncated - # images - # 5th byte of first char is 1 [specs, section 5.4] - if ImageFile.LOAD_TRUNCATED_IMAGES and (cid[0] >> 5 & 1): - self.crc_skip(cid, data) - return - - try: - crc1 = _crc32(data, _crc32(cid)) - crc2 = i32(self.fp.read(4)) - if crc1 != crc2: - raise SyntaxError( - f"broken PNG file (bad header checksum in {repr(cid)})" - ) - except struct.error as e: - raise SyntaxError( - f"broken PNG file (incomplete checksum in {repr(cid)})" - ) from e - - def crc_skip(self, cid, data): - """Read checksum. Used if the C module is not present""" - - self.fp.read(4) - - def verify(self, endchunk=b"IEND"): - - # Simple approach; just calculate checksum for all remaining - # blocks. Must be called directly after open. - - cids = [] - - while True: - try: - cid, pos, length = self.read() - except struct.error as e: - raise OSError("truncated PNG file") from e - - if cid == endchunk: - break - self.crc(cid, ImageFile._safe_read(self.fp, length)) - cids.append(cid) - - return cids - - -class iTXt(str): - """ - Subclass of string to allow iTXt chunks to look like strings while - keeping their extra information - - """ - - @staticmethod - def __new__(cls, text, lang=None, tkey=None): - """ - :param cls: the class to use when creating the instance - :param text: value for this key - :param lang: language code - :param tkey: UTF-8 version of the key name - """ - - self = str.__new__(cls, text) - self.lang = lang - self.tkey = tkey - return self - - -class PngInfo: - """ - PNG chunk container (for use with save(pnginfo=)) - - """ - - def __init__(self): - self.chunks = [] - - def add(self, cid, data, after_idat=False): - """Appends an arbitrary chunk. Use with caution. - - :param cid: a byte string, 4 bytes long. - :param data: a byte string of the encoded data - :param after_idat: for use with private chunks. Whether the chunk - should be written after IDAT - - """ - - chunk = [cid, data] - if after_idat: - chunk.append(True) - self.chunks.append(tuple(chunk)) - - def add_itxt(self, key, value, lang="", tkey="", zip=False): - """Appends an iTXt chunk. - - :param key: latin-1 encodable text key name - :param value: value for this key - :param lang: language code - :param tkey: UTF-8 version of the key name - :param zip: compression flag - - """ - - if not isinstance(key, bytes): - key = key.encode("latin-1", "strict") - if not isinstance(value, bytes): - value = value.encode("utf-8", "strict") - if not isinstance(lang, bytes): - lang = lang.encode("utf-8", "strict") - if not isinstance(tkey, bytes): - tkey = tkey.encode("utf-8", "strict") - - if zip: - self.add( - b"iTXt", - key + b"\0\x01\0" + lang + b"\0" + tkey + b"\0" + zlib.compress(value), - ) - else: - self.add(b"iTXt", key + b"\0\0\0" + lang + b"\0" + tkey + b"\0" + value) - - def add_text(self, key, value, zip=False): - """Appends a text chunk. - - :param key: latin-1 encodable text key name - :param value: value for this key, text or an - :py:class:`PIL.PngImagePlugin.iTXt` instance - :param zip: compression flag - - """ - if isinstance(value, iTXt): - return self.add_itxt(key, value, value.lang, value.tkey, zip=zip) - - # The tEXt chunk stores latin-1 text - if not isinstance(value, bytes): - try: - value = value.encode("latin-1", "strict") - except UnicodeError: - return self.add_itxt(key, value, zip=zip) - - if not isinstance(key, bytes): - key = key.encode("latin-1", "strict") - - if zip: - self.add(b"zTXt", key + b"\0\0" + zlib.compress(value)) - else: - self.add(b"tEXt", key + b"\0" + value) - - -# -------------------------------------------------------------------- -# PNG image stream (IHDR/IEND) - - -class PngStream(ChunkStream): - def __init__(self, fp): - super().__init__(fp) - - # local copies of Image attributes - self.im_info = {} - self.im_text = {} - self.im_size = (0, 0) - self.im_mode = None - self.im_tile = None - self.im_palette = None - self.im_custom_mimetype = None - self.im_n_frames = None - self._seq_num = None - self.rewind_state = None - - self.text_memory = 0 - - def check_text_memory(self, chunklen): - self.text_memory += chunklen - if self.text_memory > MAX_TEXT_MEMORY: - raise ValueError( - "Too much memory used in text chunks: " - f"{self.text_memory}>MAX_TEXT_MEMORY" - ) - - def save_rewind(self): - self.rewind_state = { - "info": self.im_info.copy(), - "tile": self.im_tile, - "seq_num": self._seq_num, - } - - def rewind(self): - self.im_info = self.rewind_state["info"] - self.im_tile = self.rewind_state["tile"] - self._seq_num = self.rewind_state["seq_num"] - - def chunk_iCCP(self, pos, length): - - # ICC profile - s = ImageFile._safe_read(self.fp, length) - # according to PNG spec, the iCCP chunk contains: - # Profile name 1-79 bytes (character string) - # Null separator 1 byte (null character) - # Compression method 1 byte (0) - # Compressed profile n bytes (zlib with deflate compression) - i = s.find(b"\0") - logger.debug("iCCP profile name %r", s[:i]) - logger.debug("Compression method %s", s[i]) - comp_method = s[i] - if comp_method != 0: - raise SyntaxError(f"Unknown compression method {comp_method} in iCCP chunk") - try: - icc_profile = _safe_zlib_decompress(s[i + 2 :]) - except ValueError: - if ImageFile.LOAD_TRUNCATED_IMAGES: - icc_profile = None - else: - raise - except zlib.error: - icc_profile = None # FIXME - self.im_info["icc_profile"] = icc_profile - return s - - def chunk_IHDR(self, pos, length): - - # image header - s = ImageFile._safe_read(self.fp, length) - self.im_size = i32(s, 0), i32(s, 4) - try: - self.im_mode, self.im_rawmode = _MODES[(s[8], s[9])] - except Exception: - pass - if s[12]: - self.im_info["interlace"] = 1 - if s[11]: - raise SyntaxError("unknown filter category") - return s - - def chunk_IDAT(self, pos, length): - - # image data - if "bbox" in self.im_info: - tile = [("zip", self.im_info["bbox"], pos, self.im_rawmode)] - else: - if self.im_n_frames is not None: - self.im_info["default_image"] = True - tile = [("zip", (0, 0) + self.im_size, pos, self.im_rawmode)] - self.im_tile = tile - self.im_idat = length - raise EOFError - - def chunk_IEND(self, pos, length): - - # end of PNG image - raise EOFError - - def chunk_PLTE(self, pos, length): - - # palette - s = ImageFile._safe_read(self.fp, length) - if self.im_mode == "P": - self.im_palette = "RGB", s - return s - - def chunk_tRNS(self, pos, length): - - # transparency - s = ImageFile._safe_read(self.fp, length) - if self.im_mode == "P": - if _simple_palette.match(s): - # tRNS contains only one full-transparent entry, - # other entries are full opaque - i = s.find(b"\0") - if i >= 0: - self.im_info["transparency"] = i - else: - # otherwise, we have a byte string with one alpha value - # for each palette entry - self.im_info["transparency"] = s - elif self.im_mode in ("1", "L", "I"): - self.im_info["transparency"] = i16(s) - elif self.im_mode == "RGB": - self.im_info["transparency"] = i16(s), i16(s, 2), i16(s, 4) - return s - - def chunk_gAMA(self, pos, length): - # gamma setting - s = ImageFile._safe_read(self.fp, length) - self.im_info["gamma"] = i32(s) / 100000.0 - return s - - def chunk_cHRM(self, pos, length): - # chromaticity, 8 unsigned ints, actual value is scaled by 100,000 - # WP x,y, Red x,y, Green x,y Blue x,y - - s = ImageFile._safe_read(self.fp, length) - raw_vals = struct.unpack(">%dI" % (len(s) // 4), s) - self.im_info["chromaticity"] = tuple(elt / 100000.0 for elt in raw_vals) - return s - - def chunk_sRGB(self, pos, length): - # srgb rendering intent, 1 byte - # 0 perceptual - # 1 relative colorimetric - # 2 saturation - # 3 absolute colorimetric - - s = ImageFile._safe_read(self.fp, length) - self.im_info["srgb"] = s[0] - return s - - def chunk_pHYs(self, pos, length): - - # pixels per unit - s = ImageFile._safe_read(self.fp, length) - px, py = i32(s, 0), i32(s, 4) - unit = s[8] - if unit == 1: # meter - dpi = int(px * 0.0254 + 0.5), int(py * 0.0254 + 0.5) - self.im_info["dpi"] = dpi - elif unit == 0: - self.im_info["aspect"] = px, py - return s - - def chunk_tEXt(self, pos, length): - - # text - s = ImageFile._safe_read(self.fp, length) - try: - k, v = s.split(b"\0", 1) - except ValueError: - # fallback for broken tEXt tags - k = s - v = b"" - if k: - k = k.decode("latin-1", "strict") - v_str = v.decode("latin-1", "replace") - - self.im_info[k] = v if k == "exif" else v_str - self.im_text[k] = v_str - self.check_text_memory(len(v_str)) - - return s - - def chunk_zTXt(self, pos, length): - - # compressed text - s = ImageFile._safe_read(self.fp, length) - try: - k, v = s.split(b"\0", 1) - except ValueError: - k = s - v = b"" - if v: - comp_method = v[0] - else: - comp_method = 0 - if comp_method != 0: - raise SyntaxError(f"Unknown compression method {comp_method} in zTXt chunk") - try: - v = _safe_zlib_decompress(v[1:]) - except ValueError: - if ImageFile.LOAD_TRUNCATED_IMAGES: - v = b"" - else: - raise - except zlib.error: - v = b"" - - if k: - k = k.decode("latin-1", "strict") - v = v.decode("latin-1", "replace") - - self.im_info[k] = self.im_text[k] = v - self.check_text_memory(len(v)) - - return s - - def chunk_iTXt(self, pos, length): - - # international text - r = s = ImageFile._safe_read(self.fp, length) - try: - k, r = r.split(b"\0", 1) - except ValueError: - return s - if len(r) < 2: - return s - cf, cm, r = r[0], r[1], r[2:] - try: - lang, tk, v = r.split(b"\0", 2) - except ValueError: - return s - if cf != 0: - if cm == 0: - try: - v = _safe_zlib_decompress(v) - except ValueError: - if ImageFile.LOAD_TRUNCATED_IMAGES: - return s - else: - raise - except zlib.error: - return s - else: - return s - try: - k = k.decode("latin-1", "strict") - lang = lang.decode("utf-8", "strict") - tk = tk.decode("utf-8", "strict") - v = v.decode("utf-8", "strict") - except UnicodeError: - return s - - self.im_info[k] = self.im_text[k] = iTXt(v, lang, tk) - self.check_text_memory(len(v)) - - return s - - def chunk_eXIf(self, pos, length): - s = ImageFile._safe_read(self.fp, length) - self.im_info["exif"] = b"Exif\x00\x00" + s - return s - - # APNG chunks - def chunk_acTL(self, pos, length): - s = ImageFile._safe_read(self.fp, length) - if self.im_n_frames is not None: - self.im_n_frames = None - warnings.warn("Invalid APNG, will use default PNG image if possible") - return s - n_frames = i32(s) - if n_frames == 0 or n_frames > 0x80000000: - warnings.warn("Invalid APNG, will use default PNG image if possible") - return s - self.im_n_frames = n_frames - self.im_info["loop"] = i32(s, 4) - self.im_custom_mimetype = "image/apng" - return s - - def chunk_fcTL(self, pos, length): - s = ImageFile._safe_read(self.fp, length) - seq = i32(s) - if (self._seq_num is None and seq != 0) or ( - self._seq_num is not None and self._seq_num != seq - 1 - ): - raise SyntaxError("APNG contains frame sequence errors") - self._seq_num = seq - width, height = i32(s, 4), i32(s, 8) - px, py = i32(s, 12), i32(s, 16) - im_w, im_h = self.im_size - if px + width > im_w or py + height > im_h: - raise SyntaxError("APNG contains invalid frames") - self.im_info["bbox"] = (px, py, px + width, py + height) - delay_num, delay_den = i16(s, 20), i16(s, 22) - if delay_den == 0: - delay_den = 100 - self.im_info["duration"] = float(delay_num) / float(delay_den) * 1000 - self.im_info["disposal"] = s[24] - self.im_info["blend"] = s[25] - return s - - def chunk_fdAT(self, pos, length): - s = ImageFile._safe_read(self.fp, 4) - seq = i32(s) - if self._seq_num != seq - 1: - raise SyntaxError("APNG contains frame sequence errors") - self._seq_num = seq - return self.chunk_IDAT(pos + 4, length - 4) - - -# -------------------------------------------------------------------- -# PNG reader - - -def _accept(prefix): - return prefix[:8] == _MAGIC - - -## -# Image plugin for PNG images. - - -class PngImageFile(ImageFile.ImageFile): - - format = "PNG" - format_description = "Portable network graphics" - - def _open(self): - - if not _accept(self.fp.read(8)): - raise SyntaxError("not a PNG file") - self.__fp = self.fp - self.__frame = 0 - - # - # Parse headers up to the first IDAT or fDAT chunk - - self.private_chunks = [] - self.png = PngStream(self.fp) - - while True: - - # - # get next chunk - - cid, pos, length = self.png.read() - - try: - s = self.png.call(cid, pos, length) - except EOFError: - break - except AttributeError: - logger.debug("%r %s %s (unknown)", cid, pos, length) - s = ImageFile._safe_read(self.fp, length) - if cid[1:2].islower(): - self.private_chunks.append((cid, s)) - - self.png.crc(cid, s) - - # - # Copy relevant attributes from the PngStream. An alternative - # would be to let the PngStream class modify these attributes - # directly, but that introduces circular references which are - # difficult to break if things go wrong in the decoder... - # (believe me, I've tried ;-) - - self.mode = self.png.im_mode - self._size = self.png.im_size - self.info = self.png.im_info - self._text = None - self.tile = self.png.im_tile - self.custom_mimetype = self.png.im_custom_mimetype - self.n_frames = self.png.im_n_frames or 1 - self.default_image = self.info.get("default_image", False) - - if self.png.im_palette: - rawmode, data = self.png.im_palette - self.palette = ImagePalette.raw(rawmode, data) - - if cid == b"fdAT": - self.__prepare_idat = length - 4 - else: - self.__prepare_idat = length # used by load_prepare() - - if self.png.im_n_frames is not None: - self._close_exclusive_fp_after_loading = False - self.png.save_rewind() - self.__rewind_idat = self.__prepare_idat - self.__rewind = self.__fp.tell() - if self.default_image: - # IDAT chunk contains default image and not first animation frame - self.n_frames += 1 - self._seek(0) - self.is_animated = self.n_frames > 1 - - @property - def text(self): - # experimental - if self._text is None: - # iTxt, tEXt and zTXt chunks may appear at the end of the file - # So load the file to ensure that they are read - if self.is_animated: - frame = self.__frame - # for APNG, seek to the final frame before loading - self.seek(self.n_frames - 1) - self.load() - if self.is_animated: - self.seek(frame) - return self._text - - def verify(self): - """Verify PNG file""" - - if self.fp is None: - raise RuntimeError("verify must be called directly after open") - - # back up to beginning of IDAT block - self.fp.seek(self.tile[0][2] - 8) - - self.png.verify() - self.png.close() - - if self._exclusive_fp: - self.fp.close() - self.fp = None - - def seek(self, frame): - if not self._seek_check(frame): - return - if frame < self.__frame: - self._seek(0, True) - - last_frame = self.__frame - for f in range(self.__frame + 1, frame + 1): - try: - self._seek(f) - except EOFError as e: - self.seek(last_frame) - raise EOFError("no more images in APNG file") from e - - def _seek(self, frame, rewind=False): - if frame == 0: - if rewind: - self.__fp.seek(self.__rewind) - self.png.rewind() - self.__prepare_idat = self.__rewind_idat - self.im = None - if self.pyaccess: - self.pyaccess = None - self.info = self.png.im_info - self.tile = self.png.im_tile - self.fp = self.__fp - self._prev_im = None - self.dispose = None - self.default_image = self.info.get("default_image", False) - self.dispose_op = self.info.get("disposal") - self.blend_op = self.info.get("blend") - self.dispose_extent = self.info.get("bbox") - self.__frame = 0 - else: - if frame != self.__frame + 1: - raise ValueError(f"cannot seek to frame {frame}") - - # ensure previous frame was loaded - self.load() - - if self.dispose: - self.im.paste(self.dispose, self.dispose_extent) - self._prev_im = self.im.copy() - - self.fp = self.__fp - - # advance to the next frame - if self.__prepare_idat: - ImageFile._safe_read(self.fp, self.__prepare_idat) - self.__prepare_idat = 0 - frame_start = False - while True: - self.fp.read(4) # CRC - - try: - cid, pos, length = self.png.read() - except (struct.error, SyntaxError): - break - - if cid == b"IEND": - raise EOFError("No more images in APNG file") - if cid == b"fcTL": - if frame_start: - # there must be at least one fdAT chunk between fcTL chunks - raise SyntaxError("APNG missing frame data") - frame_start = True - - try: - self.png.call(cid, pos, length) - except UnicodeDecodeError: - break - except EOFError: - if cid == b"fdAT": - length -= 4 - if frame_start: - self.__prepare_idat = length - break - ImageFile._safe_read(self.fp, length) - except AttributeError: - logger.debug("%r %s %s (unknown)", cid, pos, length) - ImageFile._safe_read(self.fp, length) - - self.__frame = frame - self.tile = self.png.im_tile - self.dispose_op = self.info.get("disposal") - self.blend_op = self.info.get("blend") - self.dispose_extent = self.info.get("bbox") - - if not self.tile: - raise EOFError - - # setup frame disposal (actual disposal done when needed in the next _seek()) - if self._prev_im is None and self.dispose_op == APNG_DISPOSE_OP_PREVIOUS: - self.dispose_op = APNG_DISPOSE_OP_BACKGROUND - - if self.dispose_op == APNG_DISPOSE_OP_PREVIOUS: - self.dispose = self._prev_im.copy() - self.dispose = self._crop(self.dispose, self.dispose_extent) - elif self.dispose_op == APNG_DISPOSE_OP_BACKGROUND: - self.dispose = Image.core.fill(self.mode, self.size) - self.dispose = self._crop(self.dispose, self.dispose_extent) - else: - self.dispose = None - - def tell(self): - return self.__frame - - def load_prepare(self): - """internal: prepare to read PNG file""" - - if self.info.get("interlace"): - self.decoderconfig = self.decoderconfig + (1,) - - self.__idat = self.__prepare_idat # used by load_read() - ImageFile.ImageFile.load_prepare(self) - - def load_read(self, read_bytes): - """internal: read more image data""" - - while self.__idat == 0: - # end of chunk, skip forward to next one - - self.fp.read(4) # CRC - - cid, pos, length = self.png.read() - - if cid not in [b"IDAT", b"DDAT", b"fdAT"]: - self.png.push(cid, pos, length) - return b"" - - if cid == b"fdAT": - try: - self.png.call(cid, pos, length) - except EOFError: - pass - self.__idat = length - 4 # sequence_num has already been read - else: - self.__idat = length # empty chunks are allowed - - # read more data from this chunk - if read_bytes <= 0: - read_bytes = self.__idat - else: - read_bytes = min(read_bytes, self.__idat) - - self.__idat = self.__idat - read_bytes - - return self.fp.read(read_bytes) - - def load_end(self): - """internal: finished reading image data""" - while True: - self.fp.read(4) # CRC - - try: - cid, pos, length = self.png.read() - except (struct.error, SyntaxError): - break - - if cid == b"IEND": - break - elif cid == b"fcTL" and self.is_animated: - # start of the next frame, stop reading - self.__prepare_idat = 0 - self.png.push(cid, pos, length) - break - - try: - self.png.call(cid, pos, length) - except UnicodeDecodeError: - break - except EOFError: - if cid == b"fdAT": - length -= 4 - ImageFile._safe_read(self.fp, length) - except AttributeError: - logger.debug("%r %s %s (unknown)", cid, pos, length) - s = ImageFile._safe_read(self.fp, length) - if cid[1:2].islower(): - self.private_chunks.append((cid, s, True)) - self._text = self.png.im_text - if not self.is_animated: - self.png.close() - self.png = None - else: - if self._prev_im and self.blend_op == APNG_BLEND_OP_OVER: - updated = self._crop(self.im, self.dispose_extent) - self._prev_im.paste( - updated, self.dispose_extent, updated.convert("RGBA") - ) - self.im = self._prev_im - if self.pyaccess: - self.pyaccess = None - - def _getexif(self): - if "exif" not in self.info: - self.load() - if "exif" not in self.info and "Raw profile type exif" not in self.info: - return None - return dict(self.getexif()) - - def getexif(self): - if "exif" not in self.info: - self.load() - - return super().getexif() - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -# -------------------------------------------------------------------- -# PNG writer - -_OUTMODES = { - # supported PIL modes, and corresponding rawmodes/bits/color combinations - "1": ("1", b"\x01\x00"), - "L;1": ("L;1", b"\x01\x00"), - "L;2": ("L;2", b"\x02\x00"), - "L;4": ("L;4", b"\x04\x00"), - "L": ("L", b"\x08\x00"), - "LA": ("LA", b"\x08\x04"), - "I": ("I;16B", b"\x10\x00"), - "I;16": ("I;16B", b"\x10\x00"), - "P;1": ("P;1", b"\x01\x03"), - "P;2": ("P;2", b"\x02\x03"), - "P;4": ("P;4", b"\x04\x03"), - "P": ("P", b"\x08\x03"), - "RGB": ("RGB", b"\x08\x02"), - "RGBA": ("RGBA", b"\x08\x06"), -} - - -def putchunk(fp, cid, *data): - """Write a PNG chunk (including CRC field)""" - - data = b"".join(data) - - fp.write(o32(len(data)) + cid) - fp.write(data) - crc = _crc32(data, _crc32(cid)) - fp.write(o32(crc)) - - -class _idat: - # wrap output from the encoder in IDAT chunks - - def __init__(self, fp, chunk): - self.fp = fp - self.chunk = chunk - - def write(self, data): - self.chunk(self.fp, b"IDAT", data) - - -class _fdat: - # wrap encoder output in fdAT chunks - - def __init__(self, fp, chunk, seq_num): - self.fp = fp - self.chunk = chunk - self.seq_num = seq_num - - def write(self, data): - self.chunk(self.fp, b"fdAT", o32(self.seq_num), data) - self.seq_num += 1 - - -def _write_multiple_frames(im, fp, chunk, rawmode): - default_image = im.encoderinfo.get("default_image", im.info.get("default_image")) - duration = im.encoderinfo.get("duration", im.info.get("duration", 0)) - loop = im.encoderinfo.get("loop", im.info.get("loop", 0)) - disposal = im.encoderinfo.get("disposal", im.info.get("disposal")) - blend = im.encoderinfo.get("blend", im.info.get("blend")) - - if default_image: - chain = itertools.chain(im.encoderinfo.get("append_images", [])) - else: - chain = itertools.chain([im], im.encoderinfo.get("append_images", [])) - - im_frames = [] - frame_count = 0 - for im_seq in chain: - for im_frame in ImageSequence.Iterator(im_seq): - im_frame = im_frame.copy() - if im_frame.mode != im.mode: - if im.mode == "P": - im_frame = im_frame.convert(im.mode, palette=im.palette) - else: - im_frame = im_frame.convert(im.mode) - encoderinfo = im.encoderinfo.copy() - if isinstance(duration, (list, tuple)): - encoderinfo["duration"] = duration[frame_count] - if isinstance(disposal, (list, tuple)): - encoderinfo["disposal"] = disposal[frame_count] - if isinstance(blend, (list, tuple)): - encoderinfo["blend"] = blend[frame_count] - frame_count += 1 - - if im_frames: - previous = im_frames[-1] - prev_disposal = previous["encoderinfo"].get("disposal") - prev_blend = previous["encoderinfo"].get("blend") - if prev_disposal == APNG_DISPOSE_OP_PREVIOUS and len(im_frames) < 2: - prev_disposal = APNG_DISPOSE_OP_BACKGROUND - - if prev_disposal == APNG_DISPOSE_OP_BACKGROUND: - base_im = previous["im"] - dispose = Image.core.fill("RGBA", im.size, (0, 0, 0, 0)) - bbox = previous["bbox"] - if bbox: - dispose = dispose.crop(bbox) - else: - bbox = (0, 0) + im.size - base_im.paste(dispose, bbox) - elif prev_disposal == APNG_DISPOSE_OP_PREVIOUS: - base_im = im_frames[-2]["im"] - else: - base_im = previous["im"] - delta = ImageChops.subtract_modulo( - im_frame.convert("RGB"), base_im.convert("RGB") - ) - bbox = delta.getbbox() - if ( - not bbox - and prev_disposal == encoderinfo.get("disposal") - and prev_blend == encoderinfo.get("blend") - ): - duration = encoderinfo.get("duration", 0) - if duration: - if "duration" in previous["encoderinfo"]: - previous["encoderinfo"]["duration"] += duration - else: - previous["encoderinfo"]["duration"] = duration - continue - else: - bbox = None - im_frames.append({"im": im_frame, "bbox": bbox, "encoderinfo": encoderinfo}) - - # animation control - chunk( - fp, - b"acTL", - o32(len(im_frames)), # 0: num_frames - o32(loop), # 4: num_plays - ) - - # default image IDAT (if it exists) - if default_image: - ImageFile._save(im, _idat(fp, chunk), [("zip", (0, 0) + im.size, 0, rawmode)]) - - seq_num = 0 - for frame, frame_data in enumerate(im_frames): - im_frame = frame_data["im"] - if not frame_data["bbox"]: - bbox = (0, 0) + im_frame.size - else: - bbox = frame_data["bbox"] - im_frame = im_frame.crop(bbox) - size = im_frame.size - duration = int(round(frame_data["encoderinfo"].get("duration", 0))) - disposal = frame_data["encoderinfo"].get("disposal", APNG_DISPOSE_OP_NONE) - blend = frame_data["encoderinfo"].get("blend", APNG_BLEND_OP_SOURCE) - # frame control - chunk( - fp, - b"fcTL", - o32(seq_num), # sequence_number - o32(size[0]), # width - o32(size[1]), # height - o32(bbox[0]), # x_offset - o32(bbox[1]), # y_offset - o16(duration), # delay_numerator - o16(1000), # delay_denominator - o8(disposal), # dispose_op - o8(blend), # blend_op - ) - seq_num += 1 - # frame data - if frame == 0 and not default_image: - # first frame must be in IDAT chunks for backwards compatibility - ImageFile._save( - im_frame, - _idat(fp, chunk), - [("zip", (0, 0) + im_frame.size, 0, rawmode)], - ) - else: - fdat_chunks = _fdat(fp, chunk, seq_num) - ImageFile._save( - im_frame, - fdat_chunks, - [("zip", (0, 0) + im_frame.size, 0, rawmode)], - ) - seq_num = fdat_chunks.seq_num - - -def _save_all(im, fp, filename): - _save(im, fp, filename, save_all=True) - - -def _save(im, fp, filename, chunk=putchunk, save_all=False): - # save an image to disk (called by the save method) - - mode = im.mode - - if mode == "P": - - # - # attempt to minimize storage requirements for palette images - if "bits" in im.encoderinfo: - # number of bits specified by user - colors = 1 << im.encoderinfo["bits"] - else: - # check palette contents - if im.palette: - colors = max(min(len(im.palette.getdata()[1]) // 3, 256), 2) - else: - colors = 256 - - if colors <= 2: - bits = 1 - elif colors <= 4: - bits = 2 - elif colors <= 16: - bits = 4 - else: - bits = 8 - if bits != 8: - mode = f"{mode};{bits}" - - # encoder options - im.encoderconfig = ( - im.encoderinfo.get("optimize", False), - im.encoderinfo.get("compress_level", -1), - im.encoderinfo.get("compress_type", -1), - im.encoderinfo.get("dictionary", b""), - ) - - # get the corresponding PNG mode - try: - rawmode, mode = _OUTMODES[mode] - except KeyError as e: - raise OSError(f"cannot write mode {mode} as PNG") from e - - # - # write minimal PNG file - - fp.write(_MAGIC) - - chunk( - fp, - b"IHDR", - o32(im.size[0]), # 0: size - o32(im.size[1]), - mode, # 8: depth/type - b"\0", # 10: compression - b"\0", # 11: filter category - b"\0", # 12: interlace flag - ) - - chunks = [b"cHRM", b"gAMA", b"sBIT", b"sRGB", b"tIME"] - - icc = im.encoderinfo.get("icc_profile", im.info.get("icc_profile")) - if icc: - # ICC profile - # according to PNG spec, the iCCP chunk contains: - # Profile name 1-79 bytes (character string) - # Null separator 1 byte (null character) - # Compression method 1 byte (0) - # Compressed profile n bytes (zlib with deflate compression) - name = b"ICC Profile" - data = name + b"\0\0" + zlib.compress(icc) - chunk(fp, b"iCCP", data) - - # You must either have sRGB or iCCP. - # Disallow sRGB chunks when an iCCP-chunk has been emitted. - chunks.remove(b"sRGB") - - info = im.encoderinfo.get("pnginfo") - if info: - chunks_multiple_allowed = [b"sPLT", b"iTXt", b"tEXt", b"zTXt"] - for info_chunk in info.chunks: - cid, data = info_chunk[:2] - if cid in chunks: - chunks.remove(cid) - chunk(fp, cid, data) - elif cid in chunks_multiple_allowed: - chunk(fp, cid, data) - elif cid[1:2].islower(): - # Private chunk - after_idat = info_chunk[2:3] - if not after_idat: - chunk(fp, cid, data) - - if im.mode == "P": - palette_byte_number = (2 ** bits) * 3 - palette_bytes = im.im.getpalette("RGB")[:palette_byte_number] - while len(palette_bytes) < palette_byte_number: - palette_bytes += b"\0" - chunk(fp, b"PLTE", palette_bytes) - - transparency = im.encoderinfo.get("transparency", im.info.get("transparency", None)) - - if transparency or transparency == 0: - if im.mode == "P": - # limit to actual palette size - alpha_bytes = 2 ** bits - if isinstance(transparency, bytes): - chunk(fp, b"tRNS", transparency[:alpha_bytes]) - else: - transparency = max(0, min(255, transparency)) - alpha = b"\xFF" * transparency + b"\0" - chunk(fp, b"tRNS", alpha[:alpha_bytes]) - elif im.mode in ("1", "L", "I"): - transparency = max(0, min(65535, transparency)) - chunk(fp, b"tRNS", o16(transparency)) - elif im.mode == "RGB": - red, green, blue = transparency - chunk(fp, b"tRNS", o16(red) + o16(green) + o16(blue)) - else: - if "transparency" in im.encoderinfo: - # don't bother with transparency if it's an RGBA - # and it's in the info dict. It's probably just stale. - raise OSError("cannot use transparency for this mode") - else: - if im.mode == "P" and im.im.getpalettemode() == "RGBA": - alpha = im.im.getpalette("RGBA", "A") - alpha_bytes = 2 ** bits - chunk(fp, b"tRNS", alpha[:alpha_bytes]) - - dpi = im.encoderinfo.get("dpi") - if dpi: - chunk( - fp, - b"pHYs", - o32(int(dpi[0] / 0.0254 + 0.5)), - o32(int(dpi[1] / 0.0254 + 0.5)), - b"\x01", - ) - - if info: - chunks = [b"bKGD", b"hIST"] - for info_chunk in info.chunks: - cid, data = info_chunk[:2] - if cid in chunks: - chunks.remove(cid) - chunk(fp, cid, data) - - exif = im.encoderinfo.get("exif", im.info.get("exif")) - if exif: - if isinstance(exif, Image.Exif): - exif = exif.tobytes(8) - if exif.startswith(b"Exif\x00\x00"): - exif = exif[6:] - chunk(fp, b"eXIf", exif) - - if save_all: - _write_multiple_frames(im, fp, chunk, rawmode) - else: - ImageFile._save(im, _idat(fp, chunk), [("zip", (0, 0) + im.size, 0, rawmode)]) - - if info: - for info_chunk in info.chunks: - cid, data = info_chunk[:2] - if cid[1:2].islower(): - # Private chunk - after_idat = info_chunk[2:3] - if after_idat: - chunk(fp, cid, data) - - chunk(fp, b"IEND", b"") - - if hasattr(fp, "flush"): - fp.flush() - - -# -------------------------------------------------------------------- -# PNG chunk converter - - -def getchunks(im, **params): - """Return a list of PNG chunks representing this image.""" - - class collector: - data = [] - - def write(self, data): - pass - - def append(self, chunk): - self.data.append(chunk) - - def append(fp, cid, *data): - data = b"".join(data) - crc = o32(_crc32(data, _crc32(cid))) - fp.append((cid, data, crc)) - - fp = collector() - - try: - im.encoderinfo = params - _save(im, fp, None, append) - finally: - del im.encoderinfo - - return fp.data - - -# -------------------------------------------------------------------- -# Registry - -Image.register_open(PngImageFile.format, PngImageFile, _accept) -Image.register_save(PngImageFile.format, _save) -Image.register_save_all(PngImageFile.format, _save_all) - -Image.register_extensions(PngImageFile.format, [".png", ".apng"]) - -Image.register_mime(PngImageFile.format, "image/png") diff --git a/PIL/PpmImagePlugin.py b/PIL/PpmImagePlugin.py deleted file mode 100644 index abf4d65..0000000 --- a/PIL/PpmImagePlugin.py +++ /dev/null @@ -1,164 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# PPM support for PIL -# -# History: -# 96-03-24 fl Created -# 98-03-06 fl Write RGBA images (as RGB, that is) -# -# Copyright (c) Secret Labs AB 1997-98. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# - - -from . import Image, ImageFile - -# -# -------------------------------------------------------------------- - -b_whitespace = b"\x20\x09\x0a\x0b\x0c\x0d" - -MODES = { - # standard - b"P4": "1", - b"P5": "L", - b"P6": "RGB", - # extensions - b"P0CMYK": "CMYK", - # PIL extensions (for test purposes only) - b"PyP": "P", - b"PyRGBA": "RGBA", - b"PyCMYK": "CMYK", -} - - -def _accept(prefix): - return prefix[0:1] == b"P" and prefix[1] in b"0456y" - - -## -# Image plugin for PBM, PGM, and PPM images. - - -class PpmImageFile(ImageFile.ImageFile): - - format = "PPM" - format_description = "Pbmplus image" - - def _token(self, s=b""): - while True: # read until next whitespace - c = self.fp.read(1) - if not c or c in b_whitespace: - break - if c > b"\x79": - raise ValueError("Expected ASCII value, found binary") - s = s + c - if len(s) > 9: - raise ValueError("Expected int, got > 9 digits") - return s - - def _open(self): - - # check magic - s = self.fp.read(1) - if s != b"P": - raise SyntaxError("not a PPM file") - magic_number = self._token(s) - mode = MODES[magic_number] - - self.custom_mimetype = { - b"P4": "image/x-portable-bitmap", - b"P5": "image/x-portable-graymap", - b"P6": "image/x-portable-pixmap", - }.get(magic_number) - - if mode == "1": - self.mode = "1" - rawmode = "1;I" - else: - self.mode = rawmode = mode - - for ix in range(3): - while True: - while True: - s = self.fp.read(1) - if s not in b_whitespace: - break - if s == b"": - raise ValueError("File does not extend beyond magic number") - if s != b"#": - break - s = self.fp.readline() - s = int(self._token(s)) - if ix == 0: - xsize = s - elif ix == 1: - ysize = s - if mode == "1": - break - elif ix == 2: - # maxgrey - if s > 255: - if not mode == "L": - raise ValueError(f"Too many colors for band: {s}") - if s < 2 ** 16: - self.mode = "I" - rawmode = "I;16B" - else: - self.mode = "I" - rawmode = "I;32B" - - self._size = xsize, ysize - self.tile = [("raw", (0, 0, xsize, ysize), self.fp.tell(), (rawmode, 0, 1))] - - -# -# -------------------------------------------------------------------- - - -def _save(im, fp, filename): - if im.mode == "1": - rawmode, head = "1;I", b"P4" - elif im.mode == "L": - rawmode, head = "L", b"P5" - elif im.mode == "I": - if im.getextrema()[1] < 2 ** 16: - rawmode, head = "I;16B", b"P5" - else: - rawmode, head = "I;32B", b"P5" - elif im.mode == "RGB": - rawmode, head = "RGB", b"P6" - elif im.mode == "RGBA": - rawmode, head = "RGB", b"P6" - else: - raise OSError(f"cannot write mode {im.mode} as PPM") - fp.write(head + ("\n%d %d\n" % im.size).encode("ascii")) - if head == b"P6": - fp.write(b"255\n") - if head == b"P5": - if rawmode == "L": - fp.write(b"255\n") - elif rawmode == "I;16B": - fp.write(b"65535\n") - elif rawmode == "I;32B": - fp.write(b"2147483648\n") - ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, 1))]) - - # ALTERNATIVE: save via builtin debug function - # im._dump(filename) - - -# -# -------------------------------------------------------------------- - - -Image.register_open(PpmImageFile.format, PpmImageFile, _accept) -Image.register_save(PpmImageFile.format, _save) - -Image.register_extensions(PpmImageFile.format, [".pbm", ".pgm", ".ppm", ".pnm"]) - -Image.register_mime(PpmImageFile.format, "image/x-portable-anymap") diff --git a/PIL/PsdImagePlugin.py b/PIL/PsdImagePlugin.py deleted file mode 100644 index d3799ed..0000000 --- a/PIL/PsdImagePlugin.py +++ /dev/null @@ -1,313 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# Adobe PSD 2.5/3.0 file handling -# -# History: -# 1995-09-01 fl Created -# 1997-01-03 fl Read most PSD images -# 1997-01-18 fl Fixed P and CMYK support -# 2001-10-21 fl Added seek/tell support (for layers) -# -# Copyright (c) 1997-2001 by Secret Labs AB. -# Copyright (c) 1995-2001 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import io - -from . import Image, ImageFile, ImagePalette -from ._binary import i8 -from ._binary import i16be as i16 -from ._binary import i32be as i32 - -MODES = { - # (photoshop mode, bits) -> (pil mode, required channels) - (0, 1): ("1", 1), - (0, 8): ("L", 1), - (1, 8): ("L", 1), - (2, 8): ("P", 1), - (3, 8): ("RGB", 3), - (4, 8): ("CMYK", 4), - (7, 8): ("L", 1), # FIXME: multilayer - (8, 8): ("L", 1), # duotone - (9, 8): ("LAB", 3), -} - - -# --------------------------------------------------------------------. -# read PSD images - - -def _accept(prefix): - return prefix[:4] == b"8BPS" - - -## -# Image plugin for Photoshop images. - - -class PsdImageFile(ImageFile.ImageFile): - - format = "PSD" - format_description = "Adobe Photoshop" - _close_exclusive_fp_after_loading = False - - def _open(self): - - read = self.fp.read - - # - # header - - s = read(26) - if not _accept(s) or i16(s, 4) != 1: - raise SyntaxError("not a PSD file") - - psd_bits = i16(s, 22) - psd_channels = i16(s, 12) - psd_mode = i16(s, 24) - - mode, channels = MODES[(psd_mode, psd_bits)] - - if channels > psd_channels: - raise OSError("not enough channels") - - self.mode = mode - self._size = i32(s, 18), i32(s, 14) - - # - # color mode data - - size = i32(read(4)) - if size: - data = read(size) - if mode == "P" and size == 768: - self.palette = ImagePalette.raw("RGB;L", data) - - # - # image resources - - self.resources = [] - - size = i32(read(4)) - if size: - # load resources - end = self.fp.tell() + size - while self.fp.tell() < end: - read(4) # signature - id = i16(read(2)) - name = read(i8(read(1))) - if not (len(name) & 1): - read(1) # padding - data = read(i32(read(4))) - if len(data) & 1: - read(1) # padding - self.resources.append((id, name, data)) - if id == 1039: # ICC profile - self.info["icc_profile"] = data - - # - # layer and mask information - - self.layers = [] - - size = i32(read(4)) - if size: - end = self.fp.tell() + size - size = i32(read(4)) - if size: - self.layers = _layerinfo(self.fp) - self.fp.seek(end) - self.n_frames = len(self.layers) - self.is_animated = self.n_frames > 1 - - # - # image descriptor - - self.tile = _maketile(self.fp, mode, (0, 0) + self.size, channels) - - # keep the file open - self.__fp = self.fp - self.frame = 1 - self._min_frame = 1 - - def seek(self, layer): - if not self._seek_check(layer): - return - - # seek to given layer (1..max) - try: - name, mode, bbox, tile = self.layers[layer - 1] - self.mode = mode - self.tile = tile - self.frame = layer - self.fp = self.__fp - return name, bbox - except IndexError as e: - raise EOFError("no such layer") from e - - def tell(self): - # return layer number (0=image, 1..max=layers) - return self.frame - - def load_prepare(self): - # create image memory if necessary - if not self.im or self.im.mode != self.mode or self.im.size != self.size: - self.im = Image.core.fill(self.mode, self.size, 0) - # create palette (optional) - if self.mode == "P": - Image.Image.load(self) - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -def _layerinfo(file): - # read layerinfo block - layers = [] - read = file.read - for i in range(abs(i16(read(2)))): - - # bounding box - y0 = i32(read(4)) - x0 = i32(read(4)) - y1 = i32(read(4)) - x1 = i32(read(4)) - - # image info - info = [] - mode = [] - types = list(range(i16(read(2)))) - if len(types) > 4: - continue - - for i in types: - type = i16(read(2)) - - if type == 65535: - m = "A" - else: - m = "RGBA"[type] - - mode.append(m) - size = i32(read(4)) - info.append((m, size)) - - # figure out the image mode - mode.sort() - if mode == ["R"]: - mode = "L" - elif mode == ["B", "G", "R"]: - mode = "RGB" - elif mode == ["A", "B", "G", "R"]: - mode = "RGBA" - else: - mode = None # unknown - - # skip over blend flags and extra information - read(12) # filler - name = "" - size = i32(read(4)) # length of the extra data field - combined = 0 - if size: - data_end = file.tell() + size - - length = i32(read(4)) - if length: - file.seek(length - 16, io.SEEK_CUR) - combined += length + 4 - - length = i32(read(4)) - if length: - file.seek(length, io.SEEK_CUR) - combined += length + 4 - - length = i8(read(1)) - if length: - # Don't know the proper encoding, - # Latin-1 should be a good guess - name = read(length).decode("latin-1", "replace") - combined += length + 1 - - file.seek(data_end) - layers.append((name, mode, (x0, y0, x1, y1))) - - # get tiles - i = 0 - for name, mode, bbox in layers: - tile = [] - for m in mode: - t = _maketile(file, m, bbox, 1) - if t: - tile.extend(t) - layers[i] = name, mode, bbox, tile - i += 1 - - return layers - - -def _maketile(file, mode, bbox, channels): - - tile = None - read = file.read - - compression = i16(read(2)) - - xsize = bbox[2] - bbox[0] - ysize = bbox[3] - bbox[1] - - offset = file.tell() - - if compression == 0: - # - # raw compression - tile = [] - for channel in range(channels): - layer = mode[channel] - if mode == "CMYK": - layer += ";I" - tile.append(("raw", bbox, offset, layer)) - offset = offset + xsize * ysize - - elif compression == 1: - # - # packbits compression - i = 0 - tile = [] - bytecount = read(channels * ysize * 2) - offset = file.tell() - for channel in range(channels): - layer = mode[channel] - if mode == "CMYK": - layer += ";I" - tile.append(("packbits", bbox, offset, layer)) - for y in range(ysize): - offset = offset + i16(bytecount, i) - i += 2 - - file.seek(offset) - - if offset & 1: - read(1) # padding - - return tile - - -# -------------------------------------------------------------------- -# registry - - -Image.register_open(PsdImageFile.format, PsdImageFile, _accept) - -Image.register_extension(PsdImageFile.format, ".psd") - -Image.register_mime(PsdImageFile.format, "image/vnd.adobe.photoshop") diff --git a/PIL/PyAccess.py b/PIL/PyAccess.py deleted file mode 100644 index 494f5f9..0000000 --- a/PIL/PyAccess.py +++ /dev/null @@ -1,352 +0,0 @@ -# -# The Python Imaging Library -# Pillow fork -# -# Python implementation of the PixelAccess Object -# -# Copyright (c) 1997-2009 by Secret Labs AB. All rights reserved. -# Copyright (c) 1995-2009 by Fredrik Lundh. -# Copyright (c) 2013 Eric Soroos -# -# See the README file for information on usage and redistribution -# - -# Notes: -# -# * Implements the pixel access object following Access. -# * Does not implement the line functions, as they don't appear to be used -# * Taking only the tuple form, which is used from python. -# * Fill.c uses the integer form, but it's still going to use the old -# Access.c implementation. -# - -import logging -import sys - -try: - from cffi import FFI - - defs = """ - struct Pixel_RGBA { - unsigned char r,g,b,a; - }; - struct Pixel_I16 { - unsigned char l,r; - }; - """ - ffi = FFI() - ffi.cdef(defs) -except ImportError as ex: - # Allow error import for doc purposes, but error out when accessing - # anything in core. - from ._util import deferred_error - - FFI = ffi = deferred_error(ex) - -logger = logging.getLogger(__name__) - - -class PyAccess: - def __init__(self, img, readonly=False): - vals = dict(img.im.unsafe_ptrs) - self.readonly = readonly - self.image8 = ffi.cast("unsigned char **", vals["image8"]) - self.image32 = ffi.cast("int **", vals["image32"]) - self.image = ffi.cast("unsigned char **", vals["image"]) - self.xsize, self.ysize = img.im.size - - # Keep pointer to im object to prevent dereferencing. - self._im = img.im - if self._im.mode == "P": - self._palette = img.palette - - # Debugging is polluting test traces, only useful here - # when hacking on PyAccess - # logger.debug("%s", vals) - self._post_init() - - def _post_init(self): - pass - - def __setitem__(self, xy, color): - """ - Modifies the pixel at x,y. The color is given as a single - numerical value for single band images, and a tuple for - multi-band images - - :param xy: The pixel coordinate, given as (x, y). See - :ref:`coordinate-system`. - :param color: The pixel value. - """ - if self.readonly: - raise ValueError("Attempt to putpixel a read only image") - (x, y) = xy - if x < 0: - x = self.xsize + x - if y < 0: - y = self.ysize + y - (x, y) = self.check_xy((x, y)) - - if ( - self._im.mode == "P" - and isinstance(color, (list, tuple)) - and len(color) in [3, 4] - ): - # RGB or RGBA value for a P image - color = self._palette.getcolor(color) - - return self.set_pixel(x, y, color) - - def __getitem__(self, xy): - """ - Returns the pixel at x,y. The pixel is returned as a single - value for single band images or a tuple for multiple band - images - - :param xy: The pixel coordinate, given as (x, y). See - :ref:`coordinate-system`. - :returns: a pixel value for single band images, a tuple of - pixel values for multiband images. - """ - (x, y) = xy - if x < 0: - x = self.xsize + x - if y < 0: - y = self.ysize + y - (x, y) = self.check_xy((x, y)) - return self.get_pixel(x, y) - - putpixel = __setitem__ - getpixel = __getitem__ - - def check_xy(self, xy): - (x, y) = xy - if not (0 <= x < self.xsize and 0 <= y < self.ysize): - raise ValueError("pixel location out of range") - return xy - - -class _PyAccess32_2(PyAccess): - """ PA, LA, stored in first and last bytes of a 32 bit word """ - - def _post_init(self, *args, **kwargs): - self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) - - def get_pixel(self, x, y): - pixel = self.pixels[y][x] - return (pixel.r, pixel.a) - - def set_pixel(self, x, y, color): - pixel = self.pixels[y][x] - # tuple - pixel.r = min(color[0], 255) - pixel.a = min(color[1], 255) - - -class _PyAccess32_3(PyAccess): - """ RGB and friends, stored in the first three bytes of a 32 bit word """ - - def _post_init(self, *args, **kwargs): - self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) - - def get_pixel(self, x, y): - pixel = self.pixels[y][x] - return (pixel.r, pixel.g, pixel.b) - - def set_pixel(self, x, y, color): - pixel = self.pixels[y][x] - # tuple - pixel.r = min(color[0], 255) - pixel.g = min(color[1], 255) - pixel.b = min(color[2], 255) - pixel.a = 255 - - -class _PyAccess32_4(PyAccess): - """ RGBA etc, all 4 bytes of a 32 bit word """ - - def _post_init(self, *args, **kwargs): - self.pixels = ffi.cast("struct Pixel_RGBA **", self.image32) - - def get_pixel(self, x, y): - pixel = self.pixels[y][x] - return (pixel.r, pixel.g, pixel.b, pixel.a) - - def set_pixel(self, x, y, color): - pixel = self.pixels[y][x] - # tuple - pixel.r = min(color[0], 255) - pixel.g = min(color[1], 255) - pixel.b = min(color[2], 255) - pixel.a = min(color[3], 255) - - -class _PyAccess8(PyAccess): - """ 1, L, P, 8 bit images stored as uint8 """ - - def _post_init(self, *args, **kwargs): - self.pixels = self.image8 - - def get_pixel(self, x, y): - return self.pixels[y][x] - - def set_pixel(self, x, y, color): - try: - # integer - self.pixels[y][x] = min(color, 255) - except TypeError: - # tuple - self.pixels[y][x] = min(color[0], 255) - - -class _PyAccessI16_N(PyAccess): - """ I;16 access, native bitendian without conversion """ - - def _post_init(self, *args, **kwargs): - self.pixels = ffi.cast("unsigned short **", self.image) - - def get_pixel(self, x, y): - return self.pixels[y][x] - - def set_pixel(self, x, y, color): - try: - # integer - self.pixels[y][x] = min(color, 65535) - except TypeError: - # tuple - self.pixels[y][x] = min(color[0], 65535) - - -class _PyAccessI16_L(PyAccess): - """ I;16L access, with conversion """ - - def _post_init(self, *args, **kwargs): - self.pixels = ffi.cast("struct Pixel_I16 **", self.image) - - def get_pixel(self, x, y): - pixel = self.pixels[y][x] - return pixel.l + pixel.r * 256 - - def set_pixel(self, x, y, color): - pixel = self.pixels[y][x] - try: - color = min(color, 65535) - except TypeError: - color = min(color[0], 65535) - - pixel.l = color & 0xFF # noqa: E741 - pixel.r = color >> 8 - - -class _PyAccessI16_B(PyAccess): - """ I;16B access, with conversion """ - - def _post_init(self, *args, **kwargs): - self.pixels = ffi.cast("struct Pixel_I16 **", self.image) - - def get_pixel(self, x, y): - pixel = self.pixels[y][x] - return pixel.l * 256 + pixel.r - - def set_pixel(self, x, y, color): - pixel = self.pixels[y][x] - try: - color = min(color, 65535) - except Exception: - color = min(color[0], 65535) - - pixel.l = color >> 8 # noqa: E741 - pixel.r = color & 0xFF - - -class _PyAccessI32_N(PyAccess): - """ Signed Int32 access, native endian """ - - def _post_init(self, *args, **kwargs): - self.pixels = self.image32 - - def get_pixel(self, x, y): - return self.pixels[y][x] - - def set_pixel(self, x, y, color): - self.pixels[y][x] = color - - -class _PyAccessI32_Swap(PyAccess): - """ I;32L/B access, with byteswapping conversion """ - - def _post_init(self, *args, **kwargs): - self.pixels = self.image32 - - def reverse(self, i): - orig = ffi.new("int *", i) - chars = ffi.cast("unsigned char *", orig) - chars[0], chars[1], chars[2], chars[3] = chars[3], chars[2], chars[1], chars[0] - return ffi.cast("int *", chars)[0] - - def get_pixel(self, x, y): - return self.reverse(self.pixels[y][x]) - - def set_pixel(self, x, y, color): - self.pixels[y][x] = self.reverse(color) - - -class _PyAccessF(PyAccess): - """ 32 bit float access """ - - def _post_init(self, *args, **kwargs): - self.pixels = ffi.cast("float **", self.image32) - - def get_pixel(self, x, y): - return self.pixels[y][x] - - def set_pixel(self, x, y, color): - try: - # not a tuple - self.pixels[y][x] = color - except TypeError: - # tuple - self.pixels[y][x] = color[0] - - -mode_map = { - "1": _PyAccess8, - "L": _PyAccess8, - "P": _PyAccess8, - "LA": _PyAccess32_2, - "La": _PyAccess32_2, - "PA": _PyAccess32_2, - "RGB": _PyAccess32_3, - "LAB": _PyAccess32_3, - "HSV": _PyAccess32_3, - "YCbCr": _PyAccess32_3, - "RGBA": _PyAccess32_4, - "RGBa": _PyAccess32_4, - "RGBX": _PyAccess32_4, - "CMYK": _PyAccess32_4, - "F": _PyAccessF, - "I": _PyAccessI32_N, -} - -if sys.byteorder == "little": - mode_map["I;16"] = _PyAccessI16_N - mode_map["I;16L"] = _PyAccessI16_N - mode_map["I;16B"] = _PyAccessI16_B - - mode_map["I;32L"] = _PyAccessI32_N - mode_map["I;32B"] = _PyAccessI32_Swap -else: - mode_map["I;16"] = _PyAccessI16_L - mode_map["I;16L"] = _PyAccessI16_L - mode_map["I;16B"] = _PyAccessI16_N - - mode_map["I;32L"] = _PyAccessI32_Swap - mode_map["I;32B"] = _PyAccessI32_N - - -def new(img, readonly=False): - access_type = mode_map.get(img.mode, None) - if not access_type: - logger.debug("PyAccess Not Implemented: %s", img.mode) - return None - return access_type(img, readonly) diff --git a/PIL/SgiImagePlugin.py b/PIL/SgiImagePlugin.py deleted file mode 100644 index d0f7c99..0000000 --- a/PIL/SgiImagePlugin.py +++ /dev/null @@ -1,229 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# SGI image file handling -# -# See "The SGI Image File Format (Draft version 0.97)", Paul Haeberli. -# -# -# -# History: -# 2017-22-07 mb Add RLE decompression -# 2016-16-10 mb Add save method without compression -# 1995-09-10 fl Created -# -# Copyright (c) 2016 by Mickael Bonfill. -# Copyright (c) 2008 by Karsten Hiddemann. -# Copyright (c) 1997 by Secret Labs AB. -# Copyright (c) 1995 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - - -import os -import struct - -from . import Image, ImageFile -from ._binary import i16be as i16 -from ._binary import o8 - - -def _accept(prefix): - return len(prefix) >= 2 and i16(prefix) == 474 - - -MODES = { - (1, 1, 1): "L", - (1, 2, 1): "L", - (2, 1, 1): "L;16B", - (2, 2, 1): "L;16B", - (1, 3, 3): "RGB", - (2, 3, 3): "RGB;16B", - (1, 3, 4): "RGBA", - (2, 3, 4): "RGBA;16B", -} - - -## -# Image plugin for SGI images. -class SgiImageFile(ImageFile.ImageFile): - - format = "SGI" - format_description = "SGI Image File Format" - - def _open(self): - - # HEAD - headlen = 512 - s = self.fp.read(headlen) - - if not _accept(s): - raise ValueError("Not an SGI image file") - - # compression : verbatim or RLE - compression = s[2] - - # bpc : 1 or 2 bytes (8bits or 16bits) - bpc = s[3] - - # dimension : 1, 2 or 3 (depending on xsize, ysize and zsize) - dimension = i16(s, 4) - - # xsize : width - xsize = i16(s, 6) - - # ysize : height - ysize = i16(s, 8) - - # zsize : channels count - zsize = i16(s, 10) - - # layout - layout = bpc, dimension, zsize - - # determine mode from bits/zsize - rawmode = "" - try: - rawmode = MODES[layout] - except KeyError: - pass - - if rawmode == "": - raise ValueError("Unsupported SGI image mode") - - self._size = xsize, ysize - self.mode = rawmode.split(";")[0] - if self.mode == "RGB": - self.custom_mimetype = "image/rgb" - - # orientation -1 : scanlines begins at the bottom-left corner - orientation = -1 - - # decoder info - if compression == 0: - pagesize = xsize * ysize * bpc - if bpc == 2: - self.tile = [ - ("SGI16", (0, 0) + self.size, headlen, (self.mode, 0, orientation)) - ] - else: - self.tile = [] - offset = headlen - for layer in self.mode: - self.tile.append( - ("raw", (0, 0) + self.size, offset, (layer, 0, orientation)) - ) - offset += pagesize - elif compression == 1: - self.tile = [ - ("sgi_rle", (0, 0) + self.size, headlen, (rawmode, orientation, bpc)) - ] - - -def _save(im, fp, filename): - if im.mode != "RGB" and im.mode != "RGBA" and im.mode != "L": - raise ValueError("Unsupported SGI image mode") - - # Get the keyword arguments - info = im.encoderinfo - - # Byte-per-pixel precision, 1 = 8bits per pixel - bpc = info.get("bpc", 1) - - if bpc not in (1, 2): - raise ValueError("Unsupported number of bytes per pixel") - - # Flip the image, since the origin of SGI file is the bottom-left corner - orientation = -1 - # Define the file as SGI File Format - magicNumber = 474 - # Run-Length Encoding Compression - Unsupported at this time - rle = 0 - - # Number of dimensions (x,y,z) - dim = 3 - # X Dimension = width / Y Dimension = height - x, y = im.size - if im.mode == "L" and y == 1: - dim = 1 - elif im.mode == "L": - dim = 2 - # Z Dimension: Number of channels - z = len(im.mode) - - if dim == 1 or dim == 2: - z = 1 - - # assert we've got the right number of bands. - if len(im.getbands()) != z: - raise ValueError( - f"incorrect number of bands in SGI write: {z} vs {len(im.getbands())}" - ) - - # Minimum Byte value - pinmin = 0 - # Maximum Byte value (255 = 8bits per pixel) - pinmax = 255 - # Image name (79 characters max, truncated below in write) - imgName = os.path.splitext(os.path.basename(filename))[0] - imgName = imgName.encode("ascii", "ignore") - # Standard representation of pixel in the file - colormap = 0 - fp.write(struct.pack(">h", magicNumber)) - fp.write(o8(rle)) - fp.write(o8(bpc)) - fp.write(struct.pack(">H", dim)) - fp.write(struct.pack(">H", x)) - fp.write(struct.pack(">H", y)) - fp.write(struct.pack(">H", z)) - fp.write(struct.pack(">l", pinmin)) - fp.write(struct.pack(">l", pinmax)) - fp.write(struct.pack("4s", b"")) # dummy - fp.write(struct.pack("79s", imgName)) # truncates to 79 chars - fp.write(struct.pack("s", b"")) # force null byte after imgname - fp.write(struct.pack(">l", colormap)) - fp.write(struct.pack("404s", b"")) # dummy - - rawmode = "L" - if bpc == 2: - rawmode = "L;16B" - - for channel in im.split(): - fp.write(channel.tobytes("raw", rawmode, 0, orientation)) - - fp.close() - - -class SGI16Decoder(ImageFile.PyDecoder): - _pulls_fd = True - - def decode(self, buffer): - rawmode, stride, orientation = self.args - pagesize = self.state.xsize * self.state.ysize - zsize = len(self.mode) - self.fd.seek(512) - - for band in range(zsize): - channel = Image.new("L", (self.state.xsize, self.state.ysize)) - channel.frombytes( - self.fd.read(2 * pagesize), "raw", "L;16B", stride, orientation - ) - self.im.putband(channel.im, band) - - return -1, 0 - - -# -# registry - - -Image.register_decoder("SGI16", SGI16Decoder) -Image.register_open(SgiImageFile.format, SgiImageFile, _accept) -Image.register_save(SgiImageFile.format, _save) -Image.register_mime(SgiImageFile.format, "image/sgi") - -Image.register_extensions(SgiImageFile.format, [".bw", ".rgb", ".rgba", ".sgi"]) - -# End of file diff --git a/PIL/SpiderImagePlugin.py b/PIL/SpiderImagePlugin.py deleted file mode 100644 index 819f2ed..0000000 --- a/PIL/SpiderImagePlugin.py +++ /dev/null @@ -1,324 +0,0 @@ -# -# The Python Imaging Library. -# -# SPIDER image file handling -# -# History: -# 2004-08-02 Created BB -# 2006-03-02 added save method -# 2006-03-13 added support for stack images -# -# Copyright (c) 2004 by Health Research Inc. (HRI) RENSSELAER, NY 12144. -# Copyright (c) 2004 by William Baxter. -# Copyright (c) 2004 by Secret Labs AB. -# Copyright (c) 2004 by Fredrik Lundh. -# - -## -# Image plugin for the Spider image format. This format is is used -# by the SPIDER software, in processing image data from electron -# microscopy and tomography. -## - -# -# SpiderImagePlugin.py -# -# The Spider image format is used by SPIDER software, in processing -# image data from electron microscopy and tomography. -# -# Spider home page: -# https://spider.wadsworth.org/spider_doc/spider/docs/spider.html -# -# Details about the Spider image format: -# https://spider.wadsworth.org/spider_doc/spider/docs/image_doc.html -# -import os -import struct -import sys - -from PIL import Image, ImageFile - - -def isInt(f): - try: - i = int(f) - if f - i == 0: - return 1 - else: - return 0 - except (ValueError, OverflowError): - return 0 - - -iforms = [1, 3, -11, -12, -21, -22] - - -# There is no magic number to identify Spider files, so just check a -# series of header locations to see if they have reasonable values. -# Returns no. of bytes in the header, if it is a valid Spider header, -# otherwise returns 0 - - -def isSpiderHeader(t): - h = (99,) + t # add 1 value so can use spider header index start=1 - # header values 1,2,5,12,13,22,23 should be integers - for i in [1, 2, 5, 12, 13, 22, 23]: - if not isInt(h[i]): - return 0 - # check iform - iform = int(h[5]) - if iform not in iforms: - return 0 - # check other header values - labrec = int(h[13]) # no. records in file header - labbyt = int(h[22]) # total no. of bytes in header - lenbyt = int(h[23]) # record length in bytes - if labbyt != (labrec * lenbyt): - return 0 - # looks like a valid header - return labbyt - - -def isSpiderImage(filename): - with open(filename, "rb") as fp: - f = fp.read(92) # read 23 * 4 bytes - t = struct.unpack(">23f", f) # try big-endian first - hdrlen = isSpiderHeader(t) - if hdrlen == 0: - t = struct.unpack("<23f", f) # little-endian - hdrlen = isSpiderHeader(t) - return hdrlen - - -class SpiderImageFile(ImageFile.ImageFile): - - format = "SPIDER" - format_description = "Spider 2D image" - _close_exclusive_fp_after_loading = False - - def _open(self): - # check header - n = 27 * 4 # read 27 float values - f = self.fp.read(n) - - try: - self.bigendian = 1 - t = struct.unpack(">27f", f) # try big-endian first - hdrlen = isSpiderHeader(t) - if hdrlen == 0: - self.bigendian = 0 - t = struct.unpack("<27f", f) # little-endian - hdrlen = isSpiderHeader(t) - if hdrlen == 0: - raise SyntaxError("not a valid Spider file") - except struct.error as e: - raise SyntaxError("not a valid Spider file") from e - - h = (99,) + t # add 1 value : spider header index starts at 1 - iform = int(h[5]) - if iform != 1: - raise SyntaxError("not a Spider 2D image") - - self._size = int(h[12]), int(h[2]) # size in pixels (width, height) - self.istack = int(h[24]) - self.imgnumber = int(h[27]) - - if self.istack == 0 and self.imgnumber == 0: - # stk=0, img=0: a regular 2D image - offset = hdrlen - self._nimages = 1 - elif self.istack > 0 and self.imgnumber == 0: - # stk>0, img=0: Opening the stack for the first time - self.imgbytes = int(h[12]) * int(h[2]) * 4 - self.hdrlen = hdrlen - self._nimages = int(h[26]) - # Point to the first image in the stack - offset = hdrlen * 2 - self.imgnumber = 1 - elif self.istack == 0 and self.imgnumber > 0: - # stk=0, img>0: an image within the stack - offset = hdrlen + self.stkoffset - self.istack = 2 # So Image knows it's still a stack - else: - raise SyntaxError("inconsistent stack header values") - - if self.bigendian: - self.rawmode = "F;32BF" - else: - self.rawmode = "F;32F" - self.mode = "F" - - self.tile = [("raw", (0, 0) + self.size, offset, (self.rawmode, 0, 1))] - self.__fp = self.fp # FIXME: hack - - @property - def n_frames(self): - return self._nimages - - @property - def is_animated(self): - return self._nimages > 1 - - # 1st image index is zero (although SPIDER imgnumber starts at 1) - def tell(self): - if self.imgnumber < 1: - return 0 - else: - return self.imgnumber - 1 - - def seek(self, frame): - if self.istack == 0: - raise EOFError("attempt to seek in a non-stack file") - if not self._seek_check(frame): - return - self.stkoffset = self.hdrlen + frame * (self.hdrlen + self.imgbytes) - self.fp = self.__fp - self.fp.seek(self.stkoffset) - self._open() - - # returns a byte image after rescaling to 0..255 - def convert2byte(self, depth=255): - (minimum, maximum) = self.getextrema() - m = 1 - if maximum != minimum: - m = depth / (maximum - minimum) - b = -m * minimum - return self.point(lambda i, m=m, b=b: i * m + b).convert("L") - - # returns a ImageTk.PhotoImage object, after rescaling to 0..255 - def tkPhotoImage(self): - from PIL import ImageTk - - return ImageTk.PhotoImage(self.convert2byte(), palette=256) - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -# -------------------------------------------------------------------- -# Image series - -# given a list of filenames, return a list of images -def loadImageSeries(filelist=None): - """create a list of :py:class:`~PIL.Image.Image` objects for use in a montage""" - if filelist is None or len(filelist) < 1: - return - - imglist = [] - for img in filelist: - if not os.path.exists(img): - print(f"unable to find {img}") - continue - try: - with Image.open(img) as im: - im = im.convert2byte() - except Exception: - if not isSpiderImage(img): - print(img + " is not a Spider image file") - continue - im.info["filename"] = img - imglist.append(im) - return imglist - - -# -------------------------------------------------------------------- -# For saving images in Spider format - - -def makeSpiderHeader(im): - nsam, nrow = im.size - lenbyt = nsam * 4 # There are labrec records in the header - labrec = int(1024 / lenbyt) - if 1024 % lenbyt != 0: - labrec += 1 - labbyt = labrec * lenbyt - hdr = [] - nvalues = int(labbyt / 4) - for i in range(nvalues): - hdr.append(0.0) - - if len(hdr) < 23: - return [] - - # NB these are Fortran indices - hdr[1] = 1.0 # nslice (=1 for an image) - hdr[2] = float(nrow) # number of rows per slice - hdr[5] = 1.0 # iform for 2D image - hdr[12] = float(nsam) # number of pixels per line - hdr[13] = float(labrec) # number of records in file header - hdr[22] = float(labbyt) # total number of bytes in header - hdr[23] = float(lenbyt) # record length in bytes - - # adjust for Fortran indexing - hdr = hdr[1:] - hdr.append(0.0) - # pack binary data into a string - hdrstr = [] - for v in hdr: - hdrstr.append(struct.pack("f", v)) - return hdrstr - - -def _save(im, fp, filename): - if im.mode[0] != "F": - im = im.convert("F") - - hdr = makeSpiderHeader(im) - if len(hdr) < 256: - raise OSError("Error creating Spider header") - - # write the SPIDER header - fp.writelines(hdr) - - rawmode = "F;32NF" # 32-bit native floating point - ImageFile._save(im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, 1))]) - - -def _save_spider(im, fp, filename): - # get the filename extension and register it with Image - ext = os.path.splitext(filename)[1] - Image.register_extension(SpiderImageFile.format, ext) - _save(im, fp, filename) - - -# -------------------------------------------------------------------- - - -Image.register_open(SpiderImageFile.format, SpiderImageFile) -Image.register_save(SpiderImageFile.format, _save_spider) - -if __name__ == "__main__": - - if len(sys.argv) < 2: - print("Syntax: python SpiderImagePlugin.py [infile] [outfile]") - sys.exit() - - filename = sys.argv[1] - if not isSpiderImage(filename): - print("input image must be in Spider format") - sys.exit() - - with Image.open(filename) as im: - print("image: " + str(im)) - print("format: " + str(im.format)) - print("size: " + str(im.size)) - print("mode: " + str(im.mode)) - print("max, min: ", end=" ") - print(im.getextrema()) - - if len(sys.argv) > 2: - outfile = sys.argv[2] - - # perform some image operation - im = im.transpose(Image.FLIP_LEFT_RIGHT) - print( - f"saving a flipped version of {os.path.basename(filename)} " - f"as {outfile} " - ) - im.save(outfile, SpiderImageFile.format) diff --git a/PIL/SunImagePlugin.py b/PIL/SunImagePlugin.py deleted file mode 100644 index c03759a..0000000 --- a/PIL/SunImagePlugin.py +++ /dev/null @@ -1,136 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Sun image file handling -# -# History: -# 1995-09-10 fl Created -# 1996-05-28 fl Fixed 32-bit alignment -# 1998-12-29 fl Import ImagePalette module -# 2001-12-18 fl Fixed palette loading (from Jean-Claude Rimbault) -# -# Copyright (c) 1997-2001 by Secret Labs AB -# Copyright (c) 1995-1996 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - - -from . import Image, ImageFile, ImagePalette -from ._binary import i32be as i32 - - -def _accept(prefix): - return len(prefix) >= 4 and i32(prefix) == 0x59A66A95 - - -## -# Image plugin for Sun raster files. - - -class SunImageFile(ImageFile.ImageFile): - - format = "SUN" - format_description = "Sun Raster File" - - def _open(self): - - # The Sun Raster file header is 32 bytes in length - # and has the following format: - - # typedef struct _SunRaster - # { - # DWORD MagicNumber; /* Magic (identification) number */ - # DWORD Width; /* Width of image in pixels */ - # DWORD Height; /* Height of image in pixels */ - # DWORD Depth; /* Number of bits per pixel */ - # DWORD Length; /* Size of image data in bytes */ - # DWORD Type; /* Type of raster file */ - # DWORD ColorMapType; /* Type of color map */ - # DWORD ColorMapLength; /* Size of the color map in bytes */ - # } SUNRASTER; - - # HEAD - s = self.fp.read(32) - if not _accept(s): - raise SyntaxError("not an SUN raster file") - - offset = 32 - - self._size = i32(s, 4), i32(s, 8) - - depth = i32(s, 12) - # data_length = i32(s, 16) # unreliable, ignore. - file_type = i32(s, 20) - palette_type = i32(s, 24) # 0: None, 1: RGB, 2: Raw/arbitrary - palette_length = i32(s, 28) - - if depth == 1: - self.mode, rawmode = "1", "1;I" - elif depth == 4: - self.mode, rawmode = "L", "L;4" - elif depth == 8: - self.mode = rawmode = "L" - elif depth == 24: - if file_type == 3: - self.mode, rawmode = "RGB", "RGB" - else: - self.mode, rawmode = "RGB", "BGR" - elif depth == 32: - if file_type == 3: - self.mode, rawmode = "RGB", "RGBX" - else: - self.mode, rawmode = "RGB", "BGRX" - else: - raise SyntaxError("Unsupported Mode/Bit Depth") - - if palette_length: - if palette_length > 1024: - raise SyntaxError("Unsupported Color Palette Length") - - if palette_type != 1: - raise SyntaxError("Unsupported Palette Type") - - offset = offset + palette_length - self.palette = ImagePalette.raw("RGB;L", self.fp.read(palette_length)) - if self.mode == "L": - self.mode = "P" - rawmode = rawmode.replace("L", "P") - - # 16 bit boundaries on stride - stride = ((self.size[0] * depth + 15) // 16) * 2 - - # file type: Type is the version (or flavor) of the bitmap - # file. The following values are typically found in the Type - # field: - # 0000h Old - # 0001h Standard - # 0002h Byte-encoded - # 0003h RGB format - # 0004h TIFF format - # 0005h IFF format - # FFFFh Experimental - - # Old and standard are the same, except for the length tag. - # byte-encoded is run-length-encoded - # RGB looks similar to standard, but RGB byte order - # TIFF and IFF mean that they were converted from T/IFF - # Experimental means that it's something else. - # (https://www.fileformat.info/format/sunraster/egff.htm) - - if file_type in (0, 1, 3, 4, 5): - self.tile = [("raw", (0, 0) + self.size, offset, (rawmode, stride))] - elif file_type == 2: - self.tile = [("sun_rle", (0, 0) + self.size, offset, rawmode)] - else: - raise SyntaxError("Unsupported Sun Raster file type") - - -# -# registry - - -Image.register_open(SunImageFile.format, SunImageFile, _accept) - -Image.register_extension(SunImageFile.format, ".ras") diff --git a/PIL/TarIO.py b/PIL/TarIO.py deleted file mode 100644 index d108362..0000000 --- a/PIL/TarIO.py +++ /dev/null @@ -1,65 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# read files from within a tar file -# -# History: -# 95-06-18 fl Created -# 96-05-28 fl Open files in binary mode -# -# Copyright (c) Secret Labs AB 1997. -# Copyright (c) Fredrik Lundh 1995-96. -# -# See the README file for information on usage and redistribution. -# - -import io - -from . import ContainerIO - - -class TarIO(ContainerIO.ContainerIO): - """A file object that provides read access to a given member of a TAR file.""" - - def __init__(self, tarfile, file): - """ - Create file object. - - :param tarfile: Name of TAR file. - :param file: Name of member file. - """ - self.fh = open(tarfile, "rb") - - while True: - - s = self.fh.read(512) - if len(s) != 512: - raise OSError("unexpected end of tar file") - - name = s[:100].decode("utf-8") - i = name.find("\0") - if i == 0: - raise OSError("cannot find subfile") - if i > 0: - name = name[:i] - - size = int(s[124:135], 8) - - if file == name: - break - - self.fh.seek((size + 511) & (~511), io.SEEK_CUR) - - # Open region - super().__init__(self.fh, self.fh.tell(), size) - - # Context manager support - def __enter__(self): - return self - - def __exit__(self, *args): - self.close() - - def close(self): - self.fh.close() diff --git a/PIL/TgaImagePlugin.py b/PIL/TgaImagePlugin.py deleted file mode 100644 index 2b936d6..0000000 --- a/PIL/TgaImagePlugin.py +++ /dev/null @@ -1,248 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# TGA file handling -# -# History: -# 95-09-01 fl created (reads 24-bit files only) -# 97-01-04 fl support more TGA versions, including compressed images -# 98-07-04 fl fixed orientation and alpha layer bugs -# 98-09-11 fl fixed orientation for runlength decoder -# -# Copyright (c) Secret Labs AB 1997-98. -# Copyright (c) Fredrik Lundh 1995-97. -# -# See the README file for information on usage and redistribution. -# - - -import warnings - -from . import Image, ImageFile, ImagePalette -from ._binary import i16le as i16 -from ._binary import o8 -from ._binary import o16le as o16 - -# -# -------------------------------------------------------------------- -# Read RGA file - - -MODES = { - # map imagetype/depth to rawmode - (1, 8): "P", - (3, 1): "1", - (3, 8): "L", - (3, 16): "LA", - (2, 16): "BGR;5", - (2, 24): "BGR", - (2, 32): "BGRA", -} - - -## -# Image plugin for Targa files. - - -class TgaImageFile(ImageFile.ImageFile): - - format = "TGA" - format_description = "Targa" - - def _open(self): - - # process header - s = self.fp.read(18) - - id_len = s[0] - - colormaptype = s[1] - imagetype = s[2] - - depth = s[16] - - flags = s[17] - - self._size = i16(s, 12), i16(s, 14) - - # validate header fields - if ( - colormaptype not in (0, 1) - or self.size[0] <= 0 - or self.size[1] <= 0 - or depth not in (1, 8, 16, 24, 32) - ): - raise SyntaxError("not a TGA file") - - # image mode - if imagetype in (3, 11): - self.mode = "L" - if depth == 1: - self.mode = "1" # ??? - elif depth == 16: - self.mode = "LA" - elif imagetype in (1, 9): - self.mode = "P" - elif imagetype in (2, 10): - self.mode = "RGB" - if depth == 32: - self.mode = "RGBA" - else: - raise SyntaxError("unknown TGA mode") - - # orientation - orientation = flags & 0x30 - if orientation == 0x20: - orientation = 1 - elif not orientation: - orientation = -1 - else: - raise SyntaxError("unknown TGA orientation") - - self.info["orientation"] = orientation - - if imagetype & 8: - self.info["compression"] = "tga_rle" - - if id_len: - self.info["id_section"] = self.fp.read(id_len) - - if colormaptype: - # read palette - start, size, mapdepth = i16(s, 3), i16(s, 5), i16(s, 7) - if mapdepth == 16: - self.palette = ImagePalette.raw( - "BGR;16", b"\0" * 2 * start + self.fp.read(2 * size) - ) - elif mapdepth == 24: - self.palette = ImagePalette.raw( - "BGR", b"\0" * 3 * start + self.fp.read(3 * size) - ) - elif mapdepth == 32: - self.palette = ImagePalette.raw( - "BGRA", b"\0" * 4 * start + self.fp.read(4 * size) - ) - - # setup tile descriptor - try: - rawmode = MODES[(imagetype & 7, depth)] - if imagetype & 8: - # compressed - self.tile = [ - ( - "tga_rle", - (0, 0) + self.size, - self.fp.tell(), - (rawmode, orientation, depth), - ) - ] - else: - self.tile = [ - ( - "raw", - (0, 0) + self.size, - self.fp.tell(), - (rawmode, 0, orientation), - ) - ] - except KeyError: - pass # cannot decode - - -# -# -------------------------------------------------------------------- -# Write TGA file - - -SAVE = { - "1": ("1", 1, 0, 3), - "L": ("L", 8, 0, 3), - "LA": ("LA", 16, 0, 3), - "P": ("P", 8, 1, 1), - "RGB": ("BGR", 24, 0, 2), - "RGBA": ("BGRA", 32, 0, 2), -} - - -def _save(im, fp, filename): - - try: - rawmode, bits, colormaptype, imagetype = SAVE[im.mode] - except KeyError as e: - raise OSError(f"cannot write mode {im.mode} as TGA") from e - - if "rle" in im.encoderinfo: - rle = im.encoderinfo["rle"] - else: - compression = im.encoderinfo.get("compression", im.info.get("compression")) - rle = compression == "tga_rle" - if rle: - imagetype += 8 - - id_section = im.encoderinfo.get("id_section", im.info.get("id_section", "")) - id_len = len(id_section) - if id_len > 255: - id_len = 255 - id_section = id_section[:255] - warnings.warn("id_section has been trimmed to 255 characters") - - if colormaptype: - colormapfirst, colormaplength, colormapentry = 0, 256, 24 - else: - colormapfirst, colormaplength, colormapentry = 0, 0, 0 - - if im.mode in ("LA", "RGBA"): - flags = 8 - else: - flags = 0 - - orientation = im.encoderinfo.get("orientation", im.info.get("orientation", -1)) - if orientation > 0: - flags = flags | 0x20 - - fp.write( - o8(id_len) - + o8(colormaptype) - + o8(imagetype) - + o16(colormapfirst) - + o16(colormaplength) - + o8(colormapentry) - + o16(0) - + o16(0) - + o16(im.size[0]) - + o16(im.size[1]) - + o8(bits) - + o8(flags) - ) - - if id_section: - fp.write(id_section) - - if colormaptype: - fp.write(im.im.getpalette("RGB", "BGR")) - - if rle: - ImageFile._save( - im, fp, [("tga_rle", (0, 0) + im.size, 0, (rawmode, orientation))] - ) - else: - ImageFile._save( - im, fp, [("raw", (0, 0) + im.size, 0, (rawmode, 0, orientation))] - ) - - # write targa version 2 footer - fp.write(b"\000" * 8 + b"TRUEVISION-XFILE." + b"\000") - - -# -# -------------------------------------------------------------------- -# Registry - - -Image.register_open(TgaImageFile.format, TgaImageFile) -Image.register_save(TgaImageFile.format, _save) - -Image.register_extensions(TgaImageFile.format, [".tga", ".icb", ".vda", ".vst"]) - -Image.register_mime(TgaImageFile.format, "image/x-tga") diff --git a/PIL/TiffImagePlugin.py b/PIL/TiffImagePlugin.py deleted file mode 100644 index 0b70ce3..0000000 --- a/PIL/TiffImagePlugin.py +++ /dev/null @@ -1,1924 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# TIFF file handling -# -# TIFF is a flexible, if somewhat aged, image file format originally -# defined by Aldus. Although TIFF supports a wide variety of pixel -# layouts and compression methods, the name doesn't really stand for -# "thousands of incompatible file formats," it just feels that way. -# -# To read TIFF data from a stream, the stream must be seekable. For -# progressive decoding, make sure to use TIFF files where the tag -# directory is placed first in the file. -# -# History: -# 1995-09-01 fl Created -# 1996-05-04 fl Handle JPEGTABLES tag -# 1996-05-18 fl Fixed COLORMAP support -# 1997-01-05 fl Fixed PREDICTOR support -# 1997-08-27 fl Added support for rational tags (from Perry Stoll) -# 1998-01-10 fl Fixed seek/tell (from Jan Blom) -# 1998-07-15 fl Use private names for internal variables -# 1999-06-13 fl Rewritten for PIL 1.0 (1.0) -# 2000-10-11 fl Additional fixes for Python 2.0 (1.1) -# 2001-04-17 fl Fixed rewind support (seek to frame 0) (1.2) -# 2001-05-12 fl Added write support for more tags (from Greg Couch) (1.3) -# 2001-12-18 fl Added workaround for broken Matrox library -# 2002-01-18 fl Don't mess up if photometric tag is missing (D. Alan Stewart) -# 2003-05-19 fl Check FILLORDER tag -# 2003-09-26 fl Added RGBa support -# 2004-02-24 fl Added DPI support; fixed rational write support -# 2005-02-07 fl Added workaround for broken Corel Draw 10 files -# 2006-01-09 fl Added support for float/double tags (from Russell Nelson) -# -# Copyright (c) 1997-2006 by Secret Labs AB. All rights reserved. -# Copyright (c) 1995-1997 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# -import io -import itertools -import logging -import os -import struct -import warnings -from collections.abc import MutableMapping -from fractions import Fraction -from numbers import Number, Rational - -from . import Image, ImageFile, ImagePalette, TiffTags -from ._binary import o8 -from .TiffTags import TYPES - -logger = logging.getLogger(__name__) - -# Set these to true to force use of libtiff for reading or writing. -READ_LIBTIFF = False -WRITE_LIBTIFF = False -IFD_LEGACY_API = True - -II = b"II" # little-endian (Intel style) -MM = b"MM" # big-endian (Motorola style) - -# -# -------------------------------------------------------------------- -# Read TIFF files - -# a few tag names, just to make the code below a bit more readable -IMAGEWIDTH = 256 -IMAGELENGTH = 257 -BITSPERSAMPLE = 258 -COMPRESSION = 259 -PHOTOMETRIC_INTERPRETATION = 262 -FILLORDER = 266 -IMAGEDESCRIPTION = 270 -STRIPOFFSETS = 273 -SAMPLESPERPIXEL = 277 -ROWSPERSTRIP = 278 -STRIPBYTECOUNTS = 279 -X_RESOLUTION = 282 -Y_RESOLUTION = 283 -PLANAR_CONFIGURATION = 284 -RESOLUTION_UNIT = 296 -TRANSFERFUNCTION = 301 -SOFTWARE = 305 -DATE_TIME = 306 -ARTIST = 315 -PREDICTOR = 317 -COLORMAP = 320 -TILEOFFSETS = 324 -SUBIFD = 330 -EXTRASAMPLES = 338 -SAMPLEFORMAT = 339 -JPEGTABLES = 347 -REFERENCEBLACKWHITE = 532 -COPYRIGHT = 33432 -IPTC_NAA_CHUNK = 33723 # newsphoto properties -PHOTOSHOP_CHUNK = 34377 # photoshop properties -ICCPROFILE = 34675 -EXIFIFD = 34665 -XMP = 700 -JPEGQUALITY = 65537 # pseudo-tag by libtiff - -# https://github.com/imagej/ImageJA/blob/master/src/main/java/ij/io/TiffDecoder.java -IMAGEJ_META_DATA_BYTE_COUNTS = 50838 -IMAGEJ_META_DATA = 50839 - -COMPRESSION_INFO = { - # Compression => pil compression name - 1: "raw", - 2: "tiff_ccitt", - 3: "group3", - 4: "group4", - 5: "tiff_lzw", - 6: "tiff_jpeg", # obsolete - 7: "jpeg", - 8: "tiff_adobe_deflate", - 32771: "tiff_raw_16", # 16-bit padding - 32773: "packbits", - 32809: "tiff_thunderscan", - 32946: "tiff_deflate", - 34676: "tiff_sgilog", - 34677: "tiff_sgilog24", - 34925: "lzma", - 50000: "zstd", - 50001: "webp", -} - -COMPRESSION_INFO_REV = {v: k for k, v in COMPRESSION_INFO.items()} - -OPEN_INFO = { - # (ByteOrder, PhotoInterpretation, SampleFormat, FillOrder, BitsPerSample, - # ExtraSamples) => mode, rawmode - (II, 0, (1,), 1, (1,), ()): ("1", "1;I"), - (MM, 0, (1,), 1, (1,), ()): ("1", "1;I"), - (II, 0, (1,), 2, (1,), ()): ("1", "1;IR"), - (MM, 0, (1,), 2, (1,), ()): ("1", "1;IR"), - (II, 1, (1,), 1, (1,), ()): ("1", "1"), - (MM, 1, (1,), 1, (1,), ()): ("1", "1"), - (II, 1, (1,), 2, (1,), ()): ("1", "1;R"), - (MM, 1, (1,), 2, (1,), ()): ("1", "1;R"), - (II, 0, (1,), 1, (2,), ()): ("L", "L;2I"), - (MM, 0, (1,), 1, (2,), ()): ("L", "L;2I"), - (II, 0, (1,), 2, (2,), ()): ("L", "L;2IR"), - (MM, 0, (1,), 2, (2,), ()): ("L", "L;2IR"), - (II, 1, (1,), 1, (2,), ()): ("L", "L;2"), - (MM, 1, (1,), 1, (2,), ()): ("L", "L;2"), - (II, 1, (1,), 2, (2,), ()): ("L", "L;2R"), - (MM, 1, (1,), 2, (2,), ()): ("L", "L;2R"), - (II, 0, (1,), 1, (4,), ()): ("L", "L;4I"), - (MM, 0, (1,), 1, (4,), ()): ("L", "L;4I"), - (II, 0, (1,), 2, (4,), ()): ("L", "L;4IR"), - (MM, 0, (1,), 2, (4,), ()): ("L", "L;4IR"), - (II, 1, (1,), 1, (4,), ()): ("L", "L;4"), - (MM, 1, (1,), 1, (4,), ()): ("L", "L;4"), - (II, 1, (1,), 2, (4,), ()): ("L", "L;4R"), - (MM, 1, (1,), 2, (4,), ()): ("L", "L;4R"), - (II, 0, (1,), 1, (8,), ()): ("L", "L;I"), - (MM, 0, (1,), 1, (8,), ()): ("L", "L;I"), - (II, 0, (1,), 2, (8,), ()): ("L", "L;IR"), - (MM, 0, (1,), 2, (8,), ()): ("L", "L;IR"), - (II, 1, (1,), 1, (8,), ()): ("L", "L"), - (MM, 1, (1,), 1, (8,), ()): ("L", "L"), - (II, 1, (1,), 2, (8,), ()): ("L", "L;R"), - (MM, 1, (1,), 2, (8,), ()): ("L", "L;R"), - (II, 1, (1,), 1, (12,), ()): ("I;16", "I;12"), - (II, 1, (1,), 1, (16,), ()): ("I;16", "I;16"), - (MM, 1, (1,), 1, (16,), ()): ("I;16B", "I;16B"), - (II, 1, (2,), 1, (16,), ()): ("I", "I;16S"), - (MM, 1, (2,), 1, (16,), ()): ("I", "I;16BS"), - (II, 0, (3,), 1, (32,), ()): ("F", "F;32F"), - (MM, 0, (3,), 1, (32,), ()): ("F", "F;32BF"), - (II, 1, (1,), 1, (32,), ()): ("I", "I;32N"), - (II, 1, (2,), 1, (32,), ()): ("I", "I;32S"), - (MM, 1, (2,), 1, (32,), ()): ("I", "I;32BS"), - (II, 1, (3,), 1, (32,), ()): ("F", "F;32F"), - (MM, 1, (3,), 1, (32,), ()): ("F", "F;32BF"), - (II, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), - (MM, 1, (1,), 1, (8, 8), (2,)): ("LA", "LA"), - (II, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), - (MM, 2, (1,), 1, (8, 8, 8), ()): ("RGB", "RGB"), - (II, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), - (MM, 2, (1,), 2, (8, 8, 8), ()): ("RGB", "RGB;R"), - (II, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples - (MM, 2, (1,), 1, (8, 8, 8, 8), ()): ("RGBA", "RGBA"), # missing ExtraSamples - (II, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"), - (MM, 2, (1,), 1, (8, 8, 8, 8), (0,)): ("RGBX", "RGBX"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8), (0, 0)): ("RGBX", "RGBXX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (0, 0)): ("RGBX", "RGBXX"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGBX", "RGBXXX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0, 0)): ("RGBX", "RGBXXX"), - (II, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), - (MM, 2, (1,), 1, (8, 8, 8, 8), (1,)): ("RGBA", "RGBa"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (1, 0)): ("RGBA", "RGBaX"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (1, 0, 0)): ("RGBA", "RGBaXX"), - (II, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), - (MM, 2, (1,), 1, (8, 8, 8, 8), (2,)): ("RGBA", "RGBA"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8), (2, 0)): ("RGBA", "RGBAX"), - (II, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (2, 0, 0)): ("RGBA", "RGBAXX"), - (MM, 2, (1,), 1, (8, 8, 8, 8, 8, 8), (2, 0, 0)): ("RGBA", "RGBAXX"), - (II, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 - (MM, 2, (1,), 1, (8, 8, 8, 8), (999,)): ("RGBA", "RGBA"), # Corel Draw 10 - (II, 2, (1,), 1, (16, 16, 16), ()): ("RGB", "RGB;16L"), - (MM, 2, (1,), 1, (16, 16, 16), ()): ("RGB", "RGB;16B"), - (II, 2, (1,), 1, (16, 16, 16, 16), ()): ("RGBA", "RGBA;16L"), - (MM, 2, (1,), 1, (16, 16, 16, 16), ()): ("RGBA", "RGBA;16B"), - (II, 2, (1,), 1, (16, 16, 16, 16), (0,)): ("RGBX", "RGBX;16L"), - (MM, 2, (1,), 1, (16, 16, 16, 16), (0,)): ("RGBX", "RGBX;16B"), - (II, 2, (1,), 1, (16, 16, 16, 16), (1,)): ("RGBA", "RGBa;16L"), - (MM, 2, (1,), 1, (16, 16, 16, 16), (1,)): ("RGBA", "RGBa;16B"), - (II, 2, (1,), 1, (16, 16, 16, 16), (2,)): ("RGBA", "RGBA;16L"), - (MM, 2, (1,), 1, (16, 16, 16, 16), (2,)): ("RGBA", "RGBA;16B"), - (II, 3, (1,), 1, (1,), ()): ("P", "P;1"), - (MM, 3, (1,), 1, (1,), ()): ("P", "P;1"), - (II, 3, (1,), 2, (1,), ()): ("P", "P;1R"), - (MM, 3, (1,), 2, (1,), ()): ("P", "P;1R"), - (II, 3, (1,), 1, (2,), ()): ("P", "P;2"), - (MM, 3, (1,), 1, (2,), ()): ("P", "P;2"), - (II, 3, (1,), 2, (2,), ()): ("P", "P;2R"), - (MM, 3, (1,), 2, (2,), ()): ("P", "P;2R"), - (II, 3, (1,), 1, (4,), ()): ("P", "P;4"), - (MM, 3, (1,), 1, (4,), ()): ("P", "P;4"), - (II, 3, (1,), 2, (4,), ()): ("P", "P;4R"), - (MM, 3, (1,), 2, (4,), ()): ("P", "P;4R"), - (II, 3, (1,), 1, (8,), ()): ("P", "P"), - (MM, 3, (1,), 1, (8,), ()): ("P", "P"), - (II, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), - (MM, 3, (1,), 1, (8, 8), (2,)): ("PA", "PA"), - (II, 3, (1,), 2, (8,), ()): ("P", "P;R"), - (MM, 3, (1,), 2, (8,), ()): ("P", "P;R"), - (II, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), - (MM, 5, (1,), 1, (8, 8, 8, 8), ()): ("CMYK", "CMYK"), - (II, 5, (1,), 1, (8, 8, 8, 8, 8), (0,)): ("CMYK", "CMYKX"), - (MM, 5, (1,), 1, (8, 8, 8, 8, 8), (0,)): ("CMYK", "CMYKX"), - (II, 5, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0)): ("CMYK", "CMYKXX"), - (MM, 5, (1,), 1, (8, 8, 8, 8, 8, 8), (0, 0)): ("CMYK", "CMYKXX"), - (II, 5, (1,), 1, (16, 16, 16, 16), ()): ("CMYK", "CMYK;16L"), - # JPEG compressed images handled by LibTiff and auto-converted to RGBX - # Minimal Baseline TIFF requires YCbCr images to have 3 SamplesPerPixel - (II, 6, (1,), 1, (8, 8, 8), ()): ("RGB", "RGBX"), - (MM, 6, (1,), 1, (8, 8, 8), ()): ("RGB", "RGBX"), - (II, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), - (MM, 8, (1,), 1, (8, 8, 8), ()): ("LAB", "LAB"), -} - -PREFIXES = [ - b"MM\x00\x2A", # Valid TIFF header with big-endian byte order - b"II\x2A\x00", # Valid TIFF header with little-endian byte order - b"MM\x2A\x00", # Invalid TIFF header, assume big-endian - b"II\x00\x2A", # Invalid TIFF header, assume little-endian -] - - -def _accept(prefix): - return prefix[:4] in PREFIXES - - -def _limit_rational(val, max_val): - inv = abs(val) > 1 - n_d = IFDRational(1 / val if inv else val).limit_rational(max_val) - return n_d[::-1] if inv else n_d - - -def _limit_signed_rational(val, max_val, min_val): - frac = Fraction(val) - n_d = frac.numerator, frac.denominator - - if min(n_d) < min_val: - n_d = _limit_rational(val, abs(min_val)) - - if max(n_d) > max_val: - val = Fraction(*n_d) - n_d = _limit_rational(val, max_val) - - return n_d - - -## -# Wrapper for TIFF IFDs. - -_load_dispatch = {} -_write_dispatch = {} - - -class IFDRational(Rational): - """Implements a rational class where 0/0 is a legal value to match - the in the wild use of exif rationals. - - e.g., DigitalZoomRatio - 0.00/0.00 indicates that no digital zoom was used - """ - - """ If the denominator is 0, store this as a float('nan'), otherwise store - as a fractions.Fraction(). Delegate as appropriate - - """ - - __slots__ = ("_numerator", "_denominator", "_val") - - def __init__(self, value, denominator=1): - """ - :param value: either an integer numerator, a - float/rational/other number, or an IFDRational - :param denominator: Optional integer denominator - """ - if isinstance(value, IFDRational): - self._numerator = value.numerator - self._denominator = value.denominator - self._val = value._val - return - - if isinstance(value, Fraction): - self._numerator = value.numerator - self._denominator = value.denominator - else: - self._numerator = value - self._denominator = denominator - - if denominator == 0: - self._val = float("nan") - elif denominator == 1: - self._val = Fraction(value) - else: - self._val = Fraction(value, denominator) - - @property - def numerator(a): - return a._numerator - - @property - def denominator(a): - return a._denominator - - def limit_rational(self, max_denominator): - """ - - :param max_denominator: Integer, the maximum denominator value - :returns: Tuple of (numerator, denominator) - """ - - if self.denominator == 0: - return (self.numerator, self.denominator) - - f = self._val.limit_denominator(max_denominator) - return (f.numerator, f.denominator) - - def __repr__(self): - return str(float(self._val)) - - def __hash__(self): - return self._val.__hash__() - - def __eq__(self, other): - if isinstance(other, IFDRational): - other = other._val - return self._val == other - - def _delegate(op): - def delegate(self, *args): - return getattr(self._val, op)(*args) - - return delegate - - """ a = ['add','radd', 'sub', 'rsub', 'mul', 'rmul', - 'truediv', 'rtruediv', 'floordiv', 'rfloordiv', - 'mod','rmod', 'pow','rpow', 'pos', 'neg', - 'abs', 'trunc', 'lt', 'gt', 'le', 'ge', 'bool', - 'ceil', 'floor', 'round'] - print("\n".join("__%s__ = _delegate('__%s__')" % (s,s) for s in a)) - """ - - __add__ = _delegate("__add__") - __radd__ = _delegate("__radd__") - __sub__ = _delegate("__sub__") - __rsub__ = _delegate("__rsub__") - __mul__ = _delegate("__mul__") - __rmul__ = _delegate("__rmul__") - __truediv__ = _delegate("__truediv__") - __rtruediv__ = _delegate("__rtruediv__") - __floordiv__ = _delegate("__floordiv__") - __rfloordiv__ = _delegate("__rfloordiv__") - __mod__ = _delegate("__mod__") - __rmod__ = _delegate("__rmod__") - __pow__ = _delegate("__pow__") - __rpow__ = _delegate("__rpow__") - __pos__ = _delegate("__pos__") - __neg__ = _delegate("__neg__") - __abs__ = _delegate("__abs__") - __trunc__ = _delegate("__trunc__") - __lt__ = _delegate("__lt__") - __gt__ = _delegate("__gt__") - __le__ = _delegate("__le__") - __ge__ = _delegate("__ge__") - __bool__ = _delegate("__bool__") - __ceil__ = _delegate("__ceil__") - __floor__ = _delegate("__floor__") - __round__ = _delegate("__round__") - - -class ImageFileDirectory_v2(MutableMapping): - """This class represents a TIFF tag directory. To speed things up, we - don't decode tags unless they're asked for. - - Exposes a dictionary interface of the tags in the directory:: - - ifd = ImageFileDirectory_v2() - ifd[key] = 'Some Data' - ifd.tagtype[key] = TiffTags.ASCII - print(ifd[key]) - 'Some Data' - - Individual values are returned as the strings or numbers, sequences are - returned as tuples of the values. - - The tiff metadata type of each item is stored in a dictionary of - tag types in - :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types - are read from a tiff file, guessed from the type added, or added - manually. - - Data Structures: - - * self.tagtype = {} - - * Key: numerical tiff tag number - * Value: integer corresponding to the data type from - ~PIL.TiffTags.TYPES` - - .. versionadded:: 3.0.0 - """ - - """ - Documentation: - - 'internal' data structures: - * self._tags_v2 = {} Key: numerical tiff tag number - Value: decoded data, as tuple for multiple values - * self._tagdata = {} Key: numerical tiff tag number - Value: undecoded byte string from file - * self._tags_v1 = {} Key: numerical tiff tag number - Value: decoded data in the v1 format - - Tags will be found in the private attributes self._tagdata, and in - self._tags_v2 once decoded. - - Self.legacy_api is a value for internal use, and shouldn't be - changed from outside code. In cooperation with the - ImageFileDirectory_v1 class, if legacy_api is true, then decoded - tags will be populated into both _tags_v1 and _tags_v2. _Tags_v2 - will be used if this IFD is used in the TIFF save routine. Tags - should be read from tags_v1 if legacy_api == true. - - """ - - def __init__(self, ifh=b"II\052\0\0\0\0\0", prefix=None): - """Initialize an ImageFileDirectory. - - To construct an ImageFileDirectory from a real file, pass the 8-byte - magic header to the constructor. To only set the endianness, pass it - as the 'prefix' keyword argument. - - :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets - endianness. - :param prefix: Override the endianness of the file. - """ - if ifh[:4] not in PREFIXES: - raise SyntaxError(f"not a TIFF file (header {repr(ifh)} not valid)") - self._prefix = prefix if prefix is not None else ifh[:2] - if self._prefix == MM: - self._endian = ">" - elif self._prefix == II: - self._endian = "<" - else: - raise SyntaxError("not a TIFF IFD") - self.tagtype = {} - """ Dictionary of tag types """ - self.reset() - (self.next,) = self._unpack("L", ifh[4:]) - self._legacy_api = False - - prefix = property(lambda self: self._prefix) - offset = property(lambda self: self._offset) - legacy_api = property(lambda self: self._legacy_api) - - @legacy_api.setter - def legacy_api(self, value): - raise Exception("Not allowing setting of legacy api") - - def reset(self): - self._tags_v1 = {} # will remain empty if legacy_api is false - self._tags_v2 = {} # main tag storage - self._tagdata = {} - self.tagtype = {} # added 2008-06-05 by Florian Hoech - self._next = None - self._offset = None - - def __str__(self): - return str(dict(self)) - - def named(self): - """ - :returns: dict of name|key: value - - Returns the complete tag dictionary, with named tags where possible. - """ - return {TiffTags.lookup(code).name: value for code, value in self.items()} - - def __len__(self): - return len(set(self._tagdata) | set(self._tags_v2)) - - def __getitem__(self, tag): - if tag not in self._tags_v2: # unpack on the fly - data = self._tagdata[tag] - typ = self.tagtype[tag] - size, handler = self._load_dispatch[typ] - self[tag] = handler(self, data, self.legacy_api) # check type - val = self._tags_v2[tag] - if self.legacy_api and not isinstance(val, (tuple, bytes)): - val = (val,) - return val - - def __contains__(self, tag): - return tag in self._tags_v2 or tag in self._tagdata - - def __setitem__(self, tag, value): - self._setitem(tag, value, self.legacy_api) - - def _setitem(self, tag, value, legacy_api): - basetypes = (Number, bytes, str) - - info = TiffTags.lookup(tag) - values = [value] if isinstance(value, basetypes) else value - - if tag not in self.tagtype: - if info.type: - self.tagtype[tag] = info.type - else: - self.tagtype[tag] = TiffTags.UNDEFINED - if all(isinstance(v, IFDRational) for v in values): - self.tagtype[tag] = ( - TiffTags.RATIONAL - if all(v >= 0 for v in values) - else TiffTags.SIGNED_RATIONAL - ) - elif all(isinstance(v, int) for v in values): - if all(0 <= v < 2 ** 16 for v in values): - self.tagtype[tag] = TiffTags.SHORT - elif all(-(2 ** 15) < v < 2 ** 15 for v in values): - self.tagtype[tag] = TiffTags.SIGNED_SHORT - else: - self.tagtype[tag] = ( - TiffTags.LONG - if all(v >= 0 for v in values) - else TiffTags.SIGNED_LONG - ) - elif all(isinstance(v, float) for v in values): - self.tagtype[tag] = TiffTags.DOUBLE - elif all(isinstance(v, str) for v in values): - self.tagtype[tag] = TiffTags.ASCII - elif all(isinstance(v, bytes) for v in values): - self.tagtype[tag] = TiffTags.BYTE - - if self.tagtype[tag] == TiffTags.UNDEFINED: - values = [ - value.encode("ascii", "replace") if isinstance(value, str) else value - ] - elif self.tagtype[tag] == TiffTags.RATIONAL: - values = [float(v) if isinstance(v, int) else v for v in values] - - is_ifd = self.tagtype[tag] == TiffTags.LONG and isinstance(values, dict) - if not is_ifd: - values = tuple(info.cvt_enum(value) for value in values) - - dest = self._tags_v1 if legacy_api else self._tags_v2 - - # Three branches: - # Spec'd length == 1, Actual length 1, store as element - # Spec'd length == 1, Actual > 1, Warn and truncate. Formerly barfed. - # No Spec, Actual length 1, Formerly (<4.2) returned a 1 element tuple. - # Don't mess with the legacy api, since it's frozen. - if not is_ifd and ( - (info.length == 1) - or self.tagtype[tag] == TiffTags.BYTE - or (info.length is None and len(values) == 1 and not legacy_api) - ): - # Don't mess with the legacy api, since it's frozen. - if legacy_api and self.tagtype[tag] in [ - TiffTags.RATIONAL, - TiffTags.SIGNED_RATIONAL, - ]: # rationals - values = (values,) - try: - (dest[tag],) = values - except ValueError: - # We've got a builtin tag with 1 expected entry - warnings.warn( - f"Metadata Warning, tag {tag} had too many entries: " - f"{len(values)}, expected 1" - ) - dest[tag] = values[0] - - else: - # Spec'd length > 1 or undefined - # Unspec'd, and length > 1 - dest[tag] = values - - def __delitem__(self, tag): - self._tags_v2.pop(tag, None) - self._tags_v1.pop(tag, None) - self._tagdata.pop(tag, None) - - def __iter__(self): - return iter(set(self._tagdata) | set(self._tags_v2)) - - def _unpack(self, fmt, data): - return struct.unpack(self._endian + fmt, data) - - def _pack(self, fmt, *values): - return struct.pack(self._endian + fmt, *values) - - def _register_loader(idx, size): - def decorator(func): - from .TiffTags import TYPES - - if func.__name__.startswith("load_"): - TYPES[idx] = func.__name__[5:].replace("_", " ") - _load_dispatch[idx] = size, func # noqa: F821 - return func - - return decorator - - def _register_writer(idx): - def decorator(func): - _write_dispatch[idx] = func # noqa: F821 - return func - - return decorator - - def _register_basic(idx_fmt_name): - from .TiffTags import TYPES - - idx, fmt, name = idx_fmt_name - TYPES[idx] = name - size = struct.calcsize("=" + fmt) - _load_dispatch[idx] = ( # noqa: F821 - size, - lambda self, data, legacy_api=True: ( - self._unpack("{}{}".format(len(data) // size, fmt), data) - ), - ) - _write_dispatch[idx] = lambda self, *values: ( # noqa: F821 - b"".join(self._pack(fmt, value) for value in values) - ) - - list( - map( - _register_basic, - [ - (TiffTags.SHORT, "H", "short"), - (TiffTags.LONG, "L", "long"), - (TiffTags.SIGNED_BYTE, "b", "signed byte"), - (TiffTags.SIGNED_SHORT, "h", "signed short"), - (TiffTags.SIGNED_LONG, "l", "signed long"), - (TiffTags.FLOAT, "f", "float"), - (TiffTags.DOUBLE, "d", "double"), - (TiffTags.IFD, "L", "long"), - ], - ) - ) - - @_register_loader(1, 1) # Basic type, except for the legacy API. - def load_byte(self, data, legacy_api=True): - return data - - @_register_writer(1) # Basic type, except for the legacy API. - def write_byte(self, data): - return data - - @_register_loader(2, 1) - def load_string(self, data, legacy_api=True): - if data.endswith(b"\0"): - data = data[:-1] - return data.decode("latin-1", "replace") - - @_register_writer(2) - def write_string(self, value): - # remerge of https://github.com/python-pillow/Pillow/pull/1416 - return b"" + value.encode("ascii", "replace") + b"\0" - - @_register_loader(5, 8) - def load_rational(self, data, legacy_api=True): - vals = self._unpack("{}L".format(len(data) // 4), data) - - def combine(a, b): - return (a, b) if legacy_api else IFDRational(a, b) - - return tuple(combine(num, denom) for num, denom in zip(vals[::2], vals[1::2])) - - @_register_writer(5) - def write_rational(self, *values): - return b"".join( - self._pack("2L", *_limit_rational(frac, 2 ** 32 - 1)) for frac in values - ) - - @_register_loader(7, 1) - def load_undefined(self, data, legacy_api=True): - return data - - @_register_writer(7) - def write_undefined(self, value): - return value - - @_register_loader(10, 8) - def load_signed_rational(self, data, legacy_api=True): - vals = self._unpack("{}l".format(len(data) // 4), data) - - def combine(a, b): - return (a, b) if legacy_api else IFDRational(a, b) - - return tuple(combine(num, denom) for num, denom in zip(vals[::2], vals[1::2])) - - @_register_writer(10) - def write_signed_rational(self, *values): - return b"".join( - self._pack("2l", *_limit_signed_rational(frac, 2 ** 31 - 1, -(2 ** 31))) - for frac in values - ) - - def _ensure_read(self, fp, size): - ret = fp.read(size) - if len(ret) != size: - raise OSError( - "Corrupt EXIF data. " - f"Expecting to read {size} bytes but only got {len(ret)}. " - ) - return ret - - def load(self, fp): - - self.reset() - self._offset = fp.tell() - - try: - for i in range(self._unpack("H", self._ensure_read(fp, 2))[0]): - tag, typ, count, data = self._unpack("HHL4s", self._ensure_read(fp, 12)) - - tagname = TiffTags.lookup(tag).name - typname = TYPES.get(typ, "unknown") - msg = f"tag: {tagname} ({tag}) - type: {typname} ({typ})" - - try: - unit_size, handler = self._load_dispatch[typ] - except KeyError: - logger.debug(msg + f" - unsupported type {typ}") - continue # ignore unsupported type - size = count * unit_size - if size > 4: - here = fp.tell() - (offset,) = self._unpack("L", data) - msg += f" Tag Location: {here} - Data Location: {offset}" - fp.seek(offset) - data = ImageFile._safe_read(fp, size) - fp.seek(here) - else: - data = data[:size] - - if len(data) != size: - warnings.warn( - "Possibly corrupt EXIF data. " - f"Expecting to read {size} bytes but only got {len(data)}." - f" Skipping tag {tag}" - ) - logger.debug(msg) - continue - - if not data: - logger.debug(msg) - continue - - self._tagdata[tag] = data - self.tagtype[tag] = typ - - msg += " - value: " + ( - "" % size if size > 32 else repr(data) - ) - logger.debug(msg) - - (self.next,) = self._unpack("L", self._ensure_read(fp, 4)) - except OSError as msg: - warnings.warn(str(msg)) - return - - def tobytes(self, offset=0): - # FIXME What about tagdata? - result = self._pack("H", len(self._tags_v2)) - - entries = [] - offset = offset + len(result) + len(self._tags_v2) * 12 + 4 - stripoffsets = None - - # pass 1: convert tags to binary format - # always write tags in ascending order - for tag, value in sorted(self._tags_v2.items()): - if tag == STRIPOFFSETS: - stripoffsets = len(entries) - typ = self.tagtype.get(tag) - logger.debug(f"Tag {tag}, Type: {typ}, Value: {repr(value)}") - is_ifd = typ == TiffTags.LONG and isinstance(value, dict) - if is_ifd: - if self._endian == "<": - ifh = b"II\x2A\x00\x08\x00\x00\x00" - else: - ifh = b"MM\x00\x2A\x00\x00\x00\x08" - ifd = ImageFileDirectory_v2(ifh) - for ifd_tag, ifd_value in self._tags_v2[tag].items(): - ifd[ifd_tag] = ifd_value - data = ifd.tobytes(offset) - else: - values = value if isinstance(value, tuple) else (value,) - data = self._write_dispatch[typ](self, *values) - - tagname = TiffTags.lookup(tag).name - typname = "ifd" if is_ifd else TYPES.get(typ, "unknown") - msg = f"save: {tagname} ({tag}) - type: {typname} ({typ})" - msg += " - value: " + ( - "" % len(data) if len(data) >= 16 else str(values) - ) - logger.debug(msg) - - # count is sum of lengths for string and arbitrary data - if is_ifd: - count = 1 - elif typ in [TiffTags.BYTE, TiffTags.ASCII, TiffTags.UNDEFINED]: - count = len(data) - else: - count = len(values) - # figure out if data fits into the entry - if len(data) <= 4: - entries.append((tag, typ, count, data.ljust(4, b"\0"), b"")) - else: - entries.append((tag, typ, count, self._pack("L", offset), data)) - offset += (len(data) + 1) // 2 * 2 # pad to word - - # update strip offset data to point beyond auxiliary data - if stripoffsets is not None: - tag, typ, count, value, data = entries[stripoffsets] - if data: - raise NotImplementedError("multistrip support not yet implemented") - value = self._pack("L", self._unpack("L", value)[0] + offset) - entries[stripoffsets] = tag, typ, count, value, data - - # pass 2: write entries to file - for tag, typ, count, value, data in entries: - logger.debug(f"{tag} {typ} {count} {repr(value)} {repr(data)}") - result += self._pack("HHL4s", tag, typ, count, value) - - # -- overwrite here for multi-page -- - result += b"\0\0\0\0" # end of entries - - # pass 3: write auxiliary data to file - for tag, typ, count, value, data in entries: - result += data - if len(data) & 1: - result += b"\0" - - return result - - def save(self, fp): - - if fp.tell() == 0: # skip TIFF header on subsequent pages - # tiff header -- PIL always starts the first IFD at offset 8 - fp.write(self._prefix + self._pack("HL", 42, 8)) - - offset = fp.tell() - result = self.tobytes(offset) - fp.write(result) - return offset + len(result) - - -ImageFileDirectory_v2._load_dispatch = _load_dispatch -ImageFileDirectory_v2._write_dispatch = _write_dispatch -for idx, name in TYPES.items(): - name = name.replace(" ", "_") - setattr(ImageFileDirectory_v2, "load_" + name, _load_dispatch[idx][1]) - setattr(ImageFileDirectory_v2, "write_" + name, _write_dispatch[idx]) -del _load_dispatch, _write_dispatch, idx, name - - -# Legacy ImageFileDirectory support. -class ImageFileDirectory_v1(ImageFileDirectory_v2): - """This class represents the **legacy** interface to a TIFF tag directory. - - Exposes a dictionary interface of the tags in the directory:: - - ifd = ImageFileDirectory_v1() - ifd[key] = 'Some Data' - ifd.tagtype[key] = TiffTags.ASCII - print(ifd[key]) - ('Some Data',) - - Also contains a dictionary of tag types as read from the tiff image file, - :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`. - - Values are returned as a tuple. - - .. deprecated:: 3.0.0 - """ - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self._legacy_api = True - - tags = property(lambda self: self._tags_v1) - tagdata = property(lambda self: self._tagdata) - - # defined in ImageFileDirectory_v2 - tagtype: dict - """Dictionary of tag types""" - - @classmethod - def from_v2(cls, original): - """Returns an - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` - instance with the same data as is contained in the original - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` - instance. - - :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` - - """ - - ifd = cls(prefix=original.prefix) - ifd._tagdata = original._tagdata - ifd.tagtype = original.tagtype - ifd.next = original.next # an indicator for multipage tiffs - return ifd - - def to_v2(self): - """Returns an - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` - instance with the same data as is contained in the original - :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1` - instance. - - :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2` - - """ - - ifd = ImageFileDirectory_v2(prefix=self.prefix) - ifd._tagdata = dict(self._tagdata) - ifd.tagtype = dict(self.tagtype) - ifd._tags_v2 = dict(self._tags_v2) - return ifd - - def __contains__(self, tag): - return tag in self._tags_v1 or tag in self._tagdata - - def __len__(self): - return len(set(self._tagdata) | set(self._tags_v1)) - - def __iter__(self): - return iter(set(self._tagdata) | set(self._tags_v1)) - - def __setitem__(self, tag, value): - for legacy_api in (False, True): - self._setitem(tag, value, legacy_api) - - def __getitem__(self, tag): - if tag not in self._tags_v1: # unpack on the fly - data = self._tagdata[tag] - typ = self.tagtype[tag] - size, handler = self._load_dispatch[typ] - for legacy in (False, True): - self._setitem(tag, handler(self, data, legacy), legacy) - val = self._tags_v1[tag] - if not isinstance(val, (tuple, bytes)): - val = (val,) - return val - - -# undone -- switch this pointer when IFD_LEGACY_API == False -ImageFileDirectory = ImageFileDirectory_v1 - - -## -# Image plugin for TIFF files. - - -class TiffImageFile(ImageFile.ImageFile): - - format = "TIFF" - format_description = "Adobe TIFF" - _close_exclusive_fp_after_loading = False - - def __init__(self, fp=None, filename=None): - self.tag_v2 = None - """ Image file directory (tag dictionary) """ - - self.tag = None - """ Legacy tag entries """ - - super().__init__(fp, filename) - - def _open(self): - """Open the first image in a TIFF file""" - - # Header - ifh = self.fp.read(8) - - self.tag_v2 = ImageFileDirectory_v2(ifh) - - # legacy IFD entries will be filled in later - self.ifd = None - - # setup frame pointers - self.__first = self.__next = self.tag_v2.next - self.__frame = -1 - self.__fp = self.fp - self._frame_pos = [] - self._n_frames = None - - logger.debug("*** TiffImageFile._open ***") - logger.debug(f"- __first: {self.__first}") - logger.debug(f"- ifh: {repr(ifh)}") # Use repr to avoid str(bytes) - - # and load the first frame - self._seek(0) - - @property - def n_frames(self): - if self._n_frames is None: - current = self.tell() - self._seek(len(self._frame_pos)) - while self._n_frames is None: - self._seek(self.tell() + 1) - self.seek(current) - return self._n_frames - - def seek(self, frame): - """Select a given frame as current image""" - if not self._seek_check(frame): - return - self._seek(frame) - # Create a new core image object on second and - # subsequent frames in the image. Image may be - # different size/mode. - Image._decompression_bomb_check(self.size) - self.im = Image.core.new(self.mode, self.size) - - def _seek(self, frame): - self.fp = self.__fp - while len(self._frame_pos) <= frame: - if not self.__next: - raise EOFError("no more images in TIFF file") - logger.debug( - f"Seeking to frame {frame}, on frame {self.__frame}, " - f"__next {self.__next}, location: {self.fp.tell()}" - ) - # reset buffered io handle in case fp - # was passed to libtiff, invalidating the buffer - self.fp.tell() - self.fp.seek(self.__next) - self._frame_pos.append(self.__next) - logger.debug("Loading tags, location: %s" % self.fp.tell()) - self.tag_v2.load(self.fp) - self.__next = self.tag_v2.next - if self.__next == 0: - self._n_frames = frame + 1 - if len(self._frame_pos) == 1: - self.is_animated = self.__next != 0 - self.__frame += 1 - self.fp.seek(self._frame_pos[frame]) - self.tag_v2.load(self.fp) - # fill the legacy tag/ifd entries - self.tag = self.ifd = ImageFileDirectory_v1.from_v2(self.tag_v2) - self.__frame = frame - self._setup() - - def tell(self): - """Return the current frame number""" - return self.__frame - - def load(self): - if self.tile and self.use_load_libtiff: - return self._load_libtiff() - return super().load() - - def load_end(self): - if self._tile_orientation: - method = { - 2: Image.FLIP_LEFT_RIGHT, - 3: Image.ROTATE_180, - 4: Image.FLIP_TOP_BOTTOM, - 5: Image.TRANSPOSE, - 6: Image.ROTATE_270, - 7: Image.TRANSVERSE, - 8: Image.ROTATE_90, - }.get(self._tile_orientation) - if method is not None: - self.im = self.im.transpose(method) - self._size = self.im.size - - # allow closing if we're on the first frame, there's no next - # This is the ImageFile.load path only, libtiff specific below. - if not self.is_animated: - self._close_exclusive_fp_after_loading = True - - def _load_libtiff(self): - """Overload method triggered when we detect a compressed tiff - Calls out to libtiff""" - - Image.Image.load(self) - - self.load_prepare() - - if not len(self.tile) == 1: - raise OSError("Not exactly one tile") - - # (self._compression, (extents tuple), - # 0, (rawmode, self._compression, fp)) - extents = self.tile[0][1] - args = list(self.tile[0][3]) - - # To be nice on memory footprint, if there's a - # file descriptor, use that instead of reading - # into a string in python. - # libtiff closes the file descriptor, so pass in a dup. - try: - fp = hasattr(self.fp, "fileno") and os.dup(self.fp.fileno()) - # flush the file descriptor, prevents error on pypy 2.4+ - # should also eliminate the need for fp.tell - # in _seek - if hasattr(self.fp, "flush"): - self.fp.flush() - except OSError: - # io.BytesIO have a fileno, but returns an OSError if - # it doesn't use a file descriptor. - fp = False - - if fp: - args[2] = fp - - decoder = Image._getdecoder( - self.mode, "libtiff", tuple(args), self.decoderconfig - ) - try: - decoder.setimage(self.im, extents) - except ValueError as e: - raise OSError("Couldn't set the image") from e - - close_self_fp = self._exclusive_fp and not self.is_animated - if hasattr(self.fp, "getvalue"): - # We've got a stringio like thing passed in. Yay for all in memory. - # The decoder needs the entire file in one shot, so there's not - # a lot we can do here other than give it the entire file. - # unless we could do something like get the address of the - # underlying string for stringio. - # - # Rearranging for supporting byteio items, since they have a fileno - # that returns an OSError if there's no underlying fp. Easier to - # deal with here by reordering. - logger.debug("have getvalue. just sending in a string from getvalue") - n, err = decoder.decode(self.fp.getvalue()) - elif fp: - # we've got a actual file on disk, pass in the fp. - logger.debug("have fileno, calling fileno version of the decoder.") - if not close_self_fp: - self.fp.seek(0) - # 4 bytes, otherwise the trace might error out - n, err = decoder.decode(b"fpfp") - else: - # we have something else. - logger.debug("don't have fileno or getvalue. just reading") - self.fp.seek(0) - # UNDONE -- so much for that buffer size thing. - n, err = decoder.decode(self.fp.read()) - - self.tile = [] - self.readonly = 0 - - self.load_end() - - # libtiff closed the fp in a, we need to close self.fp, if possible - if close_self_fp: - self.fp.close() - self.fp = None # might be shared - - if err < 0: - raise OSError(err) - - return Image.Image.load(self) - - def _setup(self): - """Setup this image object based on current tags""" - - if 0xBC01 in self.tag_v2: - raise OSError("Windows Media Photo files not yet supported") - - # extract relevant tags - self._compression = COMPRESSION_INFO[self.tag_v2.get(COMPRESSION, 1)] - self._planar_configuration = self.tag_v2.get(PLANAR_CONFIGURATION, 1) - - # photometric is a required tag, but not everyone is reading - # the specification - photo = self.tag_v2.get(PHOTOMETRIC_INTERPRETATION, 0) - - # old style jpeg compression images most certainly are YCbCr - if self._compression == "tiff_jpeg": - photo = 6 - - fillorder = self.tag_v2.get(FILLORDER, 1) - - logger.debug("*** Summary ***") - logger.debug(f"- compression: {self._compression}") - logger.debug(f"- photometric_interpretation: {photo}") - logger.debug(f"- planar_configuration: {self._planar_configuration}") - logger.debug(f"- fill_order: {fillorder}") - logger.debug(f"- YCbCr subsampling: {self.tag.get(530)}") - - # size - xsize = int(self.tag_v2.get(IMAGEWIDTH)) - ysize = int(self.tag_v2.get(IMAGELENGTH)) - self._size = xsize, ysize - - logger.debug(f"- size: {self.size}") - - sampleFormat = self.tag_v2.get(SAMPLEFORMAT, (1,)) - if len(sampleFormat) > 1 and max(sampleFormat) == min(sampleFormat) == 1: - # SAMPLEFORMAT is properly per band, so an RGB image will - # be (1,1,1). But, we don't support per band pixel types, - # and anything more than one band is a uint8. So, just - # take the first element. Revisit this if adding support - # for more exotic images. - sampleFormat = (1,) - - bps_tuple = self.tag_v2.get(BITSPERSAMPLE, (1,)) - extra_tuple = self.tag_v2.get(EXTRASAMPLES, ()) - if photo in (2, 6, 8): # RGB, YCbCr, LAB - bps_count = 3 - elif photo == 5: # CMYK - bps_count = 4 - else: - bps_count = 1 - bps_count += len(extra_tuple) - # Some files have only one value in bps_tuple, - # while should have more. Fix it - if bps_count > len(bps_tuple) and len(bps_tuple) == 1: - bps_tuple = bps_tuple * bps_count - - # mode: check photometric interpretation and bits per pixel - key = ( - self.tag_v2.prefix, - photo, - sampleFormat, - fillorder, - bps_tuple, - extra_tuple, - ) - logger.debug(f"format key: {key}") - try: - self.mode, rawmode = OPEN_INFO[key] - except KeyError as e: - logger.debug("- unsupported format") - raise SyntaxError("unknown pixel mode") from e - - logger.debug(f"- raw mode: {rawmode}") - logger.debug(f"- pil mode: {self.mode}") - - self.info["compression"] = self._compression - - xres = self.tag_v2.get(X_RESOLUTION, 1) - yres = self.tag_v2.get(Y_RESOLUTION, 1) - - if xres and yres: - resunit = self.tag_v2.get(RESOLUTION_UNIT) - if resunit == 2: # dots per inch - self.info["dpi"] = int(xres + 0.5), int(yres + 0.5) - elif resunit == 3: # dots per centimeter. convert to dpi - self.info["dpi"] = int(xres * 2.54 + 0.5), int(yres * 2.54 + 0.5) - elif resunit is None: # used to default to 1, but now 2) - self.info["dpi"] = int(xres + 0.5), int(yres + 0.5) - # For backward compatibility, - # we also preserve the old behavior - self.info["resolution"] = xres, yres - else: # No absolute unit of measurement - self.info["resolution"] = xres, yres - - # build tile descriptors - x = y = layer = 0 - self.tile = [] - self.use_load_libtiff = READ_LIBTIFF or self._compression != "raw" - if self.use_load_libtiff: - # Decoder expects entire file as one tile. - # There's a buffer size limit in load (64k) - # so large g4 images will fail if we use that - # function. - # - # Setup the one tile for the whole image, then - # use the _load_libtiff function. - - # libtiff handles the fillmode for us, so 1;IR should - # actually be 1;I. Including the R double reverses the - # bits, so stripes of the image are reversed. See - # https://github.com/python-pillow/Pillow/issues/279 - if fillorder == 2: - # Replace fillorder with fillorder=1 - key = key[:3] + (1,) + key[4:] - logger.debug(f"format key: {key}") - # this should always work, since all the - # fillorder==2 modes have a corresponding - # fillorder=1 mode - self.mode, rawmode = OPEN_INFO[key] - # libtiff always returns the bytes in native order. - # we're expecting image byte order. So, if the rawmode - # contains I;16, we need to convert from native to image - # byte order. - if rawmode == "I;16": - rawmode = "I;16N" - if ";16B" in rawmode: - rawmode = rawmode.replace(";16B", ";16N") - if ";16L" in rawmode: - rawmode = rawmode.replace(";16L", ";16N") - - # Offset in the tile tuple is 0, we go from 0,0 to - # w,h, and we only do this once -- eds - a = (rawmode, self._compression, False, self.tag_v2.offset) - self.tile.append(("libtiff", (0, 0, xsize, ysize), 0, a)) - - elif STRIPOFFSETS in self.tag_v2 or TILEOFFSETS in self.tag_v2: - # striped image - if STRIPOFFSETS in self.tag_v2: - offsets = self.tag_v2[STRIPOFFSETS] - h = self.tag_v2.get(ROWSPERSTRIP, ysize) - w = self.size[0] - else: - # tiled image - offsets = self.tag_v2[TILEOFFSETS] - w = self.tag_v2.get(322) - h = self.tag_v2.get(323) - - for offset in offsets: - if x + w > xsize: - stride = w * sum(bps_tuple) / 8 # bytes per line - else: - stride = 0 - - tile_rawmode = rawmode - if self._planar_configuration == 2: - # each band on it's own layer - tile_rawmode = rawmode[layer] - # adjust stride width accordingly - stride /= bps_count - - a = (tile_rawmode, int(stride), 1) - self.tile.append( - ( - self._compression, - (x, y, min(x + w, xsize), min(y + h, ysize)), - offset, - a, - ) - ) - x = x + w - if x >= self.size[0]: - x, y = 0, y + h - if y >= self.size[1]: - x = y = 0 - layer += 1 - else: - logger.debug("- unsupported data organization") - raise SyntaxError("unknown data organization") - - # Fix up info. - if ICCPROFILE in self.tag_v2: - self.info["icc_profile"] = self.tag_v2[ICCPROFILE] - - # fixup palette descriptor - - if self.mode in ["P", "PA"]: - palette = [o8(b // 256) for b in self.tag_v2[COLORMAP]] - self.palette = ImagePalette.raw("RGB;L", b"".join(palette)) - - self._tile_orientation = self.tag_v2.get(0x0112) - - def _close__fp(self): - try: - if self.__fp != self.fp: - self.__fp.close() - except AttributeError: - pass - finally: - self.__fp = None - - -# -# -------------------------------------------------------------------- -# Write TIFF files - -# little endian is default except for image modes with -# explicit big endian byte-order - -SAVE_INFO = { - # mode => rawmode, byteorder, photometrics, - # sampleformat, bitspersample, extra - "1": ("1", II, 1, 1, (1,), None), - "L": ("L", II, 1, 1, (8,), None), - "LA": ("LA", II, 1, 1, (8, 8), 2), - "P": ("P", II, 3, 1, (8,), None), - "PA": ("PA", II, 3, 1, (8, 8), 2), - "I": ("I;32S", II, 1, 2, (32,), None), - "I;16": ("I;16", II, 1, 1, (16,), None), - "I;16S": ("I;16S", II, 1, 2, (16,), None), - "F": ("F;32F", II, 1, 3, (32,), None), - "RGB": ("RGB", II, 2, 1, (8, 8, 8), None), - "RGBX": ("RGBX", II, 2, 1, (8, 8, 8, 8), 0), - "RGBA": ("RGBA", II, 2, 1, (8, 8, 8, 8), 2), - "CMYK": ("CMYK", II, 5, 1, (8, 8, 8, 8), None), - "YCbCr": ("YCbCr", II, 6, 1, (8, 8, 8), None), - "LAB": ("LAB", II, 8, 1, (8, 8, 8), None), - "I;32BS": ("I;32BS", MM, 1, 2, (32,), None), - "I;16B": ("I;16B", MM, 1, 1, (16,), None), - "I;16BS": ("I;16BS", MM, 1, 2, (16,), None), - "F;32BF": ("F;32BF", MM, 1, 3, (32,), None), -} - - -def _save(im, fp, filename): - - try: - rawmode, prefix, photo, format, bits, extra = SAVE_INFO[im.mode] - except KeyError as e: - raise OSError(f"cannot write mode {im.mode} as TIFF") from e - - ifd = ImageFileDirectory_v2(prefix=prefix) - - compression = im.encoderinfo.get("compression", im.info.get("compression")) - if compression is None: - compression = "raw" - elif compression == "tiff_jpeg": - # OJPEG is obsolete, so use new-style JPEG compression instead - compression = "jpeg" - - libtiff = WRITE_LIBTIFF or compression != "raw" - - # required for color libtiff images - ifd[PLANAR_CONFIGURATION] = getattr(im, "_planar_configuration", 1) - - ifd[IMAGEWIDTH] = im.size[0] - ifd[IMAGELENGTH] = im.size[1] - - # write any arbitrary tags passed in as an ImageFileDirectory - info = im.encoderinfo.get("tiffinfo", {}) - logger.debug("Tiffinfo Keys: %s" % list(info)) - if isinstance(info, ImageFileDirectory_v1): - info = info.to_v2() - for key in info: - ifd[key] = info.get(key) - try: - ifd.tagtype[key] = info.tagtype[key] - except Exception: - pass # might not be an IFD. Might not have populated type - - # additions written by Greg Couch, gregc@cgl.ucsf.edu - # inspired by image-sig posting from Kevin Cazabon, kcazabon@home.com - if hasattr(im, "tag_v2"): - # preserve tags from original TIFF image file - for key in ( - RESOLUTION_UNIT, - X_RESOLUTION, - Y_RESOLUTION, - IPTC_NAA_CHUNK, - PHOTOSHOP_CHUNK, - XMP, - ): - if key in im.tag_v2: - ifd[key] = im.tag_v2[key] - ifd.tagtype[key] = im.tag_v2.tagtype[key] - - # preserve ICC profile (should also work when saving other formats - # which support profiles as TIFF) -- 2008-06-06 Florian Hoech - if "icc_profile" in im.info: - ifd[ICCPROFILE] = im.info["icc_profile"] - - for key, name in [ - (IMAGEDESCRIPTION, "description"), - (X_RESOLUTION, "resolution"), - (Y_RESOLUTION, "resolution"), - (X_RESOLUTION, "x_resolution"), - (Y_RESOLUTION, "y_resolution"), - (RESOLUTION_UNIT, "resolution_unit"), - (SOFTWARE, "software"), - (DATE_TIME, "date_time"), - (ARTIST, "artist"), - (COPYRIGHT, "copyright"), - ]: - if name in im.encoderinfo: - ifd[key] = im.encoderinfo[name] - - dpi = im.encoderinfo.get("dpi") - if dpi: - ifd[RESOLUTION_UNIT] = 2 - ifd[X_RESOLUTION] = int(dpi[0] + 0.5) - ifd[Y_RESOLUTION] = int(dpi[1] + 0.5) - - if bits != (1,): - ifd[BITSPERSAMPLE] = bits - if len(bits) != 1: - ifd[SAMPLESPERPIXEL] = len(bits) - if extra is not None: - ifd[EXTRASAMPLES] = extra - if format != 1: - ifd[SAMPLEFORMAT] = format - - ifd[PHOTOMETRIC_INTERPRETATION] = photo - - if im.mode in ["P", "PA"]: - lut = im.im.getpalette("RGB", "RGB;L") - ifd[COLORMAP] = tuple(v * 256 for v in lut) - # data orientation - stride = len(bits) * ((im.size[0] * bits[0] + 7) // 8) - ifd[ROWSPERSTRIP] = im.size[1] - strip_byte_counts = stride * im.size[1] - if strip_byte_counts >= 2 ** 16: - ifd.tagtype[STRIPBYTECOUNTS] = TiffTags.LONG - ifd[STRIPBYTECOUNTS] = strip_byte_counts - ifd[STRIPOFFSETS] = 0 # this is adjusted by IFD writer - # no compression by default: - ifd[COMPRESSION] = COMPRESSION_INFO_REV.get(compression, 1) - - if libtiff: - if "quality" in im.encoderinfo: - quality = im.encoderinfo["quality"] - if not isinstance(quality, int) or quality < 0 or quality > 100: - raise ValueError("Invalid quality setting") - if compression != "jpeg": - raise ValueError( - "quality setting only supported for 'jpeg' compression" - ) - ifd[JPEGQUALITY] = quality - - logger.debug("Saving using libtiff encoder") - logger.debug("Items: %s" % sorted(ifd.items())) - _fp = 0 - if hasattr(fp, "fileno"): - try: - fp.seek(0) - _fp = os.dup(fp.fileno()) - except io.UnsupportedOperation: - pass - - # optional types for non core tags - types = {} - # SAMPLEFORMAT is determined by the image format and should not be copied - # from legacy_ifd. - # STRIPOFFSETS and STRIPBYTECOUNTS are added by the library - # based on the data in the strip. - # The other tags expect arrays with a certain length (fixed or depending on - # BITSPERSAMPLE, etc), passing arrays with a different length will result in - # segfaults. Block these tags until we add extra validation. - # SUBIFD may also cause a segfault. - blocklist = [ - REFERENCEBLACKWHITE, - SAMPLEFORMAT, - STRIPBYTECOUNTS, - STRIPOFFSETS, - TRANSFERFUNCTION, - SUBIFD, - ] - - atts = {} - # bits per sample is a single short in the tiff directory, not a list. - atts[BITSPERSAMPLE] = bits[0] - # Merge the ones that we have with (optional) more bits from - # the original file, e.g x,y resolution so that we can - # save(load('')) == original file. - legacy_ifd = {} - if hasattr(im, "tag"): - legacy_ifd = im.tag.to_v2() - for tag, value in itertools.chain( - ifd.items(), getattr(im, "tag_v2", {}).items(), legacy_ifd.items() - ): - # Libtiff can only process certain core items without adding - # them to the custom dictionary. - # Custom items are supported for int, float, unicode, string and byte - # values. Other types and tuples require a tagtype. - if tag not in TiffTags.LIBTIFF_CORE: - if not Image.core.libtiff_support_custom_tags: - continue - - if tag in ifd.tagtype: - types[tag] = ifd.tagtype[tag] - elif not (isinstance(value, (int, float, str, bytes))): - continue - else: - type = TiffTags.lookup(tag).type - if type: - types[tag] = type - if tag not in atts and tag not in blocklist: - if isinstance(value, str): - atts[tag] = value.encode("ascii", "replace") + b"\0" - elif isinstance(value, IFDRational): - atts[tag] = float(value) - else: - atts[tag] = value - - logger.debug("Converted items: %s" % sorted(atts.items())) - - # libtiff always expects the bytes in native order. - # we're storing image byte order. So, if the rawmode - # contains I;16, we need to convert from native to image - # byte order. - if im.mode in ("I;16B", "I;16"): - rawmode = "I;16N" - - # Pass tags as sorted list so that the tags are set in a fixed order. - # This is required by libtiff for some tags. For example, the JPEGQUALITY - # pseudo tag requires that the COMPRESS tag was already set. - tags = list(atts.items()) - tags.sort() - a = (rawmode, compression, _fp, filename, tags, types) - e = Image._getencoder(im.mode, "libtiff", a, im.encoderconfig) - e.setimage(im.im, (0, 0) + im.size) - while True: - # undone, change to self.decodermaxblock: - l, s, d = e.encode(16 * 1024) - if not _fp: - fp.write(d) - if s: - break - if s < 0: - raise OSError(f"encoder error {s} when writing image file") - - else: - offset = ifd.save(fp) - - ImageFile._save( - im, fp, [("raw", (0, 0) + im.size, offset, (rawmode, stride, 1))] - ) - - # -- helper for multi-page save -- - if "_debug_multipage" in im.encoderinfo: - # just to access o32 and o16 (using correct byte order) - im._debug_multipage = ifd - - -class AppendingTiffWriter: - fieldSizes = [ - 0, # None - 1, # byte - 1, # ascii - 2, # short - 4, # long - 8, # rational - 1, # sbyte - 1, # undefined - 2, # sshort - 4, # slong - 8, # srational - 4, # float - 8, # double - ] - - # StripOffsets = 273 - # FreeOffsets = 288 - # TileOffsets = 324 - # JPEGQTables = 519 - # JPEGDCTables = 520 - # JPEGACTables = 521 - Tags = {273, 288, 324, 519, 520, 521} - - def __init__(self, fn, new=False): - if hasattr(fn, "read"): - self.f = fn - self.close_fp = False - else: - self.name = fn - self.close_fp = True - try: - self.f = open(fn, "w+b" if new else "r+b") - except OSError: - self.f = open(fn, "w+b") - self.beginning = self.f.tell() - self.setup() - - def setup(self): - # Reset everything. - self.f.seek(self.beginning, os.SEEK_SET) - - self.whereToWriteNewIFDOffset = None - self.offsetOfNewPage = 0 - - self.IIMM = IIMM = self.f.read(4) - if not IIMM: - # empty file - first page - self.isFirst = True - return - - self.isFirst = False - if IIMM == b"II\x2a\x00": - self.setEndian("<") - elif IIMM == b"MM\x00\x2a": - self.setEndian(">") - else: - raise RuntimeError("Invalid TIFF file header") - - self.skipIFDs() - self.goToEnd() - - def finalize(self): - if self.isFirst: - return - - # fix offsets - self.f.seek(self.offsetOfNewPage) - - IIMM = self.f.read(4) - if not IIMM: - # raise RuntimeError("nothing written into new page") - # Make it easy to finish a frame without committing to a new one. - return - - if IIMM != self.IIMM: - raise RuntimeError("IIMM of new page doesn't match IIMM of first page") - - IFDoffset = self.readLong() - IFDoffset += self.offsetOfNewPage - self.f.seek(self.whereToWriteNewIFDOffset) - self.writeLong(IFDoffset) - self.f.seek(IFDoffset) - self.fixIFD() - - def newFrame(self): - # Call this to finish a frame. - self.finalize() - self.setup() - - def __enter__(self): - return self - - def __exit__(self, exc_type, exc_value, traceback): - if self.close_fp: - self.close() - return False - - def tell(self): - return self.f.tell() - self.offsetOfNewPage - - def seek(self, offset, whence=io.SEEK_SET): - if whence == os.SEEK_SET: - offset += self.offsetOfNewPage - - self.f.seek(offset, whence) - return self.tell() - - def goToEnd(self): - self.f.seek(0, os.SEEK_END) - pos = self.f.tell() - - # pad to 16 byte boundary - padBytes = 16 - pos % 16 - if 0 < padBytes < 16: - self.f.write(bytes(padBytes)) - self.offsetOfNewPage = self.f.tell() - - def setEndian(self, endian): - self.endian = endian - self.longFmt = self.endian + "L" - self.shortFmt = self.endian + "H" - self.tagFormat = self.endian + "HHL" - - def skipIFDs(self): - while True: - IFDoffset = self.readLong() - if IFDoffset == 0: - self.whereToWriteNewIFDOffset = self.f.tell() - 4 - break - - self.f.seek(IFDoffset) - numTags = self.readShort() - self.f.seek(numTags * 12, os.SEEK_CUR) - - def write(self, data): - return self.f.write(data) - - def readShort(self): - (value,) = struct.unpack(self.shortFmt, self.f.read(2)) - return value - - def readLong(self): - (value,) = struct.unpack(self.longFmt, self.f.read(4)) - return value - - def rewriteLastShortToLong(self, value): - self.f.seek(-2, os.SEEK_CUR) - bytesWritten = self.f.write(struct.pack(self.longFmt, value)) - if bytesWritten is not None and bytesWritten != 4: - raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 4") - - def rewriteLastShort(self, value): - self.f.seek(-2, os.SEEK_CUR) - bytesWritten = self.f.write(struct.pack(self.shortFmt, value)) - if bytesWritten is not None and bytesWritten != 2: - raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 2") - - def rewriteLastLong(self, value): - self.f.seek(-4, os.SEEK_CUR) - bytesWritten = self.f.write(struct.pack(self.longFmt, value)) - if bytesWritten is not None and bytesWritten != 4: - raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 4") - - def writeShort(self, value): - bytesWritten = self.f.write(struct.pack(self.shortFmt, value)) - if bytesWritten is not None and bytesWritten != 2: - raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 2") - - def writeLong(self, value): - bytesWritten = self.f.write(struct.pack(self.longFmt, value)) - if bytesWritten is not None and bytesWritten != 4: - raise RuntimeError(f"wrote only {bytesWritten} bytes but wanted 4") - - def close(self): - self.finalize() - self.f.close() - - def fixIFD(self): - numTags = self.readShort() - - for i in range(numTags): - tag, fieldType, count = struct.unpack(self.tagFormat, self.f.read(8)) - - fieldSize = self.fieldSizes[fieldType] - totalSize = fieldSize * count - isLocal = totalSize <= 4 - if not isLocal: - offset = self.readLong() - offset += self.offsetOfNewPage - self.rewriteLastLong(offset) - - if tag in self.Tags: - curPos = self.f.tell() - - if isLocal: - self.fixOffsets( - count, isShort=(fieldSize == 2), isLong=(fieldSize == 4) - ) - self.f.seek(curPos + 4) - else: - self.f.seek(offset) - self.fixOffsets( - count, isShort=(fieldSize == 2), isLong=(fieldSize == 4) - ) - self.f.seek(curPos) - - offset = curPos = None - - elif isLocal: - # skip the locally stored value that is not an offset - self.f.seek(4, os.SEEK_CUR) - - def fixOffsets(self, count, isShort=False, isLong=False): - if not isShort and not isLong: - raise RuntimeError("offset is neither short nor long") - - for i in range(count): - offset = self.readShort() if isShort else self.readLong() - offset += self.offsetOfNewPage - if isShort and offset >= 65536: - # offset is now too large - we must convert shorts to longs - if count != 1: - raise RuntimeError("not implemented") # XXX TODO - - # simple case - the offset is just one and therefore it is - # local (not referenced with another offset) - self.rewriteLastShortToLong(offset) - self.f.seek(-10, os.SEEK_CUR) - self.writeShort(TiffTags.LONG) # rewrite the type to LONG - self.f.seek(8, os.SEEK_CUR) - elif isShort: - self.rewriteLastShort(offset) - else: - self.rewriteLastLong(offset) - - -def _save_all(im, fp, filename): - encoderinfo = im.encoderinfo.copy() - encoderconfig = im.encoderconfig - append_images = list(encoderinfo.get("append_images", [])) - if not hasattr(im, "n_frames") and not append_images: - return _save(im, fp, filename) - - cur_idx = im.tell() - try: - with AppendingTiffWriter(fp) as tf: - for ims in [im] + append_images: - ims.encoderinfo = encoderinfo - ims.encoderconfig = encoderconfig - if not hasattr(ims, "n_frames"): - nfr = 1 - else: - nfr = ims.n_frames - - for idx in range(nfr): - ims.seek(idx) - ims.load() - _save(ims, tf, filename) - tf.newFrame() - finally: - im.seek(cur_idx) - - -# -# -------------------------------------------------------------------- -# Register - -Image.register_open(TiffImageFile.format, TiffImageFile, _accept) -Image.register_save(TiffImageFile.format, _save) -Image.register_save_all(TiffImageFile.format, _save_all) - -Image.register_extensions(TiffImageFile.format, [".tif", ".tiff"]) - -Image.register_mime(TiffImageFile.format, "image/tiff") diff --git a/PIL/TiffTags.py b/PIL/TiffTags.py deleted file mode 100644 index 796ff34..0000000 --- a/PIL/TiffTags.py +++ /dev/null @@ -1,499 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# TIFF tags -# -# This module provides clear-text names for various well-known -# TIFF tags. the TIFF codec works just fine without it. -# -# Copyright (c) Secret Labs AB 1999. -# -# See the README file for information on usage and redistribution. -# - -## -# This module provides constants and clear-text names for various -# well-known TIFF tags. -## - -from collections import namedtuple - - -class TagInfo(namedtuple("_TagInfo", "value name type length enum")): - __slots__ = [] - - def __new__(cls, value=None, name="unknown", type=None, length=None, enum=None): - return super().__new__(cls, value, name, type, length, enum or {}) - - def cvt_enum(self, value): - # Using get will call hash(value), which can be expensive - # for some types (e.g. Fraction). Since self.enum is rarely - # used, it's usually better to test it first. - return self.enum.get(value, value) if self.enum else value - - -def lookup(tag): - """ - :param tag: Integer tag number - :returns: Taginfo namedtuple, From the TAGS_V2 info if possible, - otherwise just populating the value and name from TAGS. - If the tag is not recognized, "unknown" is returned for the name - - """ - - return TAGS_V2.get(tag, TagInfo(tag, TAGS.get(tag, "unknown"))) - - -## -# Map tag numbers to tag info. -# -# id: (Name, Type, Length, enum_values) -# -# The length here differs from the length in the tiff spec. For -# numbers, the tiff spec is for the number of fields returned. We -# agree here. For string-like types, the tiff spec uses the length of -# field in bytes. In Pillow, we are using the number of expected -# fields, in general 1 for string-like types. - - -BYTE = 1 -ASCII = 2 -SHORT = 3 -LONG = 4 -RATIONAL = 5 -SIGNED_BYTE = 6 -UNDEFINED = 7 -SIGNED_SHORT = 8 -SIGNED_LONG = 9 -SIGNED_RATIONAL = 10 -FLOAT = 11 -DOUBLE = 12 -IFD = 13 - -TAGS_V2 = { - 254: ("NewSubfileType", LONG, 1), - 255: ("SubfileType", SHORT, 1), - 256: ("ImageWidth", LONG, 1), - 257: ("ImageLength", LONG, 1), - 258: ("BitsPerSample", SHORT, 0), - 259: ( - "Compression", - SHORT, - 1, - { - "Uncompressed": 1, - "CCITT 1d": 2, - "Group 3 Fax": 3, - "Group 4 Fax": 4, - "LZW": 5, - "JPEG": 6, - "PackBits": 32773, - }, - ), - 262: ( - "PhotometricInterpretation", - SHORT, - 1, - { - "WhiteIsZero": 0, - "BlackIsZero": 1, - "RGB": 2, - "RGB Palette": 3, - "Transparency Mask": 4, - "CMYK": 5, - "YCbCr": 6, - "CieLAB": 8, - "CFA": 32803, # TIFF/EP, Adobe DNG - "LinearRaw": 32892, # Adobe DNG - }, - ), - 263: ("Threshholding", SHORT, 1), - 264: ("CellWidth", SHORT, 1), - 265: ("CellLength", SHORT, 1), - 266: ("FillOrder", SHORT, 1), - 269: ("DocumentName", ASCII, 1), - 270: ("ImageDescription", ASCII, 1), - 271: ("Make", ASCII, 1), - 272: ("Model", ASCII, 1), - 273: ("StripOffsets", LONG, 0), - 274: ("Orientation", SHORT, 1), - 277: ("SamplesPerPixel", SHORT, 1), - 278: ("RowsPerStrip", LONG, 1), - 279: ("StripByteCounts", LONG, 0), - 280: ("MinSampleValue", SHORT, 0), - 281: ("MaxSampleValue", SHORT, 0), - 282: ("XResolution", RATIONAL, 1), - 283: ("YResolution", RATIONAL, 1), - 284: ("PlanarConfiguration", SHORT, 1, {"Contiguous": 1, "Separate": 2}), - 285: ("PageName", ASCII, 1), - 286: ("XPosition", RATIONAL, 1), - 287: ("YPosition", RATIONAL, 1), - 288: ("FreeOffsets", LONG, 1), - 289: ("FreeByteCounts", LONG, 1), - 290: ("GrayResponseUnit", SHORT, 1), - 291: ("GrayResponseCurve", SHORT, 0), - 292: ("T4Options", LONG, 1), - 293: ("T6Options", LONG, 1), - 296: ("ResolutionUnit", SHORT, 1, {"none": 1, "inch": 2, "cm": 3}), - 297: ("PageNumber", SHORT, 2), - 301: ("TransferFunction", SHORT, 0), - 305: ("Software", ASCII, 1), - 306: ("DateTime", ASCII, 1), - 315: ("Artist", ASCII, 1), - 316: ("HostComputer", ASCII, 1), - 317: ("Predictor", SHORT, 1, {"none": 1, "Horizontal Differencing": 2}), - 318: ("WhitePoint", RATIONAL, 2), - 319: ("PrimaryChromaticities", RATIONAL, 6), - 320: ("ColorMap", SHORT, 0), - 321: ("HalftoneHints", SHORT, 2), - 322: ("TileWidth", LONG, 1), - 323: ("TileLength", LONG, 1), - 324: ("TileOffsets", LONG, 0), - 325: ("TileByteCounts", LONG, 0), - 332: ("InkSet", SHORT, 1), - 333: ("InkNames", ASCII, 1), - 334: ("NumberOfInks", SHORT, 1), - 336: ("DotRange", SHORT, 0), - 337: ("TargetPrinter", ASCII, 1), - 338: ("ExtraSamples", SHORT, 0), - 339: ("SampleFormat", SHORT, 0), - 340: ("SMinSampleValue", DOUBLE, 0), - 341: ("SMaxSampleValue", DOUBLE, 0), - 342: ("TransferRange", SHORT, 6), - 347: ("JPEGTables", UNDEFINED, 1), - # obsolete JPEG tags - 512: ("JPEGProc", SHORT, 1), - 513: ("JPEGInterchangeFormat", LONG, 1), - 514: ("JPEGInterchangeFormatLength", LONG, 1), - 515: ("JPEGRestartInterval", SHORT, 1), - 517: ("JPEGLosslessPredictors", SHORT, 0), - 518: ("JPEGPointTransforms", SHORT, 0), - 519: ("JPEGQTables", LONG, 0), - 520: ("JPEGDCTables", LONG, 0), - 521: ("JPEGACTables", LONG, 0), - 529: ("YCbCrCoefficients", RATIONAL, 3), - 530: ("YCbCrSubSampling", SHORT, 2), - 531: ("YCbCrPositioning", SHORT, 1), - 532: ("ReferenceBlackWhite", RATIONAL, 6), - 700: ("XMP", BYTE, 0), - 33432: ("Copyright", ASCII, 1), - 33723: ("IptcNaaInfo", UNDEFINED, 0), - 34377: ("PhotoshopInfo", BYTE, 0), - # FIXME add more tags here - 34665: ("ExifIFD", LONG, 1), - 34675: ("ICCProfile", UNDEFINED, 1), - 34853: ("GPSInfoIFD", LONG, 1), - # MPInfo - 45056: ("MPFVersion", UNDEFINED, 1), - 45057: ("NumberOfImages", LONG, 1), - 45058: ("MPEntry", UNDEFINED, 1), - 45059: ("ImageUIDList", UNDEFINED, 0), # UNDONE, check - 45060: ("TotalFrames", LONG, 1), - 45313: ("MPIndividualNum", LONG, 1), - 45569: ("PanOrientation", LONG, 1), - 45570: ("PanOverlap_H", RATIONAL, 1), - 45571: ("PanOverlap_V", RATIONAL, 1), - 45572: ("BaseViewpointNum", LONG, 1), - 45573: ("ConvergenceAngle", SIGNED_RATIONAL, 1), - 45574: ("BaselineLength", RATIONAL, 1), - 45575: ("VerticalDivergence", SIGNED_RATIONAL, 1), - 45576: ("AxisDistance_X", SIGNED_RATIONAL, 1), - 45577: ("AxisDistance_Y", SIGNED_RATIONAL, 1), - 45578: ("AxisDistance_Z", SIGNED_RATIONAL, 1), - 45579: ("YawAngle", SIGNED_RATIONAL, 1), - 45580: ("PitchAngle", SIGNED_RATIONAL, 1), - 45581: ("RollAngle", SIGNED_RATIONAL, 1), - 50741: ("MakerNoteSafety", SHORT, 1, {"Unsafe": 0, "Safe": 1}), - 50780: ("BestQualityScale", RATIONAL, 1), - 50838: ("ImageJMetaDataByteCounts", LONG, 0), # Can be more than one - 50839: ("ImageJMetaData", UNDEFINED, 1), # see Issue #2006 -} - -# Legacy Tags structure -# these tags aren't included above, but were in the previous versions -TAGS = { - 347: "JPEGTables", - 700: "XMP", - # Additional Exif Info - 32932: "Wang Annotation", - 33434: "ExposureTime", - 33437: "FNumber", - 33445: "MD FileTag", - 33446: "MD ScalePixel", - 33447: "MD ColorTable", - 33448: "MD LabName", - 33449: "MD SampleInfo", - 33450: "MD PrepDate", - 33451: "MD PrepTime", - 33452: "MD FileUnits", - 33550: "ModelPixelScaleTag", - 33723: "IptcNaaInfo", - 33918: "INGR Packet Data Tag", - 33919: "INGR Flag Registers", - 33920: "IrasB Transformation Matrix", - 33922: "ModelTiepointTag", - 34264: "ModelTransformationTag", - 34377: "PhotoshopInfo", - 34735: "GeoKeyDirectoryTag", - 34736: "GeoDoubleParamsTag", - 34737: "GeoAsciiParamsTag", - 34850: "ExposureProgram", - 34852: "SpectralSensitivity", - 34855: "ISOSpeedRatings", - 34856: "OECF", - 34864: "SensitivityType", - 34865: "StandardOutputSensitivity", - 34866: "RecommendedExposureIndex", - 34867: "ISOSpeed", - 34868: "ISOSpeedLatitudeyyy", - 34869: "ISOSpeedLatitudezzz", - 34908: "HylaFAX FaxRecvParams", - 34909: "HylaFAX FaxSubAddress", - 34910: "HylaFAX FaxRecvTime", - 36864: "ExifVersion", - 36867: "DateTimeOriginal", - 36868: "DateTImeDigitized", - 37121: "ComponentsConfiguration", - 37122: "CompressedBitsPerPixel", - 37724: "ImageSourceData", - 37377: "ShutterSpeedValue", - 37378: "ApertureValue", - 37379: "BrightnessValue", - 37380: "ExposureBiasValue", - 37381: "MaxApertureValue", - 37382: "SubjectDistance", - 37383: "MeteringMode", - 37384: "LightSource", - 37385: "Flash", - 37386: "FocalLength", - 37396: "SubjectArea", - 37500: "MakerNote", - 37510: "UserComment", - 37520: "SubSec", - 37521: "SubSecTimeOriginal", - 37522: "SubsecTimeDigitized", - 40960: "FlashPixVersion", - 40961: "ColorSpace", - 40962: "PixelXDimension", - 40963: "PixelYDimension", - 40964: "RelatedSoundFile", - 40965: "InteroperabilityIFD", - 41483: "FlashEnergy", - 41484: "SpatialFrequencyResponse", - 41486: "FocalPlaneXResolution", - 41487: "FocalPlaneYResolution", - 41488: "FocalPlaneResolutionUnit", - 41492: "SubjectLocation", - 41493: "ExposureIndex", - 41495: "SensingMethod", - 41728: "FileSource", - 41729: "SceneType", - 41730: "CFAPattern", - 41985: "CustomRendered", - 41986: "ExposureMode", - 41987: "WhiteBalance", - 41988: "DigitalZoomRatio", - 41989: "FocalLengthIn35mmFilm", - 41990: "SceneCaptureType", - 41991: "GainControl", - 41992: "Contrast", - 41993: "Saturation", - 41994: "Sharpness", - 41995: "DeviceSettingDescription", - 41996: "SubjectDistanceRange", - 42016: "ImageUniqueID", - 42032: "CameraOwnerName", - 42033: "BodySerialNumber", - 42034: "LensSpecification", - 42035: "LensMake", - 42036: "LensModel", - 42037: "LensSerialNumber", - 42112: "GDAL_METADATA", - 42113: "GDAL_NODATA", - 42240: "Gamma", - 50215: "Oce Scanjob Description", - 50216: "Oce Application Selector", - 50217: "Oce Identification Number", - 50218: "Oce ImageLogic Characteristics", - # Adobe DNG - 50706: "DNGVersion", - 50707: "DNGBackwardVersion", - 50708: "UniqueCameraModel", - 50709: "LocalizedCameraModel", - 50710: "CFAPlaneColor", - 50711: "CFALayout", - 50712: "LinearizationTable", - 50713: "BlackLevelRepeatDim", - 50714: "BlackLevel", - 50715: "BlackLevelDeltaH", - 50716: "BlackLevelDeltaV", - 50717: "WhiteLevel", - 50718: "DefaultScale", - 50719: "DefaultCropOrigin", - 50720: "DefaultCropSize", - 50721: "ColorMatrix1", - 50722: "ColorMatrix2", - 50723: "CameraCalibration1", - 50724: "CameraCalibration2", - 50725: "ReductionMatrix1", - 50726: "ReductionMatrix2", - 50727: "AnalogBalance", - 50728: "AsShotNeutral", - 50729: "AsShotWhiteXY", - 50730: "BaselineExposure", - 50731: "BaselineNoise", - 50732: "BaselineSharpness", - 50733: "BayerGreenSplit", - 50734: "LinearResponseLimit", - 50735: "CameraSerialNumber", - 50736: "LensInfo", - 50737: "ChromaBlurRadius", - 50738: "AntiAliasStrength", - 50740: "DNGPrivateData", - 50778: "CalibrationIlluminant1", - 50779: "CalibrationIlluminant2", - 50784: "Alias Layer Metadata", -} - - -def _populate(): - for k, v in TAGS_V2.items(): - # Populate legacy structure. - TAGS[k] = v[0] - if len(v) == 4: - for sk, sv in v[3].items(): - TAGS[(k, sv)] = sk - - TAGS_V2[k] = TagInfo(k, *v) - - -_populate() -## -# Map type numbers to type names -- defined in ImageFileDirectory. - -TYPES = {} - -# was: -# TYPES = { -# 1: "byte", -# 2: "ascii", -# 3: "short", -# 4: "long", -# 5: "rational", -# 6: "signed byte", -# 7: "undefined", -# 8: "signed short", -# 9: "signed long", -# 10: "signed rational", -# 11: "float", -# 12: "double", -# } - -# -# These tags are handled by default in libtiff, without -# adding to the custom dictionary. From tif_dir.c, searching for -# case TIFFTAG in the _TIFFVSetField function: -# Line: item. -# 148: case TIFFTAG_SUBFILETYPE: -# 151: case TIFFTAG_IMAGEWIDTH: -# 154: case TIFFTAG_IMAGELENGTH: -# 157: case TIFFTAG_BITSPERSAMPLE: -# 181: case TIFFTAG_COMPRESSION: -# 202: case TIFFTAG_PHOTOMETRIC: -# 205: case TIFFTAG_THRESHHOLDING: -# 208: case TIFFTAG_FILLORDER: -# 214: case TIFFTAG_ORIENTATION: -# 221: case TIFFTAG_SAMPLESPERPIXEL: -# 228: case TIFFTAG_ROWSPERSTRIP: -# 238: case TIFFTAG_MINSAMPLEVALUE: -# 241: case TIFFTAG_MAXSAMPLEVALUE: -# 244: case TIFFTAG_SMINSAMPLEVALUE: -# 247: case TIFFTAG_SMAXSAMPLEVALUE: -# 250: case TIFFTAG_XRESOLUTION: -# 256: case TIFFTAG_YRESOLUTION: -# 262: case TIFFTAG_PLANARCONFIG: -# 268: case TIFFTAG_XPOSITION: -# 271: case TIFFTAG_YPOSITION: -# 274: case TIFFTAG_RESOLUTIONUNIT: -# 280: case TIFFTAG_PAGENUMBER: -# 284: case TIFFTAG_HALFTONEHINTS: -# 288: case TIFFTAG_COLORMAP: -# 294: case TIFFTAG_EXTRASAMPLES: -# 298: case TIFFTAG_MATTEING: -# 305: case TIFFTAG_TILEWIDTH: -# 316: case TIFFTAG_TILELENGTH: -# 327: case TIFFTAG_TILEDEPTH: -# 333: case TIFFTAG_DATATYPE: -# 344: case TIFFTAG_SAMPLEFORMAT: -# 361: case TIFFTAG_IMAGEDEPTH: -# 364: case TIFFTAG_SUBIFD: -# 376: case TIFFTAG_YCBCRPOSITIONING: -# 379: case TIFFTAG_YCBCRSUBSAMPLING: -# 383: case TIFFTAG_TRANSFERFUNCTION: -# 389: case TIFFTAG_REFERENCEBLACKWHITE: -# 393: case TIFFTAG_INKNAMES: - -# Following pseudo-tags are also handled by default in libtiff: -# TIFFTAG_JPEGQUALITY 65537 - -# some of these are not in our TAGS_V2 dict and were included from tiff.h - -# This list also exists in encode.c -LIBTIFF_CORE = { - 255, - 256, - 257, - 258, - 259, - 262, - 263, - 266, - 274, - 277, - 278, - 280, - 281, - 340, - 341, - 282, - 283, - 284, - 286, - 287, - 296, - 297, - 321, - 320, - 338, - 32995, - 322, - 323, - 32998, - 32996, - 339, - 32997, - 330, - 531, - 530, - 301, - 532, - 333, - # as above - 269, # this has been in our tests forever, and works - 65537, -} - -LIBTIFF_CORE.remove(301) # Array of short, crashes -LIBTIFF_CORE.remove(532) # Array of long, crashes - -LIBTIFF_CORE.remove(255) # We don't have support for subfiletypes -LIBTIFF_CORE.remove(322) # We don't have support for writing tiled images with libtiff -LIBTIFF_CORE.remove(323) # Tiled images -LIBTIFF_CORE.remove(333) # Ink Names either - -# Note to advanced users: There may be combinations of these -# parameters and values that when added properly, will work and -# produce valid tiff images that may work in your application. -# It is safe to add and remove tags from this set from Pillow's point -# of view so long as you test against libtiff. diff --git a/PIL/WalImageFile.py b/PIL/WalImageFile.py deleted file mode 100644 index b578d69..0000000 --- a/PIL/WalImageFile.py +++ /dev/null @@ -1,126 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# WAL file handling -# -# History: -# 2003-04-23 fl created -# -# Copyright (c) 2003 by Fredrik Lundh. -# -# See the README file for information on usage and redistribution. -# - -""" -This reader is based on the specification available from: -https://www.flipcode.com/archives/Quake_2_BSP_File_Format.shtml -and has been tested with a few sample files found using google. - -.. note:: - This format cannot be automatically recognized, so the reader - is not registered for use with :py:func:`PIL.Image.open()`. - To open a WAL file, use the :py:func:`PIL.WalImageFile.open()` function instead. -""" - -import builtins - -from . import Image -from ._binary import i32le as i32 - - -def open(filename): - """ - Load texture from a Quake2 WAL texture file. - - By default, a Quake2 standard palette is attached to the texture. - To override the palette, use the :py:func:`PIL.Image.Image.putpalette()` method. - - :param filename: WAL file name, or an opened file handle. - :returns: An image instance. - """ - # FIXME: modify to return a WalImageFile instance instead of - # plain Image object ? - - def imopen(fp): - # read header fields - header = fp.read(32 + 24 + 32 + 12) - size = i32(header, 32), i32(header, 36) - offset = i32(header, 40) - - # load pixel data - fp.seek(offset) - - Image._decompression_bomb_check(size) - im = Image.frombytes("P", size, fp.read(size[0] * size[1])) - im.putpalette(quake2palette) - - im.format = "WAL" - im.format_description = "Quake2 Texture" - - # strings are null-terminated - im.info["name"] = header[:32].split(b"\0", 1)[0] - next_name = header[56 : 56 + 32].split(b"\0", 1)[0] - if next_name: - im.info["next_name"] = next_name - - return im - - if hasattr(filename, "read"): - return imopen(filename) - else: - with builtins.open(filename, "rb") as fp: - return imopen(fp) - - -quake2palette = ( - # default palette taken from piffo 0.93 by Hans Häggström - b"\x01\x01\x01\x0b\x0b\x0b\x12\x12\x12\x17\x17\x17\x1b\x1b\x1b\x1e" - b"\x1e\x1e\x22\x22\x22\x26\x26\x26\x29\x29\x29\x2c\x2c\x2c\x2f\x2f" - b"\x2f\x32\x32\x32\x35\x35\x35\x37\x37\x37\x3a\x3a\x3a\x3c\x3c\x3c" - b"\x24\x1e\x13\x22\x1c\x12\x20\x1b\x12\x1f\x1a\x10\x1d\x19\x10\x1b" - b"\x17\x0f\x1a\x16\x0f\x18\x14\x0d\x17\x13\x0d\x16\x12\x0d\x14\x10" - b"\x0b\x13\x0f\x0b\x10\x0d\x0a\x0f\x0b\x0a\x0d\x0b\x07\x0b\x0a\x07" - b"\x23\x23\x26\x22\x22\x25\x22\x20\x23\x21\x1f\x22\x20\x1e\x20\x1f" - b"\x1d\x1e\x1d\x1b\x1c\x1b\x1a\x1a\x1a\x19\x19\x18\x17\x17\x17\x16" - b"\x16\x14\x14\x14\x13\x13\x13\x10\x10\x10\x0f\x0f\x0f\x0d\x0d\x0d" - b"\x2d\x28\x20\x29\x24\x1c\x27\x22\x1a\x25\x1f\x17\x38\x2e\x1e\x31" - b"\x29\x1a\x2c\x25\x17\x26\x20\x14\x3c\x30\x14\x37\x2c\x13\x33\x28" - b"\x12\x2d\x24\x10\x28\x1f\x0f\x22\x1a\x0b\x1b\x14\x0a\x13\x0f\x07" - b"\x31\x1a\x16\x30\x17\x13\x2e\x16\x10\x2c\x14\x0d\x2a\x12\x0b\x27" - b"\x0f\x0a\x25\x0f\x07\x21\x0d\x01\x1e\x0b\x01\x1c\x0b\x01\x1a\x0b" - b"\x01\x18\x0a\x01\x16\x0a\x01\x13\x0a\x01\x10\x07\x01\x0d\x07\x01" - b"\x29\x23\x1e\x27\x21\x1c\x26\x20\x1b\x25\x1f\x1a\x23\x1d\x19\x21" - b"\x1c\x18\x20\x1b\x17\x1e\x19\x16\x1c\x18\x14\x1b\x17\x13\x19\x14" - b"\x10\x17\x13\x0f\x14\x10\x0d\x12\x0f\x0b\x0f\x0b\x0a\x0b\x0a\x07" - b"\x26\x1a\x0f\x23\x19\x0f\x20\x17\x0f\x1c\x16\x0f\x19\x13\x0d\x14" - b"\x10\x0b\x10\x0d\x0a\x0b\x0a\x07\x33\x22\x1f\x35\x29\x26\x37\x2f" - b"\x2d\x39\x35\x34\x37\x39\x3a\x33\x37\x39\x30\x34\x36\x2b\x31\x34" - b"\x27\x2e\x31\x22\x2b\x2f\x1d\x28\x2c\x17\x25\x2a\x0f\x20\x26\x0d" - b"\x1e\x25\x0b\x1c\x22\x0a\x1b\x20\x07\x19\x1e\x07\x17\x1b\x07\x14" - b"\x18\x01\x12\x16\x01\x0f\x12\x01\x0b\x0d\x01\x07\x0a\x01\x01\x01" - b"\x2c\x21\x21\x2a\x1f\x1f\x29\x1d\x1d\x27\x1c\x1c\x26\x1a\x1a\x24" - b"\x18\x18\x22\x17\x17\x21\x16\x16\x1e\x13\x13\x1b\x12\x12\x18\x10" - b"\x10\x16\x0d\x0d\x12\x0b\x0b\x0d\x0a\x0a\x0a\x07\x07\x01\x01\x01" - b"\x2e\x30\x29\x2d\x2e\x27\x2b\x2c\x26\x2a\x2a\x24\x28\x29\x23\x27" - b"\x27\x21\x26\x26\x1f\x24\x24\x1d\x22\x22\x1c\x1f\x1f\x1a\x1c\x1c" - b"\x18\x19\x19\x16\x17\x17\x13\x13\x13\x10\x0f\x0f\x0d\x0b\x0b\x0a" - b"\x30\x1e\x1b\x2d\x1c\x19\x2c\x1a\x17\x2a\x19\x14\x28\x17\x13\x26" - b"\x16\x10\x24\x13\x0f\x21\x12\x0d\x1f\x10\x0b\x1c\x0f\x0a\x19\x0d" - b"\x0a\x16\x0b\x07\x12\x0a\x07\x0f\x07\x01\x0a\x01\x01\x01\x01\x01" - b"\x28\x29\x38\x26\x27\x36\x25\x26\x34\x24\x24\x31\x22\x22\x2f\x20" - b"\x21\x2d\x1e\x1f\x2a\x1d\x1d\x27\x1b\x1b\x25\x19\x19\x21\x17\x17" - b"\x1e\x14\x14\x1b\x13\x12\x17\x10\x0f\x13\x0d\x0b\x0f\x0a\x07\x07" - b"\x2f\x32\x29\x2d\x30\x26\x2b\x2e\x24\x29\x2c\x21\x27\x2a\x1e\x25" - b"\x28\x1c\x23\x26\x1a\x21\x25\x18\x1e\x22\x14\x1b\x1f\x10\x19\x1c" - b"\x0d\x17\x1a\x0a\x13\x17\x07\x10\x13\x01\x0d\x0f\x01\x0a\x0b\x01" - b"\x01\x3f\x01\x13\x3c\x0b\x1b\x39\x10\x20\x35\x14\x23\x31\x17\x23" - b"\x2d\x18\x23\x29\x18\x3f\x3f\x3f\x3f\x3f\x39\x3f\x3f\x31\x3f\x3f" - b"\x2a\x3f\x3f\x20\x3f\x3f\x14\x3f\x3c\x12\x3f\x39\x0f\x3f\x35\x0b" - b"\x3f\x32\x07\x3f\x2d\x01\x3d\x2a\x01\x3b\x26\x01\x39\x21\x01\x37" - b"\x1d\x01\x34\x1a\x01\x32\x16\x01\x2f\x12\x01\x2d\x0f\x01\x2a\x0b" - b"\x01\x27\x07\x01\x23\x01\x01\x1d\x01\x01\x17\x01\x01\x10\x01\x01" - b"\x3d\x01\x01\x19\x19\x3f\x3f\x01\x01\x01\x01\x3f\x16\x16\x13\x10" - b"\x10\x0f\x0d\x0d\x0b\x3c\x2e\x2a\x36\x27\x20\x30\x21\x18\x29\x1b" - b"\x10\x3c\x39\x37\x37\x32\x2f\x31\x2c\x28\x2b\x26\x21\x30\x22\x20" -) diff --git a/PIL/WebPImagePlugin.py b/PIL/WebPImagePlugin.py deleted file mode 100644 index 2e9746f..0000000 --- a/PIL/WebPImagePlugin.py +++ /dev/null @@ -1,351 +0,0 @@ -from io import BytesIO - -from . import Image, ImageFile - -try: - from . import _webp - - SUPPORTED = True -except ImportError: - SUPPORTED = False - - -_VALID_WEBP_MODES = {"RGBX": True, "RGBA": True, "RGB": True} - -_VALID_WEBP_LEGACY_MODES = {"RGB": True, "RGBA": True} - -_VP8_MODES_BY_IDENTIFIER = { - b"VP8 ": "RGB", - b"VP8X": "RGBA", - b"VP8L": "RGBA", # lossless -} - - -def _accept(prefix): - is_riff_file_format = prefix[:4] == b"RIFF" - is_webp_file = prefix[8:12] == b"WEBP" - is_valid_vp8_mode = prefix[12:16] in _VP8_MODES_BY_IDENTIFIER - - if is_riff_file_format and is_webp_file and is_valid_vp8_mode: - if not SUPPORTED: - return ( - "image file could not be identified because WEBP support not installed" - ) - return True - - -class WebPImageFile(ImageFile.ImageFile): - - format = "WEBP" - format_description = "WebP image" - __loaded = 0 - __logical_frame = 0 - - def _open(self): - if not _webp.HAVE_WEBPANIM: - # Legacy mode - data, width, height, self.mode, icc_profile, exif = _webp.WebPDecode( - self.fp.read() - ) - if icc_profile: - self.info["icc_profile"] = icc_profile - if exif: - self.info["exif"] = exif - self._size = width, height - self.fp = BytesIO(data) - self.tile = [("raw", (0, 0) + self.size, 0, self.mode)] - self.n_frames = 1 - self.is_animated = False - return - - # Use the newer AnimDecoder API to parse the (possibly) animated file, - # and access muxed chunks like ICC/EXIF/XMP. - self._decoder = _webp.WebPAnimDecoder(self.fp.read()) - - # Get info from decoder - width, height, loop_count, bgcolor, frame_count, mode = self._decoder.get_info() - self._size = width, height - self.info["loop"] = loop_count - bg_a, bg_r, bg_g, bg_b = ( - (bgcolor >> 24) & 0xFF, - (bgcolor >> 16) & 0xFF, - (bgcolor >> 8) & 0xFF, - bgcolor & 0xFF, - ) - self.info["background"] = (bg_r, bg_g, bg_b, bg_a) - self.n_frames = frame_count - self.is_animated = self.n_frames > 1 - self.mode = "RGB" if mode == "RGBX" else mode - self.rawmode = mode - self.tile = [] - - # Attempt to read ICC / EXIF / XMP chunks from file - icc_profile = self._decoder.get_chunk("ICCP") - exif = self._decoder.get_chunk("EXIF") - xmp = self._decoder.get_chunk("XMP ") - if icc_profile: - self.info["icc_profile"] = icc_profile - if exif: - self.info["exif"] = exif - if xmp: - self.info["xmp"] = xmp - - # Initialize seek state - self._reset(reset=False) - - def _getexif(self): - if "exif" not in self.info: - return None - return dict(self.getexif()) - - def seek(self, frame): - if not self._seek_check(frame): - return - - # Set logical frame to requested position - self.__logical_frame = frame - - def _reset(self, reset=True): - if reset: - self._decoder.reset() - self.__physical_frame = 0 - self.__loaded = -1 - self.__timestamp = 0 - - def _get_next(self): - # Get next frame - ret = self._decoder.get_next() - self.__physical_frame += 1 - - # Check if an error occurred - if ret is None: - self._reset() # Reset just to be safe - self.seek(0) - raise EOFError("failed to decode next frame in WebP file") - - # Compute duration - data, timestamp = ret - duration = timestamp - self.__timestamp - self.__timestamp = timestamp - - # libwebp gives frame end, adjust to start of frame - timestamp -= duration - return data, timestamp, duration - - def _seek(self, frame): - if self.__physical_frame == frame: - return # Nothing to do - if frame < self.__physical_frame: - self._reset() # Rewind to beginning - while self.__physical_frame < frame: - self._get_next() # Advance to the requested frame - - def load(self): - if _webp.HAVE_WEBPANIM: - if self.__loaded != self.__logical_frame: - self._seek(self.__logical_frame) - - # We need to load the image data for this frame - data, timestamp, duration = self._get_next() - self.info["timestamp"] = timestamp - self.info["duration"] = duration - self.__loaded = self.__logical_frame - - # Set tile - if self.fp and self._exclusive_fp: - self.fp.close() - self.fp = BytesIO(data) - self.tile = [("raw", (0, 0) + self.size, 0, self.rawmode)] - - return super().load() - - def tell(self): - if not _webp.HAVE_WEBPANIM: - return super().tell() - - return self.__logical_frame - - -def _save_all(im, fp, filename): - encoderinfo = im.encoderinfo.copy() - append_images = list(encoderinfo.get("append_images", [])) - - # If total frame count is 1, then save using the legacy API, which - # will preserve non-alpha modes - total = 0 - for ims in [im] + append_images: - total += getattr(ims, "n_frames", 1) - if total == 1: - _save(im, fp, filename) - return - - background = (0, 0, 0, 0) - if "background" in encoderinfo: - background = encoderinfo["background"] - elif "background" in im.info: - background = im.info["background"] - if isinstance(background, int): - # GifImagePlugin stores a global color table index in - # info["background"]. So it must be converted to an RGBA value - palette = im.getpalette() - if palette: - r, g, b = palette[background * 3 : (background + 1) * 3] - background = (r, g, b, 0) - - duration = im.encoderinfo.get("duration", 0) - loop = im.encoderinfo.get("loop", 0) - minimize_size = im.encoderinfo.get("minimize_size", False) - kmin = im.encoderinfo.get("kmin", None) - kmax = im.encoderinfo.get("kmax", None) - allow_mixed = im.encoderinfo.get("allow_mixed", False) - verbose = False - lossless = im.encoderinfo.get("lossless", False) - quality = im.encoderinfo.get("quality", 80) - method = im.encoderinfo.get("method", 0) - icc_profile = im.encoderinfo.get("icc_profile", "") - exif = im.encoderinfo.get("exif", "") - if isinstance(exif, Image.Exif): - exif = exif.tobytes() - xmp = im.encoderinfo.get("xmp", "") - if allow_mixed: - lossless = False - - # Sensible keyframe defaults are from gif2webp.c script - if kmin is None: - kmin = 9 if lossless else 3 - if kmax is None: - kmax = 17 if lossless else 5 - - # Validate background color - if ( - not isinstance(background, (list, tuple)) - or len(background) != 4 - or not all(v >= 0 and v < 256 for v in background) - ): - raise OSError( - "Background color is not an RGBA tuple clamped to (0-255): %s" - % str(background) - ) - - # Convert to packed uint - bg_r, bg_g, bg_b, bg_a = background - background = (bg_a << 24) | (bg_r << 16) | (bg_g << 8) | (bg_b << 0) - - # Setup the WebP animation encoder - enc = _webp.WebPAnimEncoder( - im.size[0], - im.size[1], - background, - loop, - minimize_size, - kmin, - kmax, - allow_mixed, - verbose, - ) - - # Add each frame - frame_idx = 0 - timestamp = 0 - cur_idx = im.tell() - try: - for ims in [im] + append_images: - # Get # of frames in this image - nfr = getattr(ims, "n_frames", 1) - - for idx in range(nfr): - ims.seek(idx) - ims.load() - - # Make sure image mode is supported - frame = ims - rawmode = ims.mode - if ims.mode not in _VALID_WEBP_MODES: - alpha = ( - "A" in ims.mode - or "a" in ims.mode - or (ims.mode == "P" and "A" in ims.im.getpalettemode()) - ) - rawmode = "RGBA" if alpha else "RGB" - frame = ims.convert(rawmode) - - if rawmode == "RGB": - # For faster conversion, use RGBX - rawmode = "RGBX" - - # Append the frame to the animation encoder - enc.add( - frame.tobytes("raw", rawmode), - timestamp, - frame.size[0], - frame.size[1], - rawmode, - lossless, - quality, - method, - ) - - # Update timestamp and frame index - if isinstance(duration, (list, tuple)): - timestamp += duration[frame_idx] - else: - timestamp += duration - frame_idx += 1 - - finally: - im.seek(cur_idx) - - # Force encoder to flush frames - enc.add(None, timestamp, 0, 0, "", lossless, quality, 0) - - # Get the final output from the encoder - data = enc.assemble(icc_profile, exif, xmp) - if data is None: - raise OSError("cannot write file as WebP (encoder returned None)") - - fp.write(data) - - -def _save(im, fp, filename): - lossless = im.encoderinfo.get("lossless", False) - quality = im.encoderinfo.get("quality", 80) - icc_profile = im.encoderinfo.get("icc_profile", "") - exif = im.encoderinfo.get("exif", "") - if isinstance(exif, Image.Exif): - exif = exif.tobytes() - xmp = im.encoderinfo.get("xmp", "") - method = im.encoderinfo.get("method", 0) - - if im.mode not in _VALID_WEBP_LEGACY_MODES: - alpha = ( - "A" in im.mode - or "a" in im.mode - or (im.mode == "P" and "A" in im.im.getpalettemode()) - ) - im = im.convert("RGBA" if alpha else "RGB") - - data = _webp.WebPEncode( - im.tobytes(), - im.size[0], - im.size[1], - lossless, - float(quality), - im.mode, - icc_profile, - method, - exif, - xmp, - ) - if data is None: - raise OSError("cannot write file as WebP (encoder returned None)") - - fp.write(data) - - -Image.register_open(WebPImageFile.format, WebPImageFile, _accept) -if SUPPORTED: - Image.register_save(WebPImageFile.format, _save) - if _webp.HAVE_WEBPANIM: - Image.register_save_all(WebPImageFile.format, _save_all) - Image.register_extension(WebPImageFile.format, ".webp") - Image.register_mime(WebPImageFile.format, "image/webp") diff --git a/PIL/WmfImagePlugin.py b/PIL/WmfImagePlugin.py deleted file mode 100644 index 87847a1..0000000 --- a/PIL/WmfImagePlugin.py +++ /dev/null @@ -1,178 +0,0 @@ -# -# The Python Imaging Library -# $Id$ -# -# WMF stub codec -# -# history: -# 1996-12-14 fl Created -# 2004-02-22 fl Turned into a stub driver -# 2004-02-23 fl Added EMF support -# -# Copyright (c) Secret Labs AB 1997-2004. All rights reserved. -# Copyright (c) Fredrik Lundh 1996. -# -# See the README file for information on usage and redistribution. -# -# WMF/EMF reference documentation: -# https://winprotocoldoc.blob.core.windows.net/productionwindowsarchives/MS-WMF/[MS-WMF].pdf -# http://wvware.sourceforge.net/caolan/index.html -# http://wvware.sourceforge.net/caolan/ora-wmf.html - -from . import Image, ImageFile -from ._binary import i16le as word -from ._binary import i32le as dword -from ._binary import si16le as short -from ._binary import si32le as _long - -_handler = None - - -def register_handler(handler): - """ - Install application-specific WMF image handler. - - :param handler: Handler object. - """ - global _handler - _handler = handler - - -if hasattr(Image.core, "drawwmf"): - # install default handler (windows only) - - class WmfHandler: - def open(self, im): - im.mode = "RGB" - self.bbox = im.info["wmf_bbox"] - - def load(self, im): - im.fp.seek(0) # rewind - return Image.frombytes( - "RGB", - im.size, - Image.core.drawwmf(im.fp.read(), im.size, self.bbox), - "raw", - "BGR", - (im.size[0] * 3 + 3) & -4, - -1, - ) - - register_handler(WmfHandler()) - -# -# -------------------------------------------------------------------- -# Read WMF file - - -def _accept(prefix): - return ( - prefix[:6] == b"\xd7\xcd\xc6\x9a\x00\x00" or prefix[:4] == b"\x01\x00\x00\x00" - ) - - -## -# Image plugin for Windows metafiles. - - -class WmfStubImageFile(ImageFile.StubImageFile): - - format = "WMF" - format_description = "Windows Metafile" - - def _open(self): - self._inch = None - - # check placable header - s = self.fp.read(80) - - if s[:6] == b"\xd7\xcd\xc6\x9a\x00\x00": - - # placeable windows metafile - - # get units per inch - self._inch = word(s, 14) - - # get bounding box - x0 = short(s, 6) - y0 = short(s, 8) - x1 = short(s, 10) - y1 = short(s, 12) - - # normalize size to 72 dots per inch - self.info["dpi"] = 72 - size = ( - (x1 - x0) * self.info["dpi"] // self._inch, - (y1 - y0) * self.info["dpi"] // self._inch, - ) - - self.info["wmf_bbox"] = x0, y0, x1, y1 - - # sanity check (standard metafile header) - if s[22:26] != b"\x01\x00\t\x00": - raise SyntaxError("Unsupported WMF file format") - - elif dword(s) == 1 and s[40:44] == b" EMF": - # enhanced metafile - - # get bounding box - x0 = _long(s, 8) - y0 = _long(s, 12) - x1 = _long(s, 16) - y1 = _long(s, 20) - - # get frame (in 0.01 millimeter units) - frame = _long(s, 24), _long(s, 28), _long(s, 32), _long(s, 36) - - size = x1 - x0, y1 - y0 - - # calculate dots per inch from bbox and frame - xdpi = int(2540.0 * (x1 - y0) / (frame[2] - frame[0]) + 0.5) - ydpi = int(2540.0 * (y1 - y0) / (frame[3] - frame[1]) + 0.5) - - self.info["wmf_bbox"] = x0, y0, x1, y1 - - if xdpi == ydpi: - self.info["dpi"] = xdpi - else: - self.info["dpi"] = xdpi, ydpi - - else: - raise SyntaxError("Unsupported file format") - - self.mode = "RGB" - self._size = size - - loader = self._load() - if loader: - loader.open(self) - - def _load(self): - return _handler - - def load(self, dpi=None): - if dpi is not None and self._inch is not None: - self.info["dpi"] = int(dpi + 0.5) - x0, y0, x1, y1 = self.info["wmf_bbox"] - self._size = ( - (x1 - x0) * self.info["dpi"] // self._inch, - (y1 - y0) * self.info["dpi"] // self._inch, - ) - super().load() - - -def _save(im, fp, filename): - if _handler is None or not hasattr(_handler, "save"): - raise OSError("WMF save handler not installed") - _handler.save(im, fp, filename) - - -# -# -------------------------------------------------------------------- -# Registry stuff - - -Image.register_open(WmfStubImageFile.format, WmfStubImageFile, _accept) -Image.register_save(WmfStubImageFile.format, _save) - -Image.register_extensions(WmfStubImageFile.format, [".wmf", ".emf"]) diff --git a/PIL/XVThumbImagePlugin.py b/PIL/XVThumbImagePlugin.py deleted file mode 100644 index 4efedb7..0000000 --- a/PIL/XVThumbImagePlugin.py +++ /dev/null @@ -1,78 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# XV Thumbnail file handler by Charles E. "Gene" Cash -# (gcash@magicnet.net) -# -# see xvcolor.c and xvbrowse.c in the sources to John Bradley's XV, -# available from ftp://ftp.cis.upenn.edu/pub/xv/ -# -# history: -# 98-08-15 cec created (b/w only) -# 98-12-09 cec added color palette -# 98-12-28 fl added to PIL (with only a few very minor modifications) -# -# To do: -# FIXME: make save work (this requires quantization support) -# - -from . import Image, ImageFile, ImagePalette -from ._binary import o8 - -_MAGIC = b"P7 332" - -# standard color palette for thumbnails (RGB332) -PALETTE = b"" -for r in range(8): - for g in range(8): - for b in range(4): - PALETTE = PALETTE + ( - o8((r * 255) // 7) + o8((g * 255) // 7) + o8((b * 255) // 3) - ) - - -def _accept(prefix): - return prefix[:6] == _MAGIC - - -## -# Image plugin for XV thumbnail images. - - -class XVThumbImageFile(ImageFile.ImageFile): - - format = "XVThumb" - format_description = "XV thumbnail image" - - def _open(self): - - # check magic - if not _accept(self.fp.read(6)): - raise SyntaxError("not an XV thumbnail file") - - # Skip to beginning of next line - self.fp.readline() - - # skip info comments - while True: - s = self.fp.readline() - if not s: - raise SyntaxError("Unexpected EOF reading XV thumbnail file") - if s[0] != 35: # ie. when not a comment: '#' - break - - # parse header line (already read) - s = s.strip().split() - - self.mode = "P" - self._size = int(s[0]), int(s[1]) - - self.palette = ImagePalette.raw("RGB", PALETTE) - - self.tile = [("raw", (0, 0) + self.size, self.fp.tell(), (self.mode, 0, 1))] - - -# -------------------------------------------------------------------- - -Image.register_open(XVThumbImageFile.format, XVThumbImageFile, _accept) diff --git a/PIL/XbmImagePlugin.py b/PIL/XbmImagePlugin.py deleted file mode 100644 index 644cfb3..0000000 --- a/PIL/XbmImagePlugin.py +++ /dev/null @@ -1,94 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# XBM File handling -# -# History: -# 1995-09-08 fl Created -# 1996-11-01 fl Added save support -# 1997-07-07 fl Made header parser more tolerant -# 1997-07-22 fl Fixed yet another parser bug -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.4) -# 2001-05-13 fl Added hotspot handling (based on code from Bernhard Herzog) -# 2004-02-24 fl Allow some whitespace before first #define -# -# Copyright (c) 1997-2004 by Secret Labs AB -# Copyright (c) 1996-1997 by Fredrik Lundh -# -# See the README file for information on usage and redistribution. -# - -import re - -from . import Image, ImageFile - -# XBM header -xbm_head = re.compile( - br"\s*#define[ \t]+.*_width[ \t]+(?P[0-9]+)[\r\n]+" - b"#define[ \t]+.*_height[ \t]+(?P[0-9]+)[\r\n]+" - b"(?P" - b"#define[ \t]+[^_]*_x_hot[ \t]+(?P[0-9]+)[\r\n]+" - b"#define[ \t]+[^_]*_y_hot[ \t]+(?P[0-9]+)[\r\n]+" - b")?" - b"[\\000-\\377]*_bits\\[\\]" -) - - -def _accept(prefix): - return prefix.lstrip()[:7] == b"#define" - - -## -# Image plugin for X11 bitmaps. - - -class XbmImageFile(ImageFile.ImageFile): - - format = "XBM" - format_description = "X11 Bitmap" - - def _open(self): - - m = xbm_head.match(self.fp.read(512)) - - if m: - - xsize = int(m.group("width")) - ysize = int(m.group("height")) - - if m.group("hotspot"): - self.info["hotspot"] = (int(m.group("xhot")), int(m.group("yhot"))) - - self.mode = "1" - self._size = xsize, ysize - - self.tile = [("xbm", (0, 0) + self.size, m.end(), None)] - - -def _save(im, fp, filename): - - if im.mode != "1": - raise OSError(f"cannot write mode {im.mode} as XBM") - - fp.write(f"#define im_width {im.size[0]}\n".encode("ascii")) - fp.write(f"#define im_height {im.size[1]}\n".encode("ascii")) - - hotspot = im.encoderinfo.get("hotspot") - if hotspot: - fp.write(f"#define im_x_hot {hotspot[0]}\n".encode("ascii")) - fp.write(f"#define im_y_hot {hotspot[1]}\n".encode("ascii")) - - fp.write(b"static char im_bits[] = {\n") - - ImageFile._save(im, fp, [("xbm", (0, 0) + im.size, 0, None)]) - - fp.write(b"};\n") - - -Image.register_open(XbmImageFile.format, XbmImageFile, _accept) -Image.register_save(XbmImageFile.format, _save) - -Image.register_extension(XbmImageFile.format, ".xbm") - -Image.register_mime(XbmImageFile.format, "image/xbm") diff --git a/PIL/XpmImagePlugin.py b/PIL/XpmImagePlugin.py deleted file mode 100644 index ebd65ba..0000000 --- a/PIL/XpmImagePlugin.py +++ /dev/null @@ -1,130 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# XPM File handling -# -# History: -# 1996-12-29 fl Created -# 2001-02-17 fl Use 're' instead of 'regex' (Python 2.1) (0.7) -# -# Copyright (c) Secret Labs AB 1997-2001. -# Copyright (c) Fredrik Lundh 1996-2001. -# -# See the README file for information on usage and redistribution. -# - - -import re - -from . import Image, ImageFile, ImagePalette -from ._binary import o8 - -# XPM header -xpm_head = re.compile(b'"([0-9]*) ([0-9]*) ([0-9]*) ([0-9]*)') - - -def _accept(prefix): - return prefix[:9] == b"/* XPM */" - - -## -# Image plugin for X11 pixel maps. - - -class XpmImageFile(ImageFile.ImageFile): - - format = "XPM" - format_description = "X11 Pixel Map" - - def _open(self): - - if not _accept(self.fp.read(9)): - raise SyntaxError("not an XPM file") - - # skip forward to next string - while True: - s = self.fp.readline() - if not s: - raise SyntaxError("broken XPM file") - m = xpm_head.match(s) - if m: - break - - self._size = int(m.group(1)), int(m.group(2)) - - pal = int(m.group(3)) - bpp = int(m.group(4)) - - if pal > 256 or bpp != 1: - raise ValueError("cannot read this XPM file") - - # - # load palette description - - palette = [b"\0\0\0"] * 256 - - for i in range(pal): - - s = self.fp.readline() - if s[-2:] == b"\r\n": - s = s[:-2] - elif s[-1:] in b"\r\n": - s = s[:-1] - - c = s[1] - s = s[2:-2].split() - - for i in range(0, len(s), 2): - - if s[i] == b"c": - - # process colour key - rgb = s[i + 1] - if rgb == b"None": - self.info["transparency"] = c - elif rgb[0:1] == b"#": - # FIXME: handle colour names (see ImagePalette.py) - rgb = int(rgb[1:], 16) - palette[c] = ( - o8((rgb >> 16) & 255) + o8((rgb >> 8) & 255) + o8(rgb & 255) - ) - else: - # unknown colour - raise ValueError("cannot read this XPM file") - break - - else: - - # missing colour key - raise ValueError("cannot read this XPM file") - - self.mode = "P" - self.palette = ImagePalette.raw("RGB", b"".join(palette)) - - self.tile = [("raw", (0, 0) + self.size, self.fp.tell(), ("P", 0, 1))] - - def load_read(self, bytes): - - # - # load all image data in one chunk - - xsize, ysize = self.size - - s = [None] * ysize - - for i in range(ysize): - s[i] = self.fp.readline()[1 : xsize + 1].ljust(xsize) - - return b"".join(s) - - -# -# Registry - - -Image.register_open(XpmImageFile.format, XpmImageFile, _accept) - -Image.register_extension(XpmImageFile.format, ".xpm") - -Image.register_mime(XpmImageFile.format, "image/xpm") diff --git a/PIL/__init__.py b/PIL/__init__.py deleted file mode 100644 index 890ae44..0000000 --- a/PIL/__init__.py +++ /dev/null @@ -1,139 +0,0 @@ -"""Pillow (Fork of the Python Imaging Library) - -Pillow is the friendly PIL fork by Alex Clark and Contributors. - https://github.com/python-pillow/Pillow/ - -Pillow is forked from PIL 1.1.7. - -PIL is the Python Imaging Library by Fredrik Lundh and Contributors. -Copyright (c) 1999 by Secret Labs AB. - -Use PIL.__version__ for this Pillow version. - -;-) -""" - -import sys -import warnings - -from . import _version - -# VERSION was removed in Pillow 6.0.0. -__version__ = _version.__version__ - - -# PILLOW_VERSION is deprecated and will be removed in a future release. -# Use __version__ instead. -def _raise_version_warning(): - warnings.warn( - "PILLOW_VERSION is deprecated and will be removed in Pillow 9 (2022-01-02). " - "Use __version__ instead.", - DeprecationWarning, - stacklevel=3, - ) - - -if sys.version_info >= (3, 7): - - def __getattr__(name): - if name == "PILLOW_VERSION": - _raise_version_warning() - return __version__ - raise AttributeError(f"module '{__name__}' has no attribute '{name}'") - - -else: - - class _Deprecated_Version(str): - def __str__(self): - _raise_version_warning() - return super().__str__() - - def __getitem__(self, key): - _raise_version_warning() - return super().__getitem__(key) - - def __eq__(self, other): - _raise_version_warning() - return super().__eq__(other) - - def __ne__(self, other): - _raise_version_warning() - return super().__ne__(other) - - def __gt__(self, other): - _raise_version_warning() - return super().__gt__(other) - - def __lt__(self, other): - _raise_version_warning() - return super().__lt__(other) - - def __ge__(self, other): - _raise_version_warning() - return super().__gt__(other) - - def __le__(self, other): - _raise_version_warning() - return super().__lt__(other) - - PILLOW_VERSION = _Deprecated_Version(__version__) - -del _version - - -_plugins = [ - "BlpImagePlugin", - "BmpImagePlugin", - "BufrStubImagePlugin", - "CurImagePlugin", - "DcxImagePlugin", - "DdsImagePlugin", - "EpsImagePlugin", - "FitsStubImagePlugin", - "FliImagePlugin", - "FpxImagePlugin", - "FtexImagePlugin", - "GbrImagePlugin", - "GifImagePlugin", - "GribStubImagePlugin", - "Hdf5StubImagePlugin", - "IcnsImagePlugin", - "IcoImagePlugin", - "ImImagePlugin", - "ImtImagePlugin", - "IptcImagePlugin", - "JpegImagePlugin", - "Jpeg2KImagePlugin", - "McIdasImagePlugin", - "MicImagePlugin", - "MpegImagePlugin", - "MpoImagePlugin", - "MspImagePlugin", - "PalmImagePlugin", - "PcdImagePlugin", - "PcxImagePlugin", - "PdfImagePlugin", - "PixarImagePlugin", - "PngImagePlugin", - "PpmImagePlugin", - "PsdImagePlugin", - "SgiImagePlugin", - "SpiderImagePlugin", - "SunImagePlugin", - "TgaImagePlugin", - "TiffImagePlugin", - "WebPImagePlugin", - "WmfImagePlugin", - "XbmImagePlugin", - "XpmImagePlugin", - "XVThumbImagePlugin", -] - - -class UnidentifiedImageError(OSError): - """ - Raised in :py:meth:`PIL.Image.open` if an image cannot be opened and identified. - """ - - pass diff --git a/PIL/__main__.py b/PIL/__main__.py deleted file mode 100644 index a05323f..0000000 --- a/PIL/__main__.py +++ /dev/null @@ -1,3 +0,0 @@ -from .features import pilinfo - -pilinfo() diff --git a/PIL/__pycache__/BdfFontFile.cpython-37.pyc b/PIL/__pycache__/BdfFontFile.cpython-37.pyc deleted file mode 100644 index dbc37e5f7dfa52a39325d97ff3775ffe67ae14b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2485 zcmb7F&u<$=6rP#=;q}^1lQgtYpzMWGR}e_m3n;2+;-t0I#Ky5mSp}K(&N|san~kRomfBu)q+`^dk5IQB2#I9EJ#o3-j7@NTs2a#KWuNMIsPV4GV}7{vp} z^|-CBdqGfDByCE%CF#10nPHm)F+kQq;vc{|ypfVInUIX8G+yLnhoqFl9)8VUA)FmD z!J6cV?V=UzXdTlD88fa-XvTb!DZ}=Q2;#GRwwlk@V0O0&Gsg!kgwA5p%krqoNExb%pJvFWp z?DbT>z!#uj=&3y=E03-vg|WdGa|=r~ewi;$w5+mA!W$|{iihTRRD4MZKHzE2JSQxx zd_qF@h@>njL554OKyGO{t@Ko=x|g=kig-Y%cG~w^?ez!uT2gaj*Z0qK96_~KZ*Sde zKEtE61nRTDp`9ThVpJR3HJtYhKFRX}V9-%Pc0l4KQ2Qh$pO!P4z(JkT@7WO~@C&I@ zsrX?6#mtu9lXM^!z%^HYIqM(nLE-HSr*C1A$9rpm7jjPk7>+~kU^zZF-CllwWiMBQ zQE~tS5B=_5>?htkP^gE1jd-tFfB5bi@69l?JQ)3Dt_A=yH|h`W=7ow$>*VCMF7I{R z14k^c29fIo@m=_sIoitF+N1xs%zQmnDi$Gpm5Ix^MBI`Wixn?n_X?;QNIcEM)@!@< zTKmBnn24k+QaSL3(%9HuZ`A7B_p4=T2+!ex9|8d&R}7@iJvZW>RC|8NrS1#{uwznv z9Qh%*3<5t93Iwx@JrVW0qr{7)`LPomdmBPTLMoy6#Wc$~NqdsUlKEU}1Au=lsc-Au zoSGyZN;;A>kd)hu4?#w@+U-U|@bCX?RnnO4=3BV54{$MzQG=@R%u}6SQB;ckCD0~) z`$F#uHQ9A~jokwOYjmDnVPY9(yBK2Da5>mw3zSD}fGMOyZRH!%1A^wt6T?=&fl{%e1$ zoX0e7OepXe#80&smQ|QBv+&}fF7D(J%n9YCLjpZ@tp8V}oX76$lHtcm0U?>`sUH6h z|JQ-LfVuXRtcWa?m3b*OR9NyM1(qR+k&?&7Qwp)4hAMF3)3k_8mX>=ej-&=K>r>!I zz<#y7eTG{Wqskd(v$5T_ZZEH#EQL{GIo9WJQ}O9mBgWAW_@votG&fr9`o@kxOU^n1 z?-T*oGGHj@o%P1n*2Z=_XRq}}^OIKn{)2XmAbJ?>`+!?K-I^D>fD9xHaTVv90EFX# zC#2Eo_@SS4I^tEZ%hJv$Oq^j31aTcK;&oJSpu(z?3b2o@?FXa5LA4^)*b91+^#k{{&L@!~J|;^H~=-7)TcJ9CV>lu>6;qXtQ?Y7o&G%__3X-oFXvMf=*RAgE!%aL~?XWV43_U=ajCkV6m{Iph!+xdd1&f<6Sn1~9@L0%UVp>?Qf$ z>-i%sIa(mckm%R-Uj25}dtbeJHA^ESrh>oozyF_A?Hxt=S7Lg9NhB`f@qP{>l!_u$ zp*7Tsinrd-ntDZ76=8@(!)PWdiDt5r1g}<7!lS42Tfe4&U5r|?9tOn@(nN$`_Sax)1@5t1n}4aqbl zlaNe7G9zXonRTYXPlG=qj)FhR{EU;>opp+vN1URV6EA(C>|xZ99VMA~c~4_*PQ2nw z_tTa$LusLXq?C@?|7a+Rxzwn4I<^$n2laN-Zd=z{vT6I)@$zb;T{3Svvek5~Th3a; zcGor>>-;85E;d+FUfZ}}ns*^zYq`GT`kvLQS^h@dvugE*W7*QNHXP}!?pV@kIJV~q ztL~zJW3{(d8}&6yw3;>~$1h(#T{5q2H5!)hZ2NI5js>ZOQjY66=S<7m@cp)T?$oI@ z>DYe#k+arnHe0S&ZprmiaeHxdr#cwqsfF_CQ>M9e>-GW<#+$dcsQ+fm^BX%fjC;0R zlXlIwmY0|3d8}^Bw`v%~j^%B&+b!ukqHJEGLG831{x&qX7&jNUM$NQjL(qu(?a^ls zHNX>uit(IyzT8^#w@?Ig=GDD;&TPz+EgXqKwk^M9Eu6KQydd2fbxfKU)WUSf3CpW@ zFs9~~=Uc0o&(>o{#)TiZ<}t;st@RC_Y5#G{67?n~v5pQg<0gIPhW*H)j!@NkxMerq zwazRoZZDoWYhm#o*^RoGw^q0OSbF+2Nl~rL-%_hfbQ+J(I^KPM=X8k*(c01!^6;#B z(_VMpwH$kG12eMfp(|*K*{!l+Hy+^=R$KnY&#~Bec3na3a5>ArAdk_qPI6+ythH6GcR80?XtNKOjlM) zYLr^q@f~mZ!+jNkk`^VFNf)CGzpeqD_BCYe>qJr@YgCT@=nZ64F5~e|fCK>l_W_z0 z6`@}s&H$GHmt?Lhujv5Q)XIJqHTGWtk<{vbg2?;C(zf#_3Pz^Z

Fg{6btlcmK9* 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 diff --git a/PIL/__pycache__/BmpImagePlugin.cpython-37.pyc b/PIL/__pycache__/BmpImagePlugin.cpython-37.pyc deleted file mode 100644 index 9e2b2d2f48fb863fdb389ecb28217f47bd13af0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6963 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 diff --git a/PIL/__pycache__/ContainerIO.cpython-37.pyc b/PIL/__pycache__/ContainerIO.cpython-37.pyc deleted file mode 100644 index 066cb258354fdc90b43663aed6a149fda0fb35a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2823 zcmai0&u`l{6ecBEQJf!3(zGeI4&Y%c>LN|oo;sr#)&^C1`Nyb;JiPGWRYF32f4jghLHk+T??lAp*qyr<>F5UFaZ#w5HT6P0s$cHQhPLO=) zKsrMg60OaSy`gi$Inaau?%*%G6uG?$-;5gfeWh9|>+mz`T4i0VjU2Uq3twn~kxkla zWy;jWrWqYgtDQJamPMS1?E|B-cV=`{vSW5JBOU;@7C`#Y1kG`}^;#u&TD!U1OS9ZB zw#)ruk=)Ca+N*i=?zD1`VAK^%(muqWOcTrgjaKVh8#>*gBRzsew)GIxrPAV2+D~L; z;BPr}cjfClTUPWA%q|qq;_a<0HtJR{YVJiln7#4j+3hhNtn?1@APnOqHevV~Hq0!y z1D_Ya!Q!~_sbQ1OMi0HI*>F;9ExDcbN7nfo*8#?CzYs_lmiuuQ8FR3Ve&#?hK3Evv zrBFACCiKvoV6l7rip~&8vFGS3M3Et1Vnm?i8b%$AE@PCJqkcgzgY+|&Qlvd{j)-WO z*Y=JpkUkn)VwP$is8)#0ueT)k@WGnihBljpV3Pr#LG$cBRnE5C_V#>zkLsj!Hwg)6lmZ}n z+Xcz_iM@3Of0XfmPURi-BYKz3NnNb>yW6NSprEaTbOF$Pup*wcMB0sw0X;y&fzs)6 zxg=Fqdu#L)6L-XUCYDz967dI#xOZziHh^1$@MlEJ`Sx32z;age^*lP3Vg=bOyB0|4 z(Oxyj(kti5MOrPv<|$f1tH9%n&NPSQ(-&w(%apXDAkY?NAS}QD9RSZsCqX4S#1#%$ zi?J`Hhq20`vwwZajveWr@I!a#X7vpUp1Z^lCU;1c>E;G|dGjZXf}|6JrzIZGDG-t9 zAms>eqxQ{sNIs61UWC8;GKnh?Zz)TwIj?HUC!}AAm?lVS-UzU)F`ua4Xxp&4iz~B< z%9iuy1sL;y;32DDFgc^Gn7;@V9bN^R4pKG1U2*=NIGs|WN-j`aMa!;3>;RYjYe0;h zutR6)WQ&B?F+KsP3cvJ6IPpQ_JWkzy$HerBK^|rQj~8q*`@u3!vau^2)cG8)Eg4Gj!P|QCEdwUJXN3 z!+wYQ(_#3sA9Y5Wi7=FDGYs`K`7i^KJ8_x^n`>*|g_~U z>sC`~A#!AM5P|18!F=G(UJ8Qhd@ygd0OHG2%dy#ZF?(YN_X|(Ip}eydEpYz>uPKd( diff --git a/PIL/__pycache__/CurImagePlugin.cpython-37.pyc b/PIL/__pycache__/CurImagePlugin.cpython-37.pyc deleted file mode 100644 index 8d75ad9646a50a7af2e0fc50bf5109626ca4c941..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1337 zcmYjR&1)Pt6qhubj~%aFv!u8-Jq)F7*h5|7Kp??{V7DoOu$U$#Fl-sdE6sN7`HD14 zyvyvRPNBEnd-5LpFX`G|_E>uBsqe|LYk_`xUwV4;KIUk1GbFGMfB!rA%_HPbWNwxV z#534h00<&zK}s6alEsW7&kCpHv1@4uXfO7G=E8kX;@~?XJmJ45!k6@{cj?5TWLFz9 zJnPF)1}ldW;5U&M!3zELUXfwArts8|nXRL;c~PcQc~Z=#d1YM745@MR2agJAiH8S; zoS;1}JRR7_u=O@TXCwZF?LwUA417DIHAf`^A&mS%z>C)?ndKMC2a$z;#qpEziK?e6 zEu-goA@%sEkd=@sdS1^ek+ykV-HHzOA3qpdXy)xtpm>>|j&`mPo#P+AUu?a}D^b7G5vX*nZd26*Z&+HJs=t8f$Qik!E3%}Pf+tpV$y%pl zmsEe*aslVhR5(lL;-qz3uVaE=g6tder&nzd!InHC?9 z>S$s!r=xdL$tc76uls0)l^HVi5gZnVn}%hL;jJtR!<9^ht)|&{HLu$A;#;L^Wn7h3 zQ)wLNVAFd&Z=@B+esY?(W!iw^;ep{gUr6I7c*MMg2!}lo$|5sfon>0KhH67gLvurg zq0-RW(DeTXR#;weP&cx=52XGafUwZ%(|`sJr}t=|a_Z3tcn*?#&K@1mPuOB`w}tkt zgAsIAkR(-F$|Nyil9aWW6-f7!0ng~SrhQ!fRB5ERfLqsIQ1&iyF zE*r9b(v)=>oiR$F-@?AApLwve@q+Z4=M)_Es10^U$v~o!eYu{a(b`X^Zg3~dW%m2= zACFR8iyvwa+7>kZ9tcC`WI+WT2IUd(+?iP3m z$4d6I>2E|KAb*RkM~C~W9H?Z}MW6a`6ZQzHx;y2h5Q)jk;%aDp?VB$Sofw~*W0-iB z9Ubb-$Oq#j9YQMlaDVsN=i3)K?B|m~R;-OrZH*^sD#zv{j2)98RJA~+XkLCe{urA6 z8iXV<6(sfqjhXObU$8h3z6b#FP=ule8ekW7EP-fEP zjLf@W?p)!C5MkvVp1*)GCnsbHc%ISMfaIJmsJ>^w`GWpT2QbV1>ADF7ThMLt<0r2@ z6JGCF(AR9v^v*t>;xB7+b_V=;_1Q~zD(sB}o=`UpoL@k-coVFq@P|IwtvOk?MSyz* zfh58`g`v$lMQOST#@+2BAqWJmkO=3{NUvkP{@D6TCc?pKn=eialT5!;s#E}a+3#y< zY@m{2AXN>v*f1H7p}zJOe;Xyv;hdlkB#y7%QDUU9zLs*>^HJx0 zOSPq$4J$8>PL*h)qkxy-=mD7e9tgr(G@=m;X@{;*pL%q~i)ct&@XuD?j%CelOdU&L zA8IU>E7JxT02P@-k#q;4nj@6ZPCU>IG+P3oC&8S)PY_NMLNT1>fTerAC~k60gQv$b z9jZHUq`Hmb9Tay_tfD}t3PbOC3a?wW5--hlmTvhb3~6LDp$*6^ggjU2?ADE((BT#H zuz=WHN(eUuj8%u=sPh8KdA#Y&`oQ7*dsu&Qh5qFOXK(m`cdqh*5zf9k{Q&(yqeG^g zz4Xo?ke8%**C&Pz8|op2J|#bp!aIO*c>j>K+JFB6d!16Sy(_#Z-es*Bo&~yhxve1y)f5m8{jS8c0kwh*~yk#xVXHm5BaK-xv DeXW>m diff --git a/PIL/__pycache__/DdsImagePlugin.cpython-37.pyc b/PIL/__pycache__/DdsImagePlugin.cpython-37.pyc deleted file mode 100644 index ca35a85f687f7d608eea329eae3f7b1f386cfaca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4713 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 EKfn;jaR2}S diff --git a/PIL/__pycache__/EpsImagePlugin.cpython-37.pyc b/PIL/__pycache__/EpsImagePlugin.cpython-37.pyc deleted file mode 100644 index 5d73023862efa14691ea9c4feb54744807cc7913..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7490 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 A9{>OV diff --git a/PIL/__pycache__/ExifTags.cpython-37.pyc b/PIL/__pycache__/ExifTags.cpython-37.pyc deleted file mode 100644 index f86d9c2c145e3bfde2b35a8817405524ae04369c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7606 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 E0L1)3%>V!Z diff --git a/PIL/__pycache__/FitsStubImagePlugin.cpython-37.pyc b/PIL/__pycache__/FitsStubImagePlugin.cpython-37.pyc deleted file mode 100644 index fbc3cc9d2806fe2cf6c4cc53e62389a64f1237e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1625 zcmZux&2J+$6t_K}Nt2QdpcN~@j$jW&VuRpDRiSFD4MZxTQucsGkw(+8lbv=lGuRGl zqv1lAe}Yqb$K#Bki)h; zbx@}=UEV1VqVKo6QFV4MGCj05lL0kha(fQs;8y&TNGK)wCqF)zoyux~7h%+D_M#9a z7cv@EtCHJLcB-$3-+VQ*tiIB(t8#XdpUqUR#q&DNE+9ZPI~|{VIm)$~>eZPo#c8ox zmfe}W#qbrf>G+4! zlb1FfNYJmPnCF*vxn%*^m>@~BOw{@*p0Ylv+yglS+6~kn0jX!e1c@mpG2=9LfLzYF zg8eI zBKj;Fv<;ir#?_)IZ2rcTBIRapdR6N5@}-oOG_Dfj!nn(d3*#j!U*l9%VCGh}C;U@=$aa0mThFKpW3ei#k)@-Dgh4p_ID9{ z;BKwq6Huwv(gZ(F?UTz091onBtU~mySpy}p(8(mv-fo9Ievd3V)FvbDeNMbo(ENtsdQH{{r7VeF^{o diff --git a/PIL/__pycache__/FliImagePlugin.cpython-37.pyc b/PIL/__pycache__/FliImagePlugin.cpython-37.pyc deleted file mode 100644 index bd21908d603e44a01c5557c857d980d86190f25b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3611 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 N(~4vP`ogw6?_WAC18x8S diff --git a/PIL/__pycache__/FpxImagePlugin.cpython-37.pyc b/PIL/__pycache__/FpxImagePlugin.cpython-37.pyc deleted file mode 100644 index 0823039273bdbb897aeb831cfcc43f25182df82a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3628 zcmai1-ESMm5#QbW;PLn&iKZ>fb`!RBQ!w?1F@iC?HPUqkIy1 zr1wq^McmavlmdM;f)3gS^biE&P^t#uKsdHKUt%%Zc6YmzZ-Pmgxvag@#d{%_`)72NQQrBs){N9mCGNjud4p0@_P;PR=mE{4I&w+ z#!7!Dl715QqnDx!=iXmf*JQApJjB55aAQ3Vli=*YZ*Rlx@%rkm+visXL+$<5?#^Zy zog3`tg_hrL2ZQ8oGFpHzuBJiT#2)_WRM*hr_do*XamhR(xo1e>nbMFZAY#cX!RJfv z*?kKE?u6V zKfAne@!hiv3(GgozIXBBJ7?$T7Z=eMR^Gq3Gidq zE8gt}(24ImF?ylWXs;~0W+HREi!^ww98a%7rjYFB2TKz!~wL$=5NTCu3 z-A>K}4V?*@g7)0f(=LOJ2~^AyyvC>bDN*H)7}Z|Ak8^sewymv!faw%dgjanRKLNnu zOWcKor=|F_`B!9~_ZacVp}S>ajU|g$S!O|(n_5e3j%D^H%L<8|+Oo7KGADIp37Y!`OpEfcxE$kQd+zPao>TH(n30b|y=%ye2?H)_qq?8u+_#9g&JIiR5koK+) zFC>nf(t6&?OgWA9uw;pBfi>H<`X&`A&IcQ-sd{V8da)jI1Dl4kCVYS;b5 zZ`|G33ff6yE$OSEksI@ueFJ8QOGN$~4T*Zv$v^oN*SJ@1bfdWia5(Y7#5Qn26 zH+udMZ~^OCU;!lqIat-PBDa(uAw%2#0N9eqOn0x}Sj(+sX8=%|y}krAmH(M$%&kGN znO7$;jCVFdO6~ylaji(>GB;^^^;44YFc;X1$GP3^cl#>#tjPfgmj4H=n#Jb|T09TJ zOqr-lTOPbg+n%z&d8~4@sz7Gu%NK-0_<*D zLaWX)^i#8}V@_5ecx=enR;ij9!}@tgZdCvnnnMm(PBQvdMM-MDG{sR`&)1!y`rbnI% zMSd@*M<|qAmB@kj=d}0r`7;;V%G;LuT24)TAtoL#r4^E{vPWMd@PUk0Rg#7&T|iE} zHtf|&Ky6g|B#8Un9je$3&zOH#j_PX%5!0B*ukowEM`0hI!sPL35cMVzf~b0fWE7p_ z2FPgUFw`2oFz)$D`{B3@xyE;HAUJg*$xRfnuKE!zqW~LIF_^rHgok(2#}79XUO+@*pOCo1rJxd|$jwv?iKl08s^f^E-C zP|VcNAk7WDSJYcH{x%WX$t%%tYx2^`?TI=?kEP}@ojTN6n&ljxQeDHR9#;#*(QckY zI&?C#`<+f4B)N^9Hj{@rALe}5vxbxOwma#DG~KgywPEL>ATPagJZ~;UE>@A>ZRx}W z8a)mao!l!?j%y|U2DZ~@@Enp*{`*d$RcE00F|npoO-Krqe5;fW@al`94bFmO=j{P>f2k$teQ?+jwSenfoZq&*(vK+|iI4)xM2h zs&-9#a!XWs)D(P$iJs7b&eT6v5Ym>eugSf520mY)izf4S5 z9DRL?Y(+6W_G z?J9EnBwT(@+%yqd>Qz**8OFfh9T52lPx_W%F@ diff --git a/PIL/__pycache__/FtexImagePlugin.cpython-37.pyc b/PIL/__pycache__/FtexImagePlugin.cpython-37.pyc deleted file mode 100644 index c6f9cd21b90be93fa89526dccb4b4d475ccbf9e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3482 zcmai1&2JmW72jPhKeVE3!%h>YfYYgv1Y%%Q5^WSMp$3*|$zWhhf-Tp`IQ=JD6tIr{e|p+$Pd@Zepr@Ytd$TKw4w!@jhcj>9ypP}en9-w^6-&cs z>#zTD{$1C!f6?OdQ^w>WzHx$qYqrL9ZUnlmg+MWgUX<}tbn7Rws z*={69ZUXA&@7TVVL_MI?+Su64{Uqza8ncvqA@uG)W>N20c<>#L{IWX21dOgVcD)nG z@X|PmMkI>VdTtPaNa#1&;S9)P7fK6cVFpm~;XQae7DaFO@MY8bik3wTNfRI%!(1|U zX8Kwh`{97a2~N3kwlU*{)J87p<(#B2f^{=#O=|&YDicV5Va}z>LP{@6hJ>4nf9xW! za<_6vt)UyMoqj|Knp-GSkKk@wZ-#>Mb!xrI&p6zdz&w&?AaOTwr`9XVv@1^bNA?Ce z!&rL1)gHM6-@7|oz7~?OyCR(WJQ-dshr%BWldJW}ACKIz<3(vWM=dN-RBLJhd#Z$0 zrE8Ui>4;JXrLaoTTqQ(Tm7Z0F&uXp&3xtU(g8QS(kg6gAHBUBma^8ehl1fJk9bnJ5 zRSMF^{K;t$uMCBOhr)(OU10@FK00whwbK2W<}8Qy;}lp~*$I9xy~;G5U9B!tcWeRRZ|U)1OXXmb)_HvKoAp zk+5<%C<~Hd?g#3yaK*CrqC~XWHZF}E{}_RcBw8K(4*Vnu#J!!6`!4R6F0QAb!AKs9 zBsxjcdXKAE+iU1q^$~&9-G8rx&@i%cmvm=K>WA)x*u(}Eu}4QPKL#cb@r^&nAT-?N znr+~|E^)&)d5N32oy)w;EBLMOD(>J~wz3PrXL4c!wvD@4Qn%TWGLo4Y z3vrSy@9sZ;wteVOeSw7Hx6K5JnB6KiUhZ}FpB+5kdGTWBac2FA8fI}`im}YfUJyYn zWoV;HGK0QdFB*oruIzf=Yx65DtK_S!tQwxZJl9(?lWOZ9n!E#H{}Y||(SeKx(jBSS zQhf9%pvRR&8K-znkRvlvtNDk`BQ=cAk|8#p`n@BxR&kFIL5amj2i>RZvywOn(t#f~ z$7g^j!kg_eG^*m#^pEiOv3}dAn04c}Ue`Z1>PAhk=(qJ6s5cEuKfg7TLuJ%d5@z+%SNRZkBF- JQ8RDo{|7xg1(yH- diff --git a/PIL/__pycache__/GbrImagePlugin.cpython-37.pyc b/PIL/__pycache__/GbrImagePlugin.cpython-37.pyc deleted file mode 100644 index 7b9e0241cb1e9a8e81e6f22730bc28e69e21d81f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1869 zcmZ`)OK&4Z5bo}I`jN**A+S70tL0&|1Xv^lQG}MPNE9hp(XK#f6lpYex9y2NGp1(D zCf4La7LJHB2q}@c@CW!YedQExT)9A1Cvif6vAVjdy1E`+U$-~r=IRW;^&kF-en;*% z5-vXnnFlzEFOWzk`G}=F*i%F%00BUHXcnEwzfar4LUF>20;(C zvqP?-TRI$b$Zb3yI^=zRf-z3{F+burWKnS`h78^*EomL|uX!b;J@jA`Wv3E9vY!NL zZ|t&e$o37{sVwOZdGT#!(+uCuygSlE??0pLSI(t(j9D8B_?2>bjvcw#8gg~wu5v%} zDo-|s7HHht{C7@hY0J6wi)t(P6i-&peV-yRs$O7PK(}H+n{2p8;=jOGCueO zAO~$HSufXinoFgfs7R&?2+QH^NGkMz7p|bHqE4Q6qV7O-huS79U61gB#b!sVhB`Is zg^dCFS74OdyEqW-JV|6Z(C$Db{XrQvOx5Tfs}AQcvW)QJ_EBz{(xUUy;2F%sT=jD@ zPjxs^K33U1WQz}wFusUC-~8qU@t5+v@Od3a)2ywCWl`t8a7A6zt)?|yx_BZ)3!B@*f758E_G-Ta?N&oGQ#x2^h7V~c$znJJg0}&sc}LBTa1K;IDM|zn pwHI1w5-!bj>Y!8^;qbo_(f;~*Z6Ccr+0cLIB5zv0zqG!{{{}zj&7c4P diff --git a/PIL/__pycache__/GdImageFile.cpython-37.pyc b/PIL/__pycache__/GdImageFile.cpython-37.pyc deleted file mode 100644 index 8a673ccdcacc88598d37eb28c08d2efc24aa865b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2441 zcmb7FOHUj}5bo}oeXuMxb}TH%iPCW%&Prq>V<}QrR%8qq6X69Jk~kxzakJgKw3(fm zbkATGEjbwHPvm4D^Dpu{=9&}7Tyuz1)dLujQ%35Vo|<}eSAA9WU}~yC;JNqPU*Vex zLjJ^$)5nL+eOPuKh$I1#RI-Q;S-^%~;0^u2r^xf7%CH*L+}?+MJ(!?mnaGN)z9O=! z*mHK|1r0eV>vG~14JKt{gS49BB_*WMZu2aG=zOuo)Ynyy=X=7!%yX4q>aei~2uXHz;o-90? z?=COl$sjK7PPX;EtXuWVFE`nPFh6HM4Fp4 zvC8r!jz;aqF=T-qrqDVjiKuprWlPvJ17gVG#E3ZgUl~n*kt(ZI)Pw^Qd1M%Pv!qX@p z=-6cv^8nFui`0kD(3!%-Qw5*9X3)5K(;vpquKaGODtgpn6= z>)ie)t0h7JOU|ToQJ!p;kCL44h&}M0a7YpOaOM$i!$g*7J9oin9JqPpa^#F5K>r`a z+D&NatjbEvWc|>~s=%EXd)LVkJM_oCZ0r(~j={?F znw-2xvij=@**ukz)$62`cDt$TM7_> zEvEl@ONf38B2MOMT?mxNIKH;O#O6kTtD=5EZ7`9UTrDI~VuH(O z+qHh*sw}8xI+kkxcVcdWslUZSXKURg10#kU8Rb) ziq|k7f^&E4bL0c$VNySVWie0nst>2}nd27J^biL4VEl3PEx@wh0Rec@UC&HsL^3Rb zQ9T2|9nlSdLB@6)W|0EyDLJ@QmdTjCWIqze)40C|q@d~oItm}* zi}|)#(xg!b@G=1HG&Q&3yW67fIIX7n7(NSP5HMx6qV=K{ZtGZ>k-@HNt|GyHVrGya j^qiSF@0<);!gX=-p{}x#m!RLF|XcMaD>g|64JiC`p diff --git a/PIL/__pycache__/GifImagePlugin.cpython-37.pyc b/PIL/__pycache__/GifImagePlugin.cpython-37.pyc deleted file mode 100644 index 66ddfdc0efcdf3985ac36c1ee5548a56ff26dea8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16428 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 AHvj+t diff --git a/PIL/__pycache__/GimpGradientFile.cpython-37.pyc b/PIL/__pycache__/GimpGradientFile.cpython-37.pyc deleted file mode 100644 index c864fddaa2843ac6c0f7ab680a832847ed98e384..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3318 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 diff --git a/PIL/__pycache__/GribStubImagePlugin.cpython-37.pyc b/PIL/__pycache__/GribStubImagePlugin.cpython-37.pyc deleted file mode 100644 index 3623c68a04979e6d9f12d0e11459fa3354f653eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1639 zcmZuxOK&4Z5bo}I+OdP<3lM>Jct~K0HGV;Vs++RtGJhDDQ5Xs;9(ZTpkR#UtPqgLa?LX=#{=(t*x z+=jB9`f~W}i?L<(wSHBVC4YgWPWk37Z(l?XAkjUz(^nwmPdd&Fku0E50nPr;_O%UF5%9MRr_GOpnEfX0)MoIEoAKi zQ^*jobpVP))NP)SxnD~$$*-)rVYtNvNt$J%)=$9L1Vd#P^bBY_Fvu4`>SJJn#FUem zaT+^7E@#}qs^U;zAbsvbP=VQd1Os9lyBOIvOUw|%wORfEN<%Kmir$i+sb*G(>u>1| zRUc|_azlTicGhcP7Rt|QNaAxBc+ikl2)~M1^x+$g! z1Y_v&fNcOmlm>0XCbe<3C<>duaivJP**U*1b$a!Ul$A8D5@KfDdBuhC5|uAe6cuc9 zt6G!;2X_<`<5!c3659BRhQ2zZe6C$W5DdkCuc-6ATX z9P&-u5q#ioc0+eisn*g2-<{hhml)*0iCI3E_+3qiwS(zDNXz~ss0X{C{@< diff --git a/PIL/__pycache__/Hdf5StubImagePlugin.cpython-37.pyc b/PIL/__pycache__/Hdf5StubImagePlugin.cpython-37.pyc deleted file mode 100644 index 0d997383e2810ce5248f03c40adca921b368b682..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1625 zcmZux&u`>36tJ)E78QU5K4z$0clNAq+hOxLP|q7;)1 zXRx8h{tCJZK(r)T{9U`6C}6$!1iy=KZx`olYfd=`_p4t&+s73 zT1{V;qT)hE2lb-jHkFO*%ki@>rdBjp`mC;|uZz>EDztdoq}c@|sHVq9uRlNJ`QC|M zoLVT3%f+my#?6%(NHHsv7V<8g9mIoyAihLc9suTm!vZz{qqSH2EBg>Yzd+cX$y?lE z(fkbn>W90bEeJ~V8Y%MP(hk?cho#0((kv5=evJEUR4TW?&Y*7^`d>g-pMnr1rkuo# z)7XLTa>gB`5C<}W_P7U`_+|$$Xj3nO7`y1&l!K+X&}}(CfYFk3vZ6QSXR4XC;rJVR zP1VO5f?U&IsP%SQ@B+`AmLwi`LHaFO1+b5`Odhvv)oqDgK_HRNM0Vlq<$IG_M`?w$ ziE>EB(1Q_^$UiGap<#JrTrJAd)^A)XQf{_Rt}2~gek)}yjjM#XFz&qO!gLZcrvE8%5 z?!ntZ5H;3Hfz}d7pdNvGC$Rhge9xfY-t+&4!IUR(eL<2`>0Bg<36lgWUX*C}lH|ul zTHelhc`fIuHp8_}xKNoa8hod67vp2Vdr9EalE^yQ1MvxT%hZ6m)Mder^=3#5Y^d=Y zv-EfZh6c7@1Zt=$r$7g$b~P{$X`#sq$k5W3;RnSL3U^|GfD1`~63fSkXN2b6w-8l8 zhhqJ|2tIPxtKl0^sn*i?-=Ekkmk|UWIWa5davMw&Aa}6*du7>o1bl$wzk)Ri%OrG2 z11j;oES>S$-qIbP@qE-bMB-zTSe=b&pSWdQ+<)*|EE@KJxWD-#kT~)q*n7{1apU(l pOT?uXm4Yi!_fp&-Z-VFR%lsOzK;bVkV6GEv2kvk;=nm*M`xlltdei^_ diff --git a/PIL/__pycache__/IcnsImagePlugin.cpython-37.pyc b/PIL/__pycache__/IcnsImagePlugin.cpython-37.pyc deleted file mode 100644 index 5b927561628c18b40c8301ed3e5ad1980dbc6f02..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9269 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 E597UT4FCWD diff --git a/PIL/__pycache__/IcoImagePlugin.cpython-37.pyc b/PIL/__pycache__/IcoImagePlugin.cpython-37.pyc deleted file mode 100644 index 0b395b7908a3fbaae31744b8d06b3f3264746f62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7223 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 JFCb>|{{e}V@$>)y diff --git a/PIL/__pycache__/Image.cpython-37.pyc b/PIL/__pycache__/Image.cpython-37.pyc deleted file mode 100644 index 64dd64b2300fa606ddc60062edc759de1c29c91e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 93619 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 OJ=ED(EalU^+5Zm_tE)@^ diff --git a/PIL/__pycache__/ImageChops.cpython-37.pyc b/PIL/__pycache__/ImageChops.cpython-37.pyc deleted file mode 100644 index 88c2cc46159d572674645ad2339eb34f301d5250..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7813 zcmcgxO>Y~=8Rn9dNKuky*|Oc{bL`lTXiK!DLx2)VTU$X=0jd+kMPUd6#Np0R+-SMW z&MqZWU{e%L3l!)ND0;Gh_Rw2@L4%^l^i-fd@K*FtCr(($<)L#dJ$9&Mo4N8>x}`#a;Zs&&yD7`8+-#R^ zmj^+)^2vugyCwZzbFAo&U2C_PQ8a;W#*-)AY~Y;AV!Auy&SqhhLVkED&xWi8D{ChqNQdr2Mv!o%;B;-Ct6L{v3V$8 z!)3gV1)LA8Ba0h)9pAx;S%*cfmi*JqS?bKv>-x18)sA;8Rmix~Hvt&qLLetiEiTQ?(&NtI%@n{|CIy4eF_O4@1c&D#*%fukq( z3@B#Jzi$!_wBFQw-crQzZ)X2Z{F5MIk!1T3=~y49&#VZQe`{2>{YH~38L+S}S$N`` zr3GuO={&(UskY6@8gLU#$*`ro02ILrA{fEAkUO5^9qRFD7}q(hhhViPe=ruj4gO?R zi)VAqjK5VJ8)mf#5Yz=aEa9-Xpizz{g}pgzUJ$ig!{p0FJ>SB!0kJc+khcK(Wt>e6 z`oCTn=z^=G=fvFcrjEH`wwY5gt(JkEx&; zlUD=ZZH3Y>lle8xdd>9pYJ1&KUO2UyRMN90tIF_1!ahWMLyxD)Gajk&+6drSbxeWP zOPbZa$&Ny~(ChYi2x&4DlOoOEf>qJrJZd$iavDuPAdQk}6XpX$ze#{gZr7O)Kvkp{ zc51Bcw^*a)hECIk`HA&&WT7E3N3g03qh~b2nidCC7M@^EVE!txotmD(z*qxAoYY}F z`-d=Q03){eR*PD$F&v|$nvXjwpuB|Z|KW$vmp}M|8e4n0IH5L&pZ4%qaWdMk?W8-IvyAa=c{(;o_l4*;L~Beq z$Bu|MQ)EQo_I zZf%q{#v5RmwvL~eT%(U*paMCO$SAThJT(HDqw&#;|XY^~jv*sRYS#Xf-`X&#*$WqQAtbf+mlul3u+5BZD|=-Ac&CZ7nyn$0#Fnj z4@)Z_cmLav$QZ6CR?bhcp9Ta(9u@`0w(B&TgWGCS_TM6RYI4dO+XfCFGLdhA0kiW zvilF;?L}*e0*NU20P#i~?3wTl;YJX$IzN^StdQ)+<_)dlDS9~ZTdqJ3;|Tc>pCO(> z{;R>b)+=t`>k!in$0~X(9o)cI!=D%y(TZy8XDOFxQfR$Y; zK5l}Wb=akK6TUQfaHK~=UXG&DKqCJVIpfc_;mGD`P@ux5M3>0Qcw*FEn~$(Ozy!Wb z=&__X+Z$7$$LVJ=H$M1iQfe3n`+V_CV#kp+oieUDy$yXe3f4jltFN-yAN@xA<}^_K zM~v#@ZyVOC@4JzYRAkrRVZH0E;*_cTWHiPJbZEm9!aDt}t^mZrwAuA>4j-C>djVx#vQDOX)eA<*T zX7uAIY9u+k?hJREh-(H@cj`9QbDLJL%M3YvJ;us^v#lf&{K&aex`46i)n@HU&DmCe@QXt=;&0eL_HltKvf{=oU105&SBjFZGV66tSKCp;Y$>h&ku(>#| zRG!2SM%JeczM{Mp-7d4AU`}W+bsTM^U z1w|3GqIgU(I$Wm%xmSves3M)ONGIv-sfek=VFOK6>9Sk?ZS5kFXRhf1DLU**8l(j diff --git a/PIL/__pycache__/ImageCms.cpython-37.pyc b/PIL/__pycache__/ImageCms.cpython-37.pyc deleted file mode 100644 index ff01ffd36625c3bee3c3bd307acfd80e35d5e900..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32349 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 QG+cTK|GtBNXG^dBKXFI1IRF3v diff --git a/PIL/__pycache__/ImageColor.cpython-37.pyc b/PIL/__pycache__/ImageColor.cpython-37.pyc deleted file mode 100644 index fd114c3d1ca807285760d48a258f4636226fea5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6408 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 diff --git a/PIL/__pycache__/ImageDraw.cpython-37.pyc b/PIL/__pycache__/ImageDraw.cpython-37.pyc deleted file mode 100644 index 735665fa386e970b8562cfec45b4003b14febc1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20161 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 bj#oy189zM2|F|+?v?Ud{a;WlLY5ji#RxZgc diff --git a/PIL/__pycache__/ImageDraw2.cpython-37.pyc b/PIL/__pycache__/ImageDraw2.cpython-37.pyc deleted file mode 100644 index b058bb9ca696266d952f044e40404ecf487ea62c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5573 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 diff --git a/PIL/__pycache__/ImageEnhance.cpython-37.pyc b/PIL/__pycache__/ImageEnhance.cpython-37.pyc deleted file mode 100644 index 021fb96b078025df0c746dcb1da8b9b2d7a1ea53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3556 zcmbW4O>f*p7{~p#uX$9P z*kw_HUD0+Kc2(41*R)-MT^9?m7qnd!i`zzH>9vWMHSDzXc)+_dUC_5jevn9&*0iym z@T7x5#bu%O042VPN*b;y4A&B-uwEIiEo^vo(yI4O*yCYGc4#zRbT6T7pv0F^CC0=& zGWr&ZePkZfJd^*9<`LxVty%^IPa>WO1k9U$twb(k_3nHHQ zVV4afKTOy@4@Q!8qA*cW5Kw>8lexQr43lQzDu338QMp$#4D8G~VQ5c`Kv?#<6@#D?cyeZ1M!RAlw@!ezrz6k)g24rD0Ox{zHNO2reImUPS-R_equ*mKKStbQ|8 z4HN!rZ?txws;Em*1a~steMlbgqaH=0P#~63SajWK-n+f4tKnhN!-Gw~y&L<9{Cvne zFF;1TixqyMS2zW*IXp}&Q+%!ydm6}v@k&l;bNX;gW9x-{AU!Xwd)^=tqk!6rp7+y; z2iX&~04I9sGZiJZBDz1w-%vHR{pQ4>Q74Imq|s^ZI>JE`l+w}$F~L`m3+tjkijxej zDJpFqP-0DUV21*yqr*Btsx8?lmVzY_~M8H_= z5Bz{D@{mo{nG-WW!gEJEKeAXRO}1VnCS{WLlLePvaSMsl_4g(6m$d_gM+1A%L$sz@ zOxcEYT9y?Q>eGA`%j#Kvdbpbvf*)e*$RgJ`0L6djop>)3cvRyT!BJ+N`_ zo5yrF`_3_qD+z*e71ANqKnfoK69_V`c4g8=%Ef5~YO*g? zk~;K2l`)}VsVZ)I@+mAJg`OY!iRazIh*-T@I@Ha4$X27Iuq_yBiK=B( zX~pwI)bTv^9(7U5%v74YOX&L)C8iCeT5&8zJsp(dBIX~U#OIJ#-5{Za^o;*KMPAl@ zE_73&JwXS)=6Rd)l|^}mF&dc9)~vl5vKe9knD&xG7Ds_ESXarzxAOG{(LTi%aYa$p zY&}OKV=FNei|Cm+0vsKi{gSY*V>7;HyflBdlJcYi`pkay$U3$s4q7!$SzVw#S5F#;9#88)xPx6eltIIu0rmz>I3Y_zMYOG>6u{mz zZ&-`wcr_>FEzGL-$>Ev2Uc=LS6t;1fX_yuD})NrTh3mIfN648=aW?gdvF=Fa%I#4cJ`( zR+>~`SA{hLn7ySa^)sYunNE=?s1K>q#C$|8!d_#eKBm@9RBzEX9ph&h6O;NG5Vfns z$d!|*T%3|m;P88LT~IW ze+NXeGvDltJNd53IMWNmp{qC~(?ND_!z_6E5}z{T38X;Q`nHxT5CyxWNxB1)oJkor zWNn5dYb%4On(0z`Pyer=YdzyMX)IvJR^)+B1s+7>iz6+_!WtqmdLC2@}-r_E2}Fj{{xVb BRKEZK diff --git a/PIL/__pycache__/ImageFile.cpython-37.pyc b/PIL/__pycache__/ImageFile.cpython-37.pyc deleted file mode 100644 index 0894bb400eeaf5db8f30acded92a08907e137557..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14310 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 O@$*I@cP?|ZnEzi)mxXQs diff --git a/PIL/__pycache__/ImageFilter.cpython-37.pyc b/PIL/__pycache__/ImageFilter.cpython-37.pyc deleted file mode 100644 index 62e7e92ed789c2f6f346c3ec6d9cd6524e2e882c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16586 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 J#E$>T{|7q;%xwSw diff --git a/PIL/__pycache__/ImageFont.cpython-37.pyc b/PIL/__pycache__/ImageFont.cpython-37.pyc deleted file mode 100644 index 8ca3d735295e3299b893922629dc1b55364f6b1b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41453 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 diff --git a/PIL/__pycache__/ImageGrab.cpython-37.pyc b/PIL/__pycache__/ImageGrab.cpython-37.pyc deleted file mode 100644 index 945204884524c176de2f704cd858897f1b54e3f5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2454 zcmZ8j&2JmW6`$D;a=H8v^*m(I^Q288+cnpRSMib%_W-v3Mso@)xMC82*_K1hRcq-reS=W(_dA}~IyP#RDkKoMWT z;L>E|%;7&va!MHmU@48c$&3Z<8fMc@)l)hE9t4_62bv0_cY;KXVQ?|ga z=z16HBZvdp0t3K3?LMc%k*loz9sLK@Ox8+>4A%UA7M&{=E5M?=M1M~C-gSg}&ED!E z$8DZj_ls=ow?)XKC<}u^PIxpk?p-Jwj^e`)l==1kt}=OW?wh;&UvoUMOB2nnFJ8R3 zgz{qc?opg1`MGx<2yZxv6X~7D@+6-~@9BeGPfUs;=hC-e`qN9qC{7|(PtOE4l#vT%he<9X<%-F$;CUDcp{y`S5{@jCl^0Q_tRxSZs!g&a z&dz)*RANUHji<42t5-0!?L{$gjR zx9VHNVSeFn##xw5STsn2X~ZLji?RG%_)VZPSOUO;7c3SK&{P?t6XjqqMIcX<5vRTz zrvoHbM8Gs3jYK4sCE{76EEdSXH!j}yjp_RkOEi+oln{c=zKCUXuL#03 z$U4zKI(YmCoq+qWRriajvTzUH1}O0*7(yND(hig^6s%kNZRvN7b_|Oe_%qP1(HgWJ z+M;);W#ITOy-jN{gZ~cJ3UNVvKx>E%=$Uj+JM)zVft0JEOt7}@zr&i0B;Cp>o%t&3 zl=X$dn%ksmly$ZOVt_dRE$fh!+mZoWlxB*9I zlIRx-u5=g*MSK%9aH&dEb&j&JPKTppGLAFfe0Z=6->A-RTD;ah`|wrDV7gp~aJT2h z!b^kj$*~sz;cu2Y;pJH}?fr(gfCF!%!3^LlXpk4jZyjGlvknH7K?YLQg&d$nXszQL z=)HmFCYnt!{`wo>ONmo8A^9YfsyWFp%Lk}<@O6#CoJGn8fr_QFfmd{)+*rgJU}YhA zv?_vF<*L4m0(tO+zlTWo5UKTYU+@a>`?~94Jk;BOU26R>mj`K)L}`@Ch-p3Tb@(=} za0`rb!aPl3PXrLu2c_y)J^U^7o1;|n+c1H89-ZKS#y%vWVYLb_&AT|R{l*sT zLzn);LO^pswJdk3PM}MuLZD%wPp_1$rIpPwx}aFMj4jZw7Ii?kT-v&}mchS(ReRRq z-rixau{=Y)G585uo~AxSeSG>{QS0=i*T|xHbIsWKG|ky0i9W*#0w*{I!a4Xe-QWKY Dq4SJ6 diff --git a/PIL/__pycache__/ImageMath.cpython-37.pyc b/PIL/__pycache__/ImageMath.cpython-37.pyc deleted file mode 100644 index 1bc4b7f49be72e0fc08ec06afb89a9e0c5cc6bc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8165 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 diff --git a/PIL/__pycache__/ImageMode.cpython-37.pyc b/PIL/__pycache__/ImageMode.cpython-37.pyc deleted file mode 100644 index 1a7c25be76504c610ba3db85b9c802412d3d9801..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1284 zcmZWoOHUgy5VpPE%?1d4s0sqLbbCytrlJR=wowIv5=9Cjf&)^N%39(jEX@mhsUX^% z;1~4RQ+w>K$Nm;yd+M>*o;u@%fK*$a@r=jw^5=3cH%DNUzWfo#9wEO_xET&?Hel&h zAd-ZnLL`;!nn-rVnp8THUy~-2N`;x zV1LEdn^r>&Ix6f1J8?JCt#UW&OGtHRaNd_;5)b+_)vMy`wU#Br%j5(OYVlD^$4T^J z7`8u#9k|`7)?QY7u*D7(hnL0|BJRhD5K9nF`#=cw>>Mqj&25*8HSiUO6`t9We!?ap`Uk?W zOM7fgDT&FLT@+J#>U`zj$Ts;9wAk2bIb%L{$6n$B6g&Wed&L17PKlfaha_>sU~AJSvfb;WUXdiF3fJtm&nDc%t6HbI0JDqa`DDGh5Kip4*`rJ1SyrSxBb3a-`O)R0K2E{^A-HbA3_u3PA<^i?QgQ5tC@+{ z*758PGA3~BL<#Dj!EO7siNl=*#@PzZvxn49#;BjoGfvf0EX+|Wz-(-*xZ`pLHshDT QD}eRg19XgEn>&lSe+R%HMF0Q* diff --git a/PIL/__pycache__/ImageMorph.cpython-37.pyc b/PIL/__pycache__/ImageMorph.cpython-37.pyc deleted file mode 100644 index a5e2b1b36d65eccd23c697295a9e286660d7fdac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7329 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∈VA+^!LB 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 QCO$MP_&18@NadCP1G8x0_y7O^ diff --git a/PIL/__pycache__/ImagePalette.cpython-37.pyc b/PIL/__pycache__/ImagePalette.cpython-37.pyc deleted file mode 100644 index fe71b1745ba2d9a55cbb38f6bd9c421ad5c04b11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5532 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 diff --git a/PIL/__pycache__/ImageQt.cpython-37.pyc b/PIL/__pycache__/ImageQt.cpython-37.pyc deleted file mode 100644 index f8ea88518af20e1a659a3af888d99cff37cbf716..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4189 zcmb7H&2J<}6|d^gneoinyX*DGX0zJ~3E4r3L%d0}31OA>Zg#O09NSq)XgO)xQ{{2n zJw4;Vk0DIyS`t& z`ue@!d$UlhRT#cEe)acYYnrjYP~-TckvEZ2#TgS!@R<2j8ZmDhzQLI=g%z7^%eQph zj_tPNJE%LtZ5g5@%E&8XtYx%J-<9rGNmNDc5fgPW{xi(q{am_t*av@DGyJk&+54%i z2zT31zrY$3@mRa+SKBqe27OGNi|g%if4n{6PqfeZ=QvAzNS7h~nU+3(M*6}T>E|Im z2I;?Q>B%$F7f(yS$CAqylT&hf!`QBT%vFUm`g`bqk0r+Y*uOus%y#_um^kmx2=14~ zGh$L)e8l}(F(sxSG5?a75wj?t5SPRgC@+i4;z^WG${FbU@E#La#MMVkT$STP)4w7- z@f1d{il@a_P~p1rFCR|Jn$^b*cRV*u(+|LO!PL4+)Ve< z+--M6FP16Rtn6gL1F6!ell+b;0?9u=xc&Otvg)){*!J#55L;V_Wg?{V?sj^K2s6l@ zbj{Db_R^Zpx_j9s2HuX=*U~7HFLcA^HqMor)V_i1z6axZt4qzy^5-Iayj#)edRd1djPJMux)lnpa?R)K+HNtJ|g!@J*8N$Q1(w|Z~E zYj)y}@}eZ`c%iqFq22D{IK+W<$ka8IcApD= z2-8cdqn1If%)uO^ZydOoS2|>R7C$H-0w(CK2(2d@JHTZe5;U#-wBq4=y&KY-NA1_W zTOMA`)A#Ik*0*Fcd)~u+gx&@K;U!^P>KWHs(F2)yGRigqk1+L?H3+;kQ&G|?W)N~u zI<%^Wp6i?4q?Mc9Zkrg1HL7X?MQ(MvGEwJH^~ea!k%J-Qoodbs}Iz-*r2?7GXtP#yM6Z(a`5)o29Z-@Rau7($CrKBzTZ4^<>!G^wMUS#8D!>&W1?VK-bWE{~mexa#O)o9$#9T7bMhvl{k zla|a)@Kf%DT_8u~)>bD<8e_S=PBaU2L?YYFEr?6Mj`h=^D^-Bom$6?vY13x?3md&S z4)i=Nq&ugTY==<-JO`(x>t_UOayL_9&<%xvuwP2#!$4z_M`saG(I>x=b*|5UA16wQ z1eiTRc;gdB#k9C(SbU08nlKgd#R={R6m(4*7)!Vo0fs;_2!DbP4drDVd|({Hxetv2 z%kZc}uI4ifjDaT{KyJ$sCLHLU3~qd2CV$pF7J7bwp7Ov1NQ~Xjvx=}aIHm>`m}4xf z_AUAwY6jU^him;*&vY>JPmgC}_1YmD*tRL(_a+stiFYz36pUEdKi@$|HOjzPAuh4*7;7habw@^Wg9QtP|xAE z)iq>CzBv zmbyw>h#higqodkkmRGdT$wK&;##HWt@xm-q@YtDBuaY#mGtFu0GS#kAMxM z-|i$Ge|*$fgv;KQ;)Z&G z^U8O_xF_FIs-tpC$*$6<1kpzOvf&myr_c0FT8Vg6y-drwqqTe|(AIF)6efbKv(t>j zGz~Uo4AbmmR(b;&1N<$sVie?CAqwUW`s#dUR4c(eJk+Zgt5R-E8dtcwgSkyoaQx9b z(U;P_N#?^`eB&o<1MX88k4nDz6L?*p9^cGe?etc%CixcnXfoLxmFfG)U}t>D$-`2N z)n@^ybjXN0x8P9)=yJ;vCPt3ymaf~g>=2$k*mVyA(oCSfp4QaoY z%Ir2pZuhknnG^@a8ycLx8?`k65%iXWpg>$uppks7x`*sjq?AmGl}dJjHo{fKDDnM? z(FW#@mxLd}@)QdNL0$=hBB(~a8U#DNFfK;4-n=$iu_@tTMypb=jR;{8h0;5C3$@=O z>3E>T6}3-jp9qH_N#{)eGu$BA{}OJLU|5o1BU6TR@U|?0o z9KVeI;-UQd==as!3NWLj4nK>)v-Wu8UN6!dt52fCd%voGi;ZUaW5+E>9;=)`9vms6 zHiq-D#WwkZf<&vUy(Ej;1*Q7q*jJPS%xM JV`8>s{R{Ga>vaGC diff --git a/PIL/__pycache__/ImageSequence.cpython-37.pyc b/PIL/__pycache__/ImageSequence.cpython-37.pyc deleted file mode 100644 index 1bf1cf2de989a0512fc04b9fe7de4336020148d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2313 zcmZ`*OK%)S5bo|B?@lJRm4tv05NILguu`%K2nkqOQQlyPOr(tzvN)O@&$QPQ&&%Dj z!E3E^h%J#TS5C>1zcg1)IdaX3uX?bV0InDT!l~!I;<}u-fu)A zY8~8R5~bg9bD#&c@ocqo!H1Q35=0(S|ln} zS!raD$@oN7=37rxSjuuIC}oI^EhR@rMY7CglIMlJC4Z{4J(LDRC5_q}sVr0-&u%`- zNA@62;T9zagI^vG1~M;dU+AJB3>7?3Q~O(E8E28&@6`THRqb`Z#z`V|5aTv@(=Enb zwI6l|>!g22>s$|Hye-EtTI%t_<$=udOzp>}M2PmLZ5^ajC%Z*}U%;R%Zy` z>V||pJ@j@kZef^95G9*%%AGk^B4dYXeb|4=uq}MSSp96I4C4hXzIiqf5zWJQEa@XAlgfF zC^h9&uRv5Qy)rLq6l~4aL7ky}a%%xgM25ygRb0WkS%zQ$aut6T%Eij4^)}irl~RWG z^!>{7{WOn83C)*%e{U2dCp#_QkMhv>HQlMtk~l}=eG+pg?2NLiDV+B(Y&Kob5pL6M zxedF%F{{TVXwaa#G!X<^oR!q#XC`dO57`hExBu0I-DZz39X2M7m*N#WbSA($62}ac z**N02*%6RG6xekp4&`I-qlfGT(}UmGHU}+;V|OA*tH&lp^-gdB?pdWDNJ=A$cn3E|dpV#v5;q zun6QXep#wImON#9YHeJ@U@)LgZ~ zk=FR^)yBCdEp2(un+Ny}S)~4Dr##*i4l%d*K&*28Io7~l@R}OP{#?Ls)?SsnRyXQ3 K3j;y8dhs9D^Dr*} diff --git a/PIL/__pycache__/ImageShow.cpython-37.pyc b/PIL/__pycache__/ImageShow.cpython-37.pyc deleted file mode 100644 index 10b5fe180c94b366ba23fceb8792a92cbb928e9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6660 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 a?3Ajf#%%mYhu9D#)1v3}F?vrQXa50q1Jn}$ diff --git a/PIL/__pycache__/ImageStat.cpython-37.pyc b/PIL/__pycache__/ImageStat.cpython-37.pyc deleted file mode 100644 index c093a1666b8fe2cd773d94b5326fbc584c3ab1e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3726 zcmbVOOLN=E5uO1+3Zy97mL2P1$3Yye*7UCBiq?6#9M{I)*x4#arCO!pU6xYFhyzNH zKu{VCRT7IlBy=wM2{~EE{3Tp-(lOUulCK9KB+^P;6`;`b#&m!EbwgU$s~_hGb?$Mo3_=oUNdP)`yG?^$ZFbw-E<`1Vh!gUYuHAM zE}HecX-h|z-Z88%%Ndj<>B=TN$`F0Y}i$m{Y3 z%Bq}~H&M>YTk?A-Yx1^SKsjghSW2BOE%ZiKNd$4~4J>tQz~8fhb;bwG z=W&%A^S-k8pZ5>qAQ_koem^t6E*!q@fd%*U&c1BjRsY{ZN_@B|zWj#avBQC9F zHbRL%xsm}Ed!xV74ppK(p>}(nAl6=|ht^Kug&naQcwOa1VWQ8m5o=V^${rfsT_rjx z-%IPi(prT(Jstd7sjf<^VG_oP7I7;`9a@%Fes_A950;dOcZ1Z9f;cVhh*%~KJ9UyE zYB%T1UVc~kW|7ko$-&>5g8$jS{FhI+H& z*R49Q^BP{4_vg&)@ywP*v+$7f9DK%kKSyQ2B|!d*wFLehSZYzD$2b9yOMAc<*vJ~O zp{1<>InEl{aG*u}?B97QqE;^wI`BGS0w8xiF@|^JoOVeae>cz#Ta~FXgE~z}XOgUf zfjJtmLYeYogI*@CQ}3)#i)n%HKSW1j;>^0vU3@j(zn)uIOlra7=Ao@;@EIe&LWN9x z$A)|thMcTx7^Y#~z6E|cBl|1%hr2_2V7-UA)H|?ci2xb#GtSwO_ck-Q+<){s0NcX& zaYvkZ$0F(liPr|-0@2#@h#+1VdwMTt;)FV+(iXntxlv~bg`mpkq{@gx0S^kWfxX1k zJXGTYMT>u4TI0R6T>e&hV#_=_TQ6*&|*5;my~-5|tC!%+r)9;f^y<>556 zWlY4hpJGu`hhSh2_ygWlA^Tp2EPxG8vHB&_X)0we!BD%lnjA2vzooe(3y(0QakDjeKmAAs(PJu^(huk z1Lx+zt-t*cx%-4%etKl^t{2cz%uy;gF}IG2f$jm=!oZz-CeE@Hinu~AlIjw>!weL) zJid5;m7oyE2m>6~Ca%0FI1ZwVTxxs{hSab{7D+a2NlS+3AB`DfT_+GRIkyOz8ozhh zE*dZFqG&1X+8^8X$K0;pg9e=P^FA^#&PiNJKm$b1EjBD6hohF~@G@eDtS$}86gdls z8;Yg_M?KkOM^8)yIfL>99!~!g!lM(&P{jWOjx55ygnK+o`_H0H+yBD{Z_5c%e}ThojvUt$FATzU^2KT=wKhV2v~@lkG=l%YDw zDJEZ{#>(Ynf#Jd`Iz|g-{00qU)$`n{C$K7K1w75)Q_FCEY@_5iajM^8i$+dZY4z`r zmB&KC@2z0U)N!8ta>CCZ6v&KygxdIoEs~|WOXGA2&4jr|8H=&YpU|D3uH@J%e|Xtu zOekz7Pf|pfC?`~n%`3Uh%O863EW0ROM7Uvef@`%DN_sLl4$ZB1%Eqy29=1?lkaz-- z+R){rel(0tw8X#viba=PxqO+U*^CC?Xw>Q29E(oi`)SqpJ6+j}s9y7ZB;_a@Q8!47 zMG`+Gu}b0riO)$qCP8UW{e%QvpA<3u666Ma!d+3q{yshvOt@Ip+=_d{b=_IKu6qq% p#moT;_i4TXU}e0rS$-XLcSLm6uT%F~rv7u%)R^ufJYBnf{2%Q@AgKTV diff --git a/PIL/__pycache__/ImageTk.cpython-37.pyc b/PIL/__pycache__/ImageTk.cpython-37.pyc deleted file mode 100644 index eb674982c731fb46cdd147da29d6e6cbe38990ed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7755 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 diff --git a/PIL/__pycache__/ImageTransform.cpython-37.pyc b/PIL/__pycache__/ImageTransform.cpython-37.pyc deleted file mode 100644 index f100d5c43e06ea0c8b66387fd0e054c3a186816a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3491 zcmbtXO>f*p7`FF2X`&`AEfPp*4oGChHuM7!L=|e_#ayx-3|oZx(B77%Iz{{Dx!*+sw`t%!MG;s7}xE% zig82CVLWHYHH_!Q1&lA)aa}CzIL*bsTrg_7%F={O+h4nt#Q;wY|qG?kPTCn?We`-rZ0}LMpZyrxA_?aa2s*T>bLKo~@FR z>0{wx(Am?0k=GLLKZSC7@A1~dPpqDWl&i^T-0-|03XJEyLlRoC-J?s>Et6%ROhq5H zg+>b)96JY8+-@n;sWh$)BxDd)o2IL(*ko18syc?_dQTeC{9OztT$iU@^Hsl$W%|e< zWSehL^arSponM{boW0WX%Jb@R>A;0qE63Gt`MCVEn~R~y+~YYj@kz60C4r@bBRQ@H z`myLF&ARqKUs#T5yjpPvtC#Z#QdX%7_o7=Z)t*ZxD+#r2c~E zeV_6$TTuzaWFar#f#>EKzWb6E7>^jYTbMNmEA&~Nx7&96fo9z_^2tcd@TXEU&OX0p z(j=5@g|}Fz#rzf%Ehby6+hm9R!0$6ZjtmcQpf6cBP}*2x<}hX|J_JD(4`x^wOxb`N z6%1Dq;EG8OLP;=`AzK-?*r>@ef|gXAnj|%u&@Ia*l85XW4^zn?F$o&wY*-Ql2PFOq zXG8We>#z}OzhwytJ0DFx`IUueF3z zy2$Lf#@1ius@zFI)SLQ=O?+e}qCojSU)hb@&APgXKvYXqEu$LOJx|2G=PAk+?b`b0 z=GOK`hB6!K)5-?@CG27-7G;g4N=ebon}qzv(8$Q_PEgPPJ{|JYASai~A#CUyM72&k zO7Z zS#ixQb=)T`O&D#x-m?1&awj21;kq)s0ctmzwB1TQlOwW>&rXHEui^yq7$uG0N2jlX z=xK`q-Ge|WG?af-Cx8po$a0?AH;1C1Dg}S$pkQ0*X{N)V*Eit^o%j$JB9x6-#;k+1 zz&jA$lH*7=9Dqg3VM>tFNgN5XF}kokixa8rRr*$d>vZBF!R^yYX3PxVViS{Pc~K|Q z54r)8DB&!LgUIOFv_^oN$vq!w$Q&z(irEUKA6QOz?UV zZnQ%MlsOd=BNBLy&>8G?<5ZDr&jsJ9xQe?r-OYe63*$G-w8IhH9opjQi0_M}AKeL?R1i*R)s`)w6xv4Sg&S46}`PBG;Q`Iu)ceOyWyx-okjV5gC;y z->%<3KQ6Ao{r3Gu523~a;(})0BrYCF-7n(e=#P^@F~H(WLBW76yMRoQy|AHrqyr87 zK=~L?8A>X#%C6D?5Pud3JiD?OD^BURLOJDNLU{^wN%%=Dn!L&sYw($%Hq{{U25o1*{# diff --git a/PIL/__pycache__/ImageWin.cpython-37.pyc b/PIL/__pycache__/ImageWin.cpython-37.pyc deleted file mode 100644 index 091bd5e1a4a66f05b73208671666e17fbf8d2706..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8075 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 diff --git a/PIL/__pycache__/ImtImagePlugin.cpython-37.pyc b/PIL/__pycache__/ImtImagePlugin.cpython-37.pyc deleted file mode 100644 index 6ab9b8623c3d1f2eff25778708f458f88243a0a3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1238 zcmZ8h&1)M+6ra!CwJbTp6p}y>qD>(RM5R5YArzBP7lC602^2PJm#yANT5G>NJ8EpP zy43jtdMc&8NXPb1=$|szLczC|-g@erwH-nS-f!N#?|JifpLRMeg6ql8e@DLrg#6(S zH%lOMfK(kK00EkkkN^Xo(u{>H;~}R+k&OVcrJ?+ifCTRi0Z;K0e!)Xev5l|1lR$Y} zM$!KT>HC)$iyU84#6Gifn8hw%-irGA3lG%3Wm>nFN-3rCaw&(d?XL) z8B+BDN`cnogls6VEnWEfj=^hR(C@FLm|#osLPC%=U9+>lu5IO(u6fO?gAu7YcnhXW z@F760xJ?=xxplh-0_2oW#SG&`{)n6oYToFBExAqB-0akt4djAVKVI`}A@om8Tyd9} z7VKP5jQ`u|!0c|?HOI`N7S-=)AvPU+h}M>k*;=l>TEZ?`{%Q7V?}DyrO=~t~nD-WD zmC#|22FE30l&U@I}DZZn2 zD(&8>F=|_`JcC9}B+Wtp6*G-UZBOON_p%ci9jTE$>@ zU!3PAKKnxJLR(QOwLnZ($_k^>)QYSC6$*p-ZQvZzBv+QFD!07QVC6JXDQ;P8CUYxi zx>%N$C%LgQa$)+u3z|+tdFGCxJa2;2%F@izg{9y9O7w?V@xSow@pz<*nU1qwGq&TW zm<5#X9Tv+RVv`j4ThXV3&psJ9P@bDPDvpwG$5mp~!!n*MaQ>_DXn6GT&76+Xd7*rlueo6xS* zK@;>CzlSPD*z_?Fwt!@ebT` zGKtVbs@x|PFhK=tWc?k>w6a8Vlxz2UvHqmUN;fZeoya+c9j#_bWt46T)qSUMO@9Ym Y78^Xds`>MMJXQGf!c<+^^7kMA2f@KQSpWb4 diff --git a/PIL/__pycache__/IptcImagePlugin.cpython-37.pyc b/PIL/__pycache__/IptcImagePlugin.cpython-37.pyc deleted file mode 100644 index 024267ea4d512d7ce2ee68356b496da0c465613a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4306 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 kN8ALxAFE9-E8py8)S*DIqjH(=o0^Cc zZ2r!pH=NP0SJnPHDiL3se5^eTc#R1SIl~XBx-onllX4Q1GUt3A@ZKQ7<7WX-feWet R%pcNLijH*3jkJb3;s1?5*hK&U diff --git a/PIL/__pycache__/Jpeg2KImagePlugin.cpython-37.pyc b/PIL/__pycache__/Jpeg2KImagePlugin.cpython-37.pyc deleted file mode 100644 index e1557116ed338114a77a186e7f03a15beeab903f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5888 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 diff --git a/PIL/__pycache__/McIdasImagePlugin.cpython-37.pyc b/PIL/__pycache__/McIdasImagePlugin.cpython-37.pyc deleted file mode 100644 index cc70b6757a3d83b40c9f94246c992d7f22e29f29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1356 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 diff --git a/PIL/__pycache__/MpoImagePlugin.cpython-37.pyc b/PIL/__pycache__/MpoImagePlugin.cpython-37.pyc deleted file mode 100644 index 5f6cad9a5b1e6c5c1ffb8b46c0ddecb1d1351594..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3422 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 dKcn+Y=uCmYA_&*Z}%3c5f diff --git a/PIL/__pycache__/PSDraw.cpython-37.pyc b/PIL/__pycache__/PSDraw.cpython-37.pyc deleted file mode 100644 index e50c3de4c41743afb38c1f9893cbf12e8daca4ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5811 zcmcgwO>^7E8O8$Ohag#2Y$b8xOuNm*Gvd@DDW`2xHqA7arN%S1tg#ZMVbxL)7o;G8 z0J{Js5vJ0EbLy#w9y-l<#y<8}^xA*W8C-MHF;}1ZybBN_Wu={73W*C~_ucpVYjO9= z6-&eQ(civn&A+W_-_pzYGVt&#{K7jJgeI7$H8r6N!(%PaC3bv(HX3nrr+c;wwD=e8`>xcJycGubT23^;0)8hEbN&Ox(j@D#CYwCgl z>FdG}=GP3U3!?b72J~-;k|<-QC}xC(nUa_lbGVnq6)}(djJPTmaJR&3;u`L=;!SZ~ zEMmu;(81P?q`0|tPuj<^YjIp#P89M%pZBHfN3P%HQNW{phj-m0$LAf_bE^D)hwtuo z`n$W_4SCRWqsS4r)$T@r*bsJPH+I8eSPdf)3?c<(hvA^-h^m6xXzQ7%bf@1ce&Hg9 z5euzIJ7A}5#70_67aDkE8x_9)%<=gc9+!(PJ zjA{P0^er++Ot7aq%_-USjkxgnXY0!!Rtic|N$4ceP722o%qE4sVdR7rU6wJ~EJs00 z%`1hZ137gv)9Uoom0NhtxSwP5db}{^ehe_hJ~^XepZtELJ%{HLbMzFQKPiUQs(Ny< z-ZF#%0WZfpcD8}rqD!p#YI)l?-B0SSb`suKIbrK z2E3tUG5U*N&$K!X+otfRi|)B<-^0tfY9o05fiCo?y5#iq+;{=-Oqt7&GR&j%`;^xS zf=DUvmJ&NxgLJ|ukPaVfFV&ir6gu7@+|Sig+P6bHie&0>6qgmI-0Pwy<`7)D9)1D1 z)UR}l&9V4;rh!SAHpxsE-6?Wc@e4o2K=FQ{9hT&6XaX@XV&5RWs?m5>Q1M_A#E5-F zx?-X*(g9Ia5Ty*FOo=xBN@W=&Gh{Q*X(OQ>@4M}NPG+TiHVB=nmBTdpHl+(%Z17Je z-B7{%cF(y88@jR6;9D5E>+^nqR2inJjflqOEN3joi~Ro9qX$Sk{>qx)4g@9CT5Rw& zOH$g4&DwgM$1^ooYnLZSJ|g!}px%*g-v@$`Bm~ zV-@h#AdnE!Mnd8?{4A{+uAgI>2y&%1-k#X8^ue7B6YnEsqbly-=1cY4yk4P7L&Ut` z*pWFl&*?hPr?pMp#yHL4;EoPAVo zM-YAL12EAEWY3Ox7@n8S>E%4_F<#J)B1WjEU}jw=wWuR^KE$!8(+U< zHMe3~^%4UbyJ*0fT)|(!E~yo-Zb^Wia5qL5PwW zP9~mVqvu5Xjoq)%lTCNX!FdwxkgDJvW*P8vSILm?Xmmoy&KDtwY*Y%~4^2EwDUp z2)<3RLKl_GJpF$RCPqehW27ITyFhESDD+dqH-&L(V2%m%Ep*k3fVruinrfyvF;j@h z3{XBsK;F=vveTlPE2}xcs=3n092E~uIT{s4MPM_54Nt&W7?m*p7p#{sUrvm1@FP&i)A#oCyrd2hOMlD=#>se0OGGh>Km-Y$dECe@O4M zJd(B_ddTlqT;d@d&9OFO%j#y0g;gmfW)Gn+ZvdX!ioi}?M-swjp+yK)TTz)yJBph$ zue&{*Zu)M*P7*e3nkPN`q-hRm)CK*9O+Cat9A5Caq@ZLCfF!J9pcc$xMcve|v1|Gw zTV!RlB4#$y`#WqwpJ(&zZFY^tb6Er_By`S5|F2N1PldnLN~~530u4NRo@=%KFtELB zrPQL$;9>dhrZ1;MH#P}wwft57al z3*};YzFaO}Ezc+j`(KEY+7>!qYTx)N-*Zs_sQ0aHVzL(;IY`p4tUWwmo80mnOxL;0 zc1^B)saBj5bWE2muVEQi2gIrC$TOS3sSyUld8-@kbK$lliC#a;Z2)k4m&r+DRrNZB43VeOl%emvVmvPK2@^D<}Tj6sVTX^Y+mR|D76hvrSO2 zza!gj_dw?oi)`DN_Z=K~pjlhCeJa1fp)=(J+ur$R>QTrSE`e%KpsMrte^w`iyzQZ_ zQ0OO^s%=XE^GtJ)5&n{5&ZSJ1iY4FaVmWo1%V5&=i`&0v$4b2p2Rb61;wV3)&ki22 zk6$NQ{HzD3LoafY2EsNu5$BlAteY*8LC0>9=dd(^<%+F?MD?c_UQtTE6?nl!igU_A zwmYDkkyI=zO^g{<{EuHIxVOJWR;+pG%4Ez&KdyY^A|ACS?<0?7X=x^}vdBBR)jhA>VowSsz9xk^zTlc7YV zXysgGj86-&{VmaMZI|-=2!}B`YJfr6ML(aR84Jd1_;90EQiYwT`Ts?A@SO8%q(sPgQTiNb{V~nV z8%~_|KplR*mo3xSfVmQ%+o0p`GKk#rqC6s&vuEXx*%1|}uXml< z4aC;^g2NrIoRSL?{{Vl?9Jp}u5%ty!eQ)igNyV(*H*e;>nR)ZQH@kb|Mir>Fe*ZUk zC;|TA!9{aOxkHk@L!d!p3`1-q!hO&}JEx$XnP>|w51`@Bk(?T6MfzEnw96()yF-#~ z5roi24YUN?juvgH9W76x?P^z7sIO>`w({-jzKX*<5AQ{BIN4^bKT(N}LsRdirv4~2 zs-Gs?Sw1GqXyIG$kz3ZZ&cpk=T|ShXzm&VwXMYoD)Z!F!jvT*)85R)W$zKJYiF25W zLS$R}P|%IE`-^xJbY&pSr$?K)Q-~RAZy?P#xzzp)e@4B+I~C&0JqO-t>WtS5rz59w z>P{67tHRYJNrFkF0{Ng)4zQzK2A72U-?Vf&&9If9NXVW+D;jOs{ZfNLZQS z8$i9seF0CgkS(%52EBUb^Z2~Hg$AOow%6q}aAOKwk^_=#lb}zFe^{GhQGPw=H*rLX z`x6X%HG~z-4=qOJsD$V0?iZbXllF}o);R}RXEzQLO-ZqJT35T-(I7EfNXW4N@;3c-6M%fRRVk^YPX8Y|W{D(Q#TTh^!bO{jDnC82eQ zM!R}2PI7hfl`*NYZZ?Xe+*ZF;@o`vA8K%O@r)iYXgOFJm_pIoREM^veG#(q#SnOLo zd?hIBUodu)yvk<>VnYbw3yA{PNowee*Ghd2eOwba@s^lu{2%F;q%pG`Qu&fds>22v&giSLRr_JSB;*q^m%M?PY+gP4rORH!*m~{2#jE0LdbiF6cTGZFrpM_m3^z7p7d*O zl@rIRmPX?&kl17~3m$`HZ;)Wg776hOuwccaBvwdB-XI}%Y~Y-)>)t+X@dvQLqdtA= zSLdFu?pIZ}IyE;MjhaJ$SAPDF_9w48&R==M`~{R;qfhcN1?4EW=k(ps?R%l;^0wFW z`#~5W_bD%hWy*uFqDrd#+zG33^}q?|R7F+QoT`25hcz`%CNfQkfAkpLj( zgK2810n#z-l#T&N#{i^bwjU;8nu2mLKstt

~hVF*|c}1=)j~0cccsiV8c9WRXk9 z0HkBK+BgOv9Rq+$VIhDmn^BP!(lJy^$Lw(97ywiXKL9M9QIQqWF*{LXkUfht04jxJ zsDO$Dwh_r9myX$;#xVft7ywiXKLDU2fgLxaA}ge0w%Ry0RVnks_J1=99 zJ!vxlb14i$g>(!6Dzd_MCRv*s#{i^b08lBW4Ej~f-VQMNc7YU#u z0aPS_iUgeFv{O^`la2vM$B;|M>`p9TrUz6CgHQn#38Z7FKqzL5Tsj6I9kbQOF#xE@ z9?~&X*fMjZ(lP9mjsZx=>~P~4hD*l)Y$H+uKq#hfbK@9*bPPZ`1|S^+utzteQcNEe z(lG$2$O`G$RE4Q&YNu=f%4CIfY^owFpi%%-OUD4DV*qHx8OZ|JV1RTCJE0HWHA?60hIz^r*sTJItCye1Aqz#QUS2k z0I0|c=@_b|V*t`I+s_yTV8e_GQv;-9sFscaKt)bpI%WmTO$Z00Mao4>6jgE90RZuGEFTtKstt<(lG$(7=U!l_A4AaUZk_3>n6~@ zD=%=~FoD1=&KFD|@IB6(CJ=badCLR>Kjs{rIS}{_gC!FP{EqWeCJ^`w=gTG#_&evP zO(5_G&d-=Y;3Lj4Ar55FiUph*$1I%zvO@N-xw)kN4`xmNpYUUw&M*FaihN7lq)*bJ zkUEF1a+Q~Qsej;hyd!VyWX@rbmeTTs9k>VXkxQ>#{IR>Yocgz%AJ)fS=4Rg4ow57j zo9{cBs{&P;RIfVA4s+^J$uKT+=ygr`e(v7W{L1Fn_CmAH9OD&DReQ8M_XqLQ-0#JM ze5Jh+_4;q!=%zP^y`k<$qwhz(-8cy=quo?RX_N=OZj$CD9SwHkutszg_2M***ZsWI z<<~;td_lN8Y;4Ou`Yg#I{42is&4(L$xTB-~8oxqH9^Rk>P_bUSGu$1}*zRy((N`{g zMnFIb9ZGXYd`W4aC?_cw3B}j&kXZp&7N5mQ;-@onJU={+D#g zeoU8d=CtWeVp`6E19!!tBjuy~0#~U99p#_Z0$8A$#Q#eNzF3dwBBT*j)uf{@Bl9V% zq;pwWwX)zGX0YN+@|Tv9*}Z&1}`gR!f=6x@tZSUU>R% zlVeb;ld8Snrc0dDBJrznt59wg9UAH^`QquH7JNaS$y&?KS@JSn%!)1LuYk~8rfktL zo&jAs4RsEkuGmg1Go7$?qSJ)Ubb8@^c;$U3J$1O8@gnw;dYPQBlE=-=&#KDr_?=+K zJ@Q>AJx%*xIq+Wi`aEf#;j2aQ!gih(wvA)_hTzpruTseUtUUcJ(b`dccx z`kc1@Ngro_rJY1i;!9V0!|kY-T%}}EvCW6UfBZcwPIph{UYiy7^g7k)FLJQUBt-R> zi2a25MGE^%w1y0Z>Dp6G3*cIRsN%K#>RObn@$$FtZM>bkm-qe4Z{NkwgJb;Y`8F&q5&qYh^n-9Lb z@$T)-&ASiox8M80#_i3#+`e<~`a7HS=$SlW!U}c8L#0MZ0rL`U$OHZ#51P-p{tO46 zNM6F3$t$!vM`^0{n*`SvL$BM+q^lLn<@+8&?J$~|l*83z6 z^zdmCRw-^hOX*R#C>Hv5mmXPrVaq%VXjGdYGwe>ZlZ18i#Neq;x8PXS?9*RnRkwTc zv|lHz>6379yjm%sCso<2xvii^*?Et@U-p*#GCjSB``8~W1y$lTZ;fiIUf{0MUdr4B zFYxN_If}2j3)BCocCtl1{VUWx@UI1*qe{*CVSuZubcy`#@7M73e1r4*>#f|u&xeWE zmG)M55b0-=b5Nq8`WlB`YIQEiv#o;I^LmQ7_r8=3zzI>yqCrU vJ}u$2q~Gnw!ZqAB#cfI!@Al%W{A^A57kP_Zs0YEV>U_CU_v*E3pQ864Fxxod diff --git a/PIL/__pycache__/PcdImagePlugin.cpython-37.pyc b/PIL/__pycache__/PcdImagePlugin.cpython-37.pyc deleted file mode 100644 index f341949ee3a02178e5fb2568b45997240f61f736..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1163 zcmZuwJ8u&~5Z>K;G5LfdJ>6fulrEoH>!B_=T&So~N8k{Em`O61XIRx6eXKyD4mJVH<`;=m#SJaRxpE;!(xv&aJve7t>_L&t$FHQO-r7CFtv z#<=`8gScOB9%Ome*l1H|It~&Q)<80!5l&c-U2x!+oKJa-b;(cp3C0ESN!-N}`;LB^ zW8^dbk@Ozw{55te0AEP=M8I5M=sgHXN-HS)D8GYwl3@YSgGEFiN>IjlbGI2(fOXt1 zM{NKMYq+tSuz;}%a45dVVx#yTI&Oq zg3|TP>@bDGcBXp1^72`$fYEV&kfp7iDZTPGu$ zh`xm}^c{k~xfC2Fq-oWtcLtY_1;XX72$l-%*j>RLq70a(|D-PVj_jkdR^7zpN*9gP h_eocq>C{oKQbVEt6VL{$(;8k=dx{QJgWAK2_zhqh7W@DJ diff --git a/PIL/__pycache__/PcfFontFile.cpython-37.pyc b/PIL/__pycache__/PcfFontFile.cpython-37.pyc deleted file mode 100644 index 3215896948b1c64e010ebc70c9e3e06cbc868049..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5260 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 Bw3`3` diff --git a/PIL/__pycache__/PcxImagePlugin.cpython-37.pyc b/PIL/__pycache__/PcxImagePlugin.cpython-37.pyc deleted file mode 100644 index 7d7cd3aa717e773aa081393a9bcad7a8a0ec609c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3627 zcma)8UvC@75#Qb0J06b|MNtwZIkwBVwgaaA6B~uo+OBKM{~AP4gsO<$gIeOGUC}3! zM`rI7Q^c_-qV%D8DE!>Ch4k1W$YY2 zW@mSQbIVgx9)aiPZ~xJ{S|{YM*g1M^U~a=3{~3rNf_8~-TIy55gw>MiKrEb0VZC(XGD ztb(jgDA1;r*&p4e-E7!Wnu>SY3+sEz}PR9pZ2Jc;X z<3%7TxLJY}bXdO*yahb(IN;b`RXBKpiB>qJ$&CQ{iG>6+{YL^$oPmst^q~AUyzxmOlE4`t zJ`>cp1oOGD1czO+g$+w~vhtA+jM=x=?mqUtwIGa=O|=_8InH7UEEV9@S^Nqdq-2L2 zP(csrm?kWx`!qh8fP;Pd8BKUfg|*Lg%k$RWXTn(^T2?UpHXpN;33rJAEiRD`jh_JL z>Ar(~H2|9>ZPVUy#JQCHf&B)y6zqe3Y(Wd7$LMbgT3cJM?6a|x*awc7POX%ucIq6$ zq1U=<9?i@?+h(waf~egjDHl$Msc%x-v|^T%abfH}qtPv+dq&k6(9U%nb546enRv_i(0MG0lSz4J3a>z( z*Hb#L70jzRrRRPFJ|IV;YI?&5$+S4VPw$bRT^|=yn!?qbBbecwvla-(lT_0p*Z^I} z0>58~dEfp$uf!30rddfIAM7(F(R=xtm^z)W2{~JMU;#L>0D1Y= z*p1v|Ml^8O(gI|o_Uaxl;$9!`@FKxoXw8C`SzKMpVGVCD5MiGnV=slDaO>oK;Kdmj zGq*s-EWwj-9((32h_fl~BsrKrB&iF#4Qt(I+q_M|a$OKO=I^XdehG(nREhdYBWS=O zZ*0SHpKuUP93(CfedkpXISl~_1_}@UsJ0mhJu5^kYQ*74KA%}$?hmgw&c(<7$sHIw zS;h$$(Z#1y#c=6Cf1$A%COGgyW6%vEY1lYXp^zY*lyPDONM?yan9(auW%L=8+D@o(?|#2>kB!- z3k;U^x{y3C;Yx4~!*g+F4Yr0&s-U<4z^Sv?EM#nZkZ~mgp;0C)t?xxiFubo+Uu72H zZsv6R?Y2~zE#&5IJL6%r-B$>cnWciKeqmr>I^(gFos5P3%w4~K|HIb()q9x*0GZh; zh`<2GmK8o)H>Nqpo7pXl52k9G$Zpr?3G7?5gyy>28I66ux!E6Pg*?|8$3z1<>n!_~ zupRZ46fKi#^pA3hqQ!_v= z!yDttcNwRgX&IEewTVp=9$Ic@XUE?HS9Z#)LfM-fZi%=ZklJC$jp`8ET z+6TD#j6K3HAJG4z@RtIf~uE;3(vvD1*mX^qrt`1#R8z}Xk6+Zat+0NTof(< z5j`j*t^goS+!Xvk8FPha+LY_I2n7%2$L*0d;VlxQ(Gq~ZS0oZ-ZH#X z=qI&vy=&UsZxLYrw3UNtF(>8@nJx&o^>|Z2{`UI#;n}1r>bgKJj!QsOKYw`yI|cB(xH>A|4I%{RIQUdHMwNyJ+PD$Kh+YPg@&}?qW5~}d3n45D3IlNZQnT)UB`S`v8H1|WfXJFI&IOy(5%`1#Z zy^G{KKr;KOg3n6>vle_ItM^e_xf91yAzYYASP&6*A(epDJ>P4~Bu8*{6?DzA`Uo0z z9>=*@LlKD7b(Gyeaudl9P)nuyA+){&h$LmC-a^eSB(H<5S_Rp!;f>z|LKvfUTBYZ$ zIxE`g6X)(%%dzr3sMkV(0O_zi+;8 zW_Gz;_6VMvpMBl>`V1leRFk8}!r(Q0$srm>80`{&+*6damzM!YpQgLi{2tu>x~Hp}xnh;S?)!Z)8w{aS7w%WL#!Nb_B0rJf+}_ZjxsC z8T6Ce&nViaE$#JQ(BZPEyS1>(Wmyk5`GWzE+Q4kE?TtVrT*#?b>me6O7)PyE+f-uk zsNTW1f-k9~Nl8XBni-5TG*jc1ul~rZmEyG`9QF-G=rk z=<&Z2QHGpv*vilDZHTxdf?h*emfTwg0pp^v77rp8q%h?=J_l(@liahkPgkKGV=))Z%zCwcL@9|?O)7FuxK$aYxoTGlv^a58rHJ1;(S6M zT)s<~n^!s{pT<|kH?#jVn*!ITIbmL2({evO@F3wtUb~BEStPCB_n_^M6!uZ_A&HC+ zNLI;eKOuQ#|4w=`t39HSu$G_5rlHFo&N6tfZLR)bKJ$aQy*md;l~v}+#KPfSW#`9; zh&?=|A^>~qPmKM4D=VKEAN?yo2^$Tukj@VmvXh9im7PRHW!1Xbk$rn;%xX5ZFnxAGT@YC=)?Bow=qQ7YTtj7Oc$-w-~ z@GP5ylrvi1sS(xvJhDk?IG3Fn(T)Wjr}M>#Y5qCQ|Bqw&pap&r_*IQR1H36}$M~~H zcw~#pnB%YG=JUw*20N$tJ||xokLd4cdVaVxBKg^Dfz4=1pJa2))1xiq*9F#KRpiOJ z^y2UmtAq17%v9z*pPf_DPcILf*hkK?^K40B=MZ}(f7|NNkx5DP2S`4t<^4ImxcdUT zFc0qRY-T)C*d1UmYV23Xk}my-q?@39PSbvKO#A$g&?-MKXA7u+<`<^&Q`v^9Yvkuq zRadg!3sq8d+@$rTT%+{XVwqwL?=}*}^_gw?zqisI+=9(nl`ZKBp2XdO+Q>UV;komg&VPegNYF5nkz2z5ISKb>_NV*}-J8v%gg>@WR`D^ z)+hanZ>_xZ;V+K_tMTDXJBXq?=xx@FHh7Oc&eCzFvH{SH8*1B+Z zqTW0V`~LKuL3E2popfhnwyO@qtuRdvPYt4E(C^10MMP8(aQY%rjmzKArYwB$t`4?P zhkMhLPLd+jJ!!pn&_`G|2V1Ec*mpyg?)c7IJnZbG(!n7O5q@h)L|;v$m4-beWv8cm8|WU$wFn#GL>5`y zIADG`Ndu9#_C%P5QO7T-0dMW_01Ex`c-D@4JynC2EDtxBDt#kHrRQ(8a9@*Ayb%b*zXg5>Zp43%LK> zhG?PgslErN`$3nds1%tiLM@X}qO|IxVCb@jYoJ z;UO}jKS*&O3xv8biK3EiZNC2g8-8)@DNL0vls!~}eQyj@Mr(ssLzJ}{B2Q+=n0>*w zTS3HHsR(fIL-FqfNq|s@7a&^N?QWd#<^}D9m{Ka$#v)X$`lT>wjq6y)o$rTJ>DS-j@Z&w}U}9mGq%+hP_0bQtZX!J-{zVgWeVw@8b5WqU-5gYQeO`FDl!| z!*Y9)gX3v6?6tnfCu!(=iu|^growl6IeeQEEhdX&zNu1CMDtvs?%->JtMB; zqu}t1)=UM5O-9L4ech}Xb$D6=t&W6Hm;XcSD$?X|8adDn+xq|F8URhY)|?hU2Z4A| zH7aV7=pq;=ys9+4dFWEs{|@6KC=1>}{&AuIG5neDP1P@lUpoe&qd{e~=;5XX}7UtIhC2LJ#7 diff --git a/PIL/__pycache__/PdfParser.cpython-37.pyc b/PIL/__pycache__/PdfParser.cpython-37.pyc deleted file mode 100644 index 14483a1e7135d9d127717d9a6fb0fa2bf859c02b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26181 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 diff --git a/PIL/__pycache__/PixarImagePlugin.cpython-37.pyc b/PIL/__pycache__/PixarImagePlugin.cpython-37.pyc deleted file mode 100644 index 643b37e8ca6b4218acb4e1556da7b8720a7bbf33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1138 zcmY*Y&1(}u6rY*>$R1+zbPh9hm7U z04JOVB&0SCnawELEYL#THbB?7eo1WefN+DGmxP;wow12#7X-bsMB%I`3c{Rflz?4A zn-``S!#W|2;*3K022;ji==Ovv=3?IuM1v~B-+CH|F7CjAQiHh%Gpz!Qb6y|W2CzA2 z5KU{%bX-Ju|C5k!1frOU6rMkjkRZw7x3~Aa)0S~hx?vr!N;|uOh`5mT{kR`-H}m6Y z;d;`1w$;fY8D?)_;mCj8N&QSbO5E-_a85hz!=uM-f8ffTd^_m({HU1>Rl#w)U6Ew> zkP`zSR2BidsNM|p@4!qq0R*urCpP2M);P2Ed2J1DKz62DzP$x`+eZ8F^yTrWmW#S{ z(+qO(v5 z(wH!hjfrFAmO1wp(0jqgj9ceSa$bZTCNJ?Nh*Vf7ybRLh6~63gp5BA_j>QQiv(l2- zVWVmkXLYxJoq-2Q`G4S@{Vxbt2wxGt12oud8BWZwU`jha*j1Wz-+>owB3A%>0uP^S z681xLDdr_gm%`BTa1GgZ5m4i{-x`Uy6s+<@!;p_3CsP7?p}1DGkgET&VP<-U>LOa`*m zSW-k{@g(*HH0NtSa^+CsXOVXhus8D)c14PwkKL5Bme{~{ZQ&DxOhhSixvk2AhO)M= UlX|fRr&1(UrDfByYWJ(`FNIzUfB*mh diff --git a/PIL/__pycache__/PngImagePlugin.cpython-37.pyc b/PIL/__pycache__/PngImagePlugin.cpython-37.pyc deleted file mode 100644 index 101770603e85f50e17991d435227be34d46e7a8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28952 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 akgm`XWUP2h!OuSqezl?Vj&rRl%HscuVr3Qp diff --git a/PIL/__pycache__/PyAccess.cpython-37.pyc b/PIL/__pycache__/PyAccess.cpython-37.pyc deleted file mode 100644 index 22c6397b9d76e5db9f16227b6d7ffa07a10de208..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11241 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 F9{|0gqoe=; diff --git a/PIL/__pycache__/SgiImagePlugin.cpython-37.pyc b/PIL/__pycache__/SgiImagePlugin.cpython-37.pyc deleted file mode 100644 index 3be1fb805ecc7b378a1301582713e9d58d948310..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3926 zcmaJ^&5s*N6|d?qx7#1%@ysNXNp>+`VGZnrEMY&R)soF7n~)tM0tvJRnI2c$X^-7@ zs@uto)xIz*#0llNVnMPwAaUbw;DW>vajGk)IU;U*S$?m2#+ghay4A0$UcFbJ@BQBE zYn6(}@Lc`7H4Q%eS6^e z1zopMcYPOiM-)C~eo?r1i+DXz5@k^l)jzntcaw=FQTvpMT4?pG1Jf^wWl@KG89ggv z6+Nrysi3DCnzJRb7FOp5XQ&C8u8O*Ii5{wj7FoW3-V`XAU4Cstx*opT3!ej{&Ux*Li-M%Y_T^S4- zGw}dGyn3OGST!^E}$EQN4?3?#)-kPj|H1tX7qsNKML69!4dkKS* zGwADnjGGjEic9XX8PE8fPmR>bj02uDQp|V2f6X&E$2m4NQCcXi)I!ZZFs8PyIjA|h zRzR(wYc6VTW@UEfcFZXpW$NvhQ#&g{-+RE~Rg0z0t|x!PVSSwag2l$qS>}o2t|33e zyq=!d$qF4KW358w&0JBMb5TAA(`*&7+M=jH_HUw!wkMXRrOXuNUE?X2cQWX$vdmg# z({hIM(p*Q>#4_|sXIVzOEsAnh>X;p?i&m=~U+>b$<%~}&d%vRo>+F}CQ;gm#&nlw6 z(5+zAj=FD|$XDRu?)v^RiNAJ)2E1+}+w%L~b`(+Zv{g zAa2mDMdY%L4z4mcI&DE@ABPSRmk2?eVv~)Z#mRUy8p<>jCv*ox5q`nnljPKru6k0` zgIs;OWsO{f4J_Uvrh+N}@@q>}1rBQf1Lf{H69dNr!{hAR2_}{wP!y$@o@^Eh;A% zjQ|SGC2+%j$1gm@Y=kL1QKj~907yv^0EIGlMs0vD#)x&>-pgm&&x?s3)9DBM!*Qw# z*bL3BN<$fiajLOKxg)|6TAwrQbdoUjZODgG!&OeodRMI>*7P>2$qf)@TD)wy+%@U- z7O%w(UglNqP@m!P8uz$kTBZlCXEaQQLytRr!$6NQsh{-HO+CdHoY!r&;$RTATFPs+ zu;y`}>g87J(KzTI^*9~vzN(&=EfFSd8I1@)3-nz5*vR7<(Av`ey{0U$7Erm%%GH>MUGtgu^L8hpLt$*?o++{9VR3J1`EtLH6@y=am2YUZAh&N;;wINl4K z(kaebhG_rX$ZJ{U6z7aMdy2E3A%l2M>)Z=6YuVB%nT=x^VNPqfL7eYXL%QPpw6^ye zPPjH_fWHgVW!iJLJX;nQvYIGm_S~Ymo*Iwp59mDVbAY!7vsbn>*vJ~}N>)MsA3n(@ zNl}yo3Q?iKZt~5Oh!&3rJIEG>oyN|78YYbq8lz}0?8|dd&>2V$U>YJR7EfM_;x@o3 zY^RMA+CeOmMwG+r6N#ka-NwXfJWd*iUqVUQLDG&Qa?G&e>>gE+=jXuw&Z4h4YVaX5uYvJJxctH4di%<!9Jff2@?sEB`gG8 z8wnGIzw4pCsh_sV{OBPtq>Iv7(eF?p7}_?cfIEO3>+v2k5l|CZ1?4@gX9J`hl+LUm zG$icZPuXqiC^r<;Xs>~e1+sG2>ON5SQ~G%C@+$vvor2=5Ie~ld@|7p zR!=4-FA@1Ju`RN8d57Ak%)}A;@c)6XWEF%VQd0aZ<7U?pH#dw`W3qDcnl^Kdt)?yC zpaChg$txg!u{9d^`$?-Ku2dw;EKlo01?!tS^xk5 diff --git a/PIL/__pycache__/SpiderImagePlugin.cpython-37.pyc b/PIL/__pycache__/SpiderImagePlugin.cpython-37.pyc deleted file mode 100644 index acfdbdf06c5ebdf6335a84c6f0eecab2e171cf33..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6584 zcmaJ_O^h7Jb*`%ZnVz4WU9M(-NmI=gWn-L(Nhrm%X@Zt%aU}-KYON(gWkh+@yHzvW zvok%z>K<};(CdT906`E(fsZyE%p!mR8#&}4Ln#QwP#$e?lJufwIDA(;}|W*i${#gPE9&1tg)nuYUvq|Kf{PiFO0Cq%WCO} zfATMl74&^ct*Vu0e2JMc3-U6(cjnHtylh&q%5;oxS}^Oh<%(RBul#^^y`WacUpmTX zJKd>`o&VJAZ54aFj4>}OyW<~mvxlpSb*_xpXjeaG@>O*ibnPdO+0n}Q6?K{TKwNkT zDSel{$KFS|#p+)Dkl`j|-F%B(O-veI7!-J!ax zbzf&Q?>D)1-*MX@BSDqfOm!>!9b;HseQkx+;=N`|JH-B!eXE zN7JV3*S_&5j|>?cB)jOiA8tR2!$iF{2zK^x-uThxz59Q(H3%_*Ir(OH*bbv>gM-Wo z<9ku^Rje6TK^Pa@;}vcTkI!>mL5sFQjxCVz|33fx^YDL({3nsmK&JdFU;vFY{Ck3m z1mBj}A>Y3w#aryd+MxhHc`8=G)3_?FE%vzj5FAXow5jdTO07if74&WDGwsk%wA-fc zn!01^1ygrZC$&?z#`Y|&>6_F6-@T1GKiQbj0@7;{pl(bX`{ z`TvdzAO%vecol?kPn5uLPv8ODE2z`o7Wxu;r|hMDOx5!NUPw75erQ6(2P(>JjU!}koao^W&O3}q%gk;u#A`uYqoAiU(HdwE6KP_0=I%<3j`M7pIbn-Y z%l9xcCSfpepoYgY%IIWttKmpnIsi*o6$pTz zLy;OD>HuO>2OP^X`b)ARXHb^qq5)zKxFz@{xXt0WDi^?+rEK<${g6pE+^x-fZ{2-w zH0kiKzvYL7F6&dFk-*5DjZOTDyoW)P4jV&cB(8%^DN@!Hi8aQiCjxO^5Y~pYrz1{8 z_Tq@|C9ZUz@sBw$=^8M}>J)%Tf5+J&{LrYH_omLrMmZ!}zwf-y{*pxkNL5HJ*r=O$ zsVhBWRfV)51uW`Qd{?AdO<#%nOs!0{7VWxd-YfKuw~~3AnY@)#)+v#)0ne+bm#206 z&@*SQM1MOOLzusNX3XwyTd~GuwFZ@M&cNnbvuei7PFAZxvCB0!nYkQYKePG|Co|J3 zKcsIvvpBIQvBPF5@^DJ{u#a(q4(;{l@&elDB3I5+DPID;AZu~~{qsvK^-#`1wM5Hm z*=;&EMs#RjHG}$#8^>J;+#nBG(2Y|Iy3rafMg7DN{3k&-lzy&GKG{nhOrozy^+yZ& zph@?MQt1mcU>4+fnaD*V2AK&(Mt&IW^rJY86BQ+XoWLUeU4t~V+EB$Kcm12MU%#_H za;RL-_3}~LWq==w+^Bt*w4L~qsW+fH;9LCLngqSG#5BUCM>5J!=J~QsOuTDBNS)J)Bg;V+4GLC-|IFVi( zy~L(oNBws&!%kGU`;W96;vnNCc+FAm{EleQj^Px>P&tiK8hDv(Mdi~dt0Un6pp2-zx`fZEgF zLKT)w3X?fTKhEimehXbc!!z-&P*>s>Uq)HwU*s9hdi*)YPZ>uXCM!1@^bRUGDm!A2 z#3AAfxHUu=DY=cSU>0i2>>{Ihqs&qPUFyr?TvzOW`QTvHjy`bR?`V_$zCg0WF3Ad#hB)g45FNARn zds(3u>{CU*ja4=A>HOv@XIK6d1I!sI;2~70KrEw6zi+cst9n6|FJmGJ1@5vQLJTM( z@4!Wmts|3&{s2}+d?t0Q^Q>Tktp|I@1VMG)C=7zGf{xbh%tE4|zl&jw(&lbI>6?+7 z5OShlrt=GDO7>1i{~HF!WMep!_~Kd44xOHbHb$|c(XKnFjNUj{g;7EF9S*HB^|2t+ zLXcCVAO|7NALmI|9?DSUD>1%#l7In9?K76*>~#CF%BtT^5*=<2lRORk9mrB@n$hHE z{vErShzKr%8~`tg(du~-oqj+FzK)OTv+#RO3Wb}^tki76tqr?WuQZ#Fhe3DJ<5Ct8 zB-wmkHl>PpbU2^{uW@BEtJ>e`4&(5N!hV`TD^a@H?FTZ9+Q#%VZ=m7LbaJ5I#KQX9 zM2L&V?2Ys^r40HZ5rY3Sgt8O;6_5|{#1yN0@Nf7F??%P0IG*d3OGVEyW2OQl`A#F- zf5HnTBYR$4qqGEf4gz-$%ajebDFghQlpzEB7#Seca!he9kMATV;{7rE2~d}_$7=^` zi8FSo?~^L!g5$ywJG4$Sc?kZi5WJViwj}zbnBv>`uaVvWO!7O1r)#-7q$0HtfjYNf z3gdEW5jsC!dx$rff;;-N9V9V{@&mt%aK-Pp{F{S=n>*bgj&FYSeHg(tqxm`g$nS4= z)J_unkdZ%(RgU1jKH{LZ%HeA?JB)(ut|E|cg^~0}7yU2>%2U9XD@&don1D~e0+!V) znT3=n6a6@|2SKu%xoRJ~i8E)Q0XCW}T)#|&3@|I+-QNM)Kru`@l-Xg_>St~+Kp-Pw zyC(Ib<1`A0vZ#Vvhh94qVeg#0vsqFfbHXj9LlyrL^T%r-Ow=HG8z@AoF7U7LMbz>L zsDzphF>0y@q&<}R8^a|yA)|#;KyHJ)9k9f?grA zO5a$>!W)GsPYH|%ZBSy4R6gTR&MV1WFW6JL>gJagpJ9ra!W0U%NF(wDeFBTPy0EQW zPbQZb7QC6!rA4m$_-g9nDUg_=M+YyYHIlF34i%cQOu>S=&S200(idEmiTBdM9TB8KfdVD_n9WuVT#He1Sr=A!;O&GY9(=!m&!3h!>^=~3ya#x-0wjF9kH=+2NM z1&BLHtaZnTE6=$I4|I>n4I;#xoEUi4c&)&=Cea&tAj4>j*sG~`%34x3dW=ERo)dUb z1hi06Vlc6CY$pzaSBox66T>tZ%?W!>vH?#w@v;60B=h1y7so&(M2OUw*QyP0ffGWL zLedF9A_t;BAVRx=<0VZzJz8eb*Dsz5evo+4jLo&=MLM1dHRnW72F9irn*IksMI?KUZa=*c;W$Kr^f91 z{d=3u`*+tLG~c`T_B#(I+OZwP`Hi1#);*Q7sgVLBBG03r+ob0)MMso2dt%P=%5z1p q=9TB;(yF)S&3YwDu}gwn4&99A<0^a(i8%cMEl`jWphfUY*8c+m?bx>f diff --git a/PIL/__pycache__/SunImagePlugin.cpython-37.pyc b/PIL/__pycache__/SunImagePlugin.cpython-37.pyc deleted file mode 100644 index b04028a8f9dafd02008e3cfc42e73cbec4763abb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1896 zcmY*Z&2Jk;6rY*>wBxiTq)D2Fb~$h`g7gC}&wt~hf+LOmrHB>n*oJ#yfW*aH_%<_1Sj{N6Y=!PdNa^LxLY_c1eXYjLs8@Voo^ zujtJs#{Qti?B_tahmp4+B$K?y`aI-)5sJPQTAVP^v-?iyLbs&-iiO@oCLQU%V$xOO zP>ik6SNx=={KLBPm3NA-uwJ0G^iBo7^Y>V@HsNs5v?}LOKR!@Z%}fuHo~jx~-Hm&y zC{&YIPV&+1r>aeS`q3;f?qlR@5CtpQm`mPuvXz1xU33L}SUVFN_T-1dpT2I2%Ic}K zvalKUbO%~>l9xX-O~v>}-v6|Qm79Hal4CT^49L7?HhZ;bec$Sc#x!6d2bH$Tq37 zAK~{f@(l>ZLM~Y-Bo8eqLi?=bj&zWoTQz1rDCW@Gd$KdS2q<_Q=LN+MbY8X^wsSE| z*?vP2OLoXkP_|Qk%nMQSG0!&&cp39=fgX#(F1fVE)7c)2jwo5=7}ObyW6NkRG}~w% zw5ipH=9ZSMb%oZl-lFf^V=w&%m<8-RxiH6iz-(ZzWy3~9hPMyQ1NLia%SFt;$O|+6 z^S|ZAnV#MRkHh}w8Si&_X=VfOt(l(s$ZCnQD&6n7-Y;GGcGreh2fl1@2eDc}DF4d_ z5v9AzPy_G8mn+jsmF_7&rCe%QyRy+0w3}R|s7vppE*o<7R2+M-F37bjthAPyyt2yV z`Z|+Wm)Wt8I5)Z!!;kVEd5w6htQ4hJ`W?}+4{&v(M*2QjSIypUE%qcP4 zf_HZ&0giRFl4eB^rvWZOpr_~G!TD=C^NCM_uG(ao1YN)h-7jq(p{V$+k#+0NBRmqm zJ+ij%e5@}M#e$%R^Z4PGUNyRzLTl^cea2Np)i@ zDT2>&^PeRQFLD%|C*03^nGVjLd$6t2gW}m}?L1><`|4<*Mh^Vl*{=BR1Oc(hMG|OZ zY(fvG>F6t%Oj>${G?PBHwaU`*3&d&cBtkDArjhQc|A%w#{ZRda0#2KYmFNsATdP=_ z7h5gt9i>J5@(Zmqt*N?|6XnTBRdyfwYHB3k2` zjL6vzT9Y3|Y1~&)RMn#h@ePqpR5haL`7rLCS=>&h`*Be%P3K6eyseV~HCz1wLOqv? zNs98(ix2@uPA7{zxGfAevNv(E{{mAf*Np%G diff --git a/PIL/__pycache__/TarIO.cpython-37.pyc b/PIL/__pycache__/TarIO.cpython-37.pyc deleted file mode 100644 index ed6b6cae971f2ed48332c1a3cd1329516a2cb872..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1547 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 diff --git a/PIL/__pycache__/TiffImagePlugin.cpython-37.pyc b/PIL/__pycache__/TiffImagePlugin.cpython-37.pyc deleted file mode 100644 index 955145baee5a61f17cd1af2d51999fd4ac061baa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46872 zcmdtLdwg7Hc_%*S%$ci3cUh9wT zSN=TGsE{(|Lm6!w8AJSL#uPi835#uIEU_b*2yAmcx)9664CV>X#}^Wrgt)Ewl4`R0X|Ov^%Rrgfn$)3(r_X_xTWe8)m(rc>PU`SyjbOqUVLo2#4h-8YR) zk4j{E@!PDDnLgE&*`iXJt*SY*O|@jUtJcgdsx6aN?U`FuM`nlW%-p8BGCS3#% zvrF}4cB|gZ9<@2sulh23)t1a1YHMbn+Lqa`wr2*^EtvxbGO=^d70XixkvS9Uat0Lj;cE{_o{uFV`_iq6>1=JpE{6vr8=0oUma41 z)t%~yx=Y=yUZ(C*FIPv^z3P~Hg}P6@Qr)kPs}t{U&m32S>g3a*{PEQjH$x{w*Nx0z zehWrz2%|HkhNq+If&A7rejR_xiy!ggYyK^g*U$eT;_0sWb-bVcAuqn>_v;^(`cDV- z`+mQE?H>#3_x*nT+J7df-}n3VYyWsqzwh_!e^}~28`SUn{ra_kBB?4>ssDUXzwh_!*ZvDZ{l4F?U;7^o>i7MA{o0=i>i7MA{>P;Li&zhO z{vH?qtAg^hKP&O0NTdC)miU@KC+q1F;-@6PLVQTo{Q01K9X}nEr~NZQdD?$j;%oU? zUS!?!3ThPVcUI!L{(S!y#kCeubJCu9#5ekN{3$Pf!Hci?{rpAAUkdX3{#yJZ>c3JK zul;_!t;&dZf_UHW$1kZT5Pvm@_x*l+Q4Jw}If(cDe!Q)&A-)pC`+h%uNxcT~)ga#Y z`|(8?zxw`hJWCjVJzln2f&aBZe&6rMFR3RH|GFUF_xtfh^?E7KAAjHP$3G?Gdp*dn z{Z9w=zd_>P7{qJ;o9f~@-p|y<)BonWc#hv&>f-7DnYwuPx4wM(S^it=;Mvb2f1_W= z`|#{-UVP2(=O2~!zdgwB`~Cdde~ynK&~?~7iX_Wic_ z-s+|N5`3ow&NAQcc)p?v!S`(7W9?st?_Ee)lrp~p-}{1mzYE_70^e6Ldl8hX+wyzj zMc z18oZx(78|{N+U_5g$5AcP+=2|ZW=u_`e<)`O!PCnBlVJI|v= zF*h}Lso<0|Z4&HUUMi}*U7pGnGbssa%vPQ$%$H^|%@Ufu=o)jb@q`43@q_%} z(Tn4DX~xbiq`9cd7f;OR+57Zx38NruFbFz4@bW_!#aO)NTrL$ajutLmEEk;oevTkk zXZhmz$moGdOp{)k^Gh>@;=tmyA0&^d!jv;rT3Eaf(;kwg7!BFm*)T(fNjK7TjYF02 zp?gQ{4n~>wEwCyU0?v9K3GpM4@+|V}w5~B)u}1GbJc8IXvqk7(KJkU&^W99wj9o}p z7j~pR>yd`6N9vO?Yj0gv6dmM5(LqM3*w2VW$oE`I@>Q&ndk@_$=3xZ3tqr`p->gKK z1MmzH8&W4IC-zW2_Iy^;?F-+6ef z!B<}WjyTLZ&$gr11 zT5xmEi3btfbAAN&TrGk-%8xkWM@R@3ggJiPz5~ViX;9Evdy@pX*5K(!AF}u9SX!9~ zLpc26i;B(He_~V z+1%7re$nBXTs9FBGVFser^F2h+ZKTPWAHer@w%amIcvpq0PgKRWmH33LPe9|t2hE~ z8Y^Lh-%|}Mw#|G)cynkXR1KqT;W2$U{SbdR8p63tWw&W$_@s|@xGnRAg@Ti{JuCzW zNcf4|yc=7{EobQn7m81~;bK;;?MQ33F(*-rGWSi$NEv;G{c^abIB@*qVHk9393I^% zG&?+N;Ac*oE0zx_v?42HlSMNaE&p_LF*R3)~G)34tc z>yO#2&P^1T7V_v%$#$DmzF1l)6vY#ULt14YX0kAP2q<(H-1gltGBLzUm#t}_Y4$yg z;EAdYnY?bV&*j2QF|UF_179&z=F$imaU*4>j28UjM$)ujiLfa~_POe7ywQ5AcdthpH6ag`8vTqRW#(AI=Xsb<(o)uLKqH>oz& z4m+hfR444_e6#98-WJ%KV7J2VhTR6c2X;H`Uf3P5H^c6P-3Pl1_7>QiU~h%p4SO5x z9@yJq_rksf_GZ{=*nO~Xg}nv#4%k~^-v)ad?47W;!@eE%EwFdNPQ%^}`&QU{VDEt4 z5BoOQdtvW{eFyB@Vef;z3-*54yVU@u_@I3!My~Sg$im`$ej#6U%IRF%U%2V1`CPf2 zzIr)t=hFud984D&JD;D)&8M-Bm-1<+lwQa=QD@G|B?v1B|nbB6CiWJ17BCzveS25cm<1Hb zhGAnnWFxSnu%jeJBvlNlPOME;OaX0VF6PB1Q|6p$UvlCqjO~Zq#Wcb!ggxQJu*Gy( zif(L3=8^LIBb84}e>k2;7jr}{Wu%X$^978roz4|8E>3<1&Y-*d(zzhh^n5Aj9PnrG zKuIzoCFr7k>5}BH164sbudcdLJDNVTsHv!+!n)WXe%g&le|5?=pdy~l7K#9@*#iU)M1Vul zB!B|{SteacGipRl01UWOW~HmHs{?-KhEoUy=`}zoTMf+u#uMxr(p;Q4Ms5wflFp2< zemPvs%BK1{f+=}vm2f0b*9fe&)o`Rv*HzO~UrpUa1ZP~siXQNKgA>lQyU{PKx7pCN zi4!a|Yp!B#<9su#Cc;e}4y5@FdTZ7#JswzfbsbHQ=%u$$HaTJo3rh>>x)ge`28-jU zop+Y(V)V|wji z9znW?Ihb)cLb0SAD3!kYA#FT(8>TOS6D`Q>gn%z#3~`8(HG#DP44~}T_7EavRbxWg zt~G6Nv3TwLqMgmYDwtJc?E=*a8Y<^16Cjm@gOj*w-1HVHpb)}X@a0_jayGku#rA0= z%57Yy&KoQv))#cR51s%pwh`p5Naw3qR$k}rlSretIa>o9k)3xV0(jPrK{T7qU&&?_ zTf+?(GLlBrsC3j%giaESf!`jsN$`O;g{FbHDf8(#+QKOak3BDOkDnNg$J&1;1PE)q z%^x;5Hj{U94(6=B#a7Pt_&QR2wbvtTr=Y8yez8ZSEyYGS}a}lO4lw4DkBJvVtz(D zfEL4%kcx{_aANl70laC?c=mkW^V7yczEmoC?VidP=t6dBjdp@>RYYS5pSgVc_b^W} zx4_&NeP$)J}Cf>~6J7?S|c>_Nac? zz4^`gzI<WmtfH2aWd3~3%#XC=*kHK8UkG6U+IdIa_X+yY-vkAi4As50s?gd9>Ne5c$^0SEnL z!Ol;C9=w));&ARJp!4KqPzRb|;4zjjd&I=#$nbF5$;|+H_i_xR)03ric`=_?z$3uM z2Oht;FMTyHIDje@cRN50rb-I*1$gr5r6PE%Bm(l+c7qVfmFJLgx@3E##L)6$sSF|^ zhZ^K2AZK3_l+~WjO$p9H!bD2)sFR>2M~~J}p2DG>mBb^Uf}SWS zfHRF;p`#cCjaXqEKm@USz(8amf#GXpzq~J9&R+^PJ;u#FFmt_rNZUG7%?n4Z9?I0cL~U#?pidohsn(|%(x@vm8_t(tUtZ~CG9wWFFC z1Gze{Tf^S#iIB>OQ#0u!q?(Tg1l3f@MqP^~OmPvTRgxCh2ArL!%dQK784RJUE4it9 zwQkbDK>7*XzVPyk9X)z9edhp(X({BpM1IMbrra;!{22iaSjf#6Du4yW zb#|;bqZ}^4nW++JQBLdniTyQX=P`A94K0%C!L@VG{!7;!4V73J?hp%8>C5>XuXw!4 z3Q7k!lIlvu`D<7(jue2~phB)##FE^XmQo8&FrVJW-K|-gyVHOwSAm3Kch7*=R&?rm z;SuMB>B}I>ivdW}OiwKK`i7O$d#0ub(gD---ZW5BK-;{d_YOOv|7wjJ2pZ+pq}znb zu$b%u;V?#{mfi;%9Ijek&9SZY7E2iFw19mkNbm7RtkMJ)jzdUOQ2oNw|ABGe4~%1# zmbx6ktmWosxIbl+h;^GLt`(i!@{nzV_h|8C0g|cP=bEQa!=u~fnj<4_4BL(y-i`45 zaS*vw#{d6GNtKh4AJ`4+HXLl4L32gOy0jp0BFMd0hG07Hr-@x=KmHg@tHU4 zKo8(E1GU5reGgi@2Q>)r(xwJvri9?S0N~0J6B4wVN{)g~!O|>epEwk_4r>>oz5OK0 zb0Z*~mL2;|aBnb1`w`ynkcOIp72`Wh?>m`7|6=biLi6>##X z$7TwWp4Dt70aLsvhg64Pe03Nh@JldIr3hf1L@PC08@OY+0Ev}ESTW?I&3eKDnz#?!WYoA(P}FlvivT=mGhhulDXvAF)?R0M%4PmP`$HNH zRSv8_q%2I;_zX3{07|S7ErS5dy3D7DKY$sQckH(!t^G4FHfRr)5z=O}KMY#*0?SBJ1`MiLeVa%>lkYwonv2=@ zk=Ii-Hiy931cy#sVPYRu+}&Z;td&SLf(tIjTGtU%HI8BV&B8_=U@Nm0IQEfh)QLK= zX>jGsm#Wce12Mdj1g9@9UDBPCE!&a>w;cppp}fdj5c|#SHW^}W#36d^Mu$0 zz%bSwb{BR$oY$~8%D`dV*yUVN&EuezYqJ`WFZ?0!ZNRMJ)Mm3L;7^$whio(cYcV=t zc9Dg4>-r0(E_X114RDuI9Nqv%7dymd$OSCAYu38!vGwftA^BR+3T6wiASVZ&e>U69 zHnN70QQ5Ikn`+4$u+Ru{32c%^0W6?7oGXJuWIiZ00XDJ1I3hCK-Z`#Yw$9eVq3@^9 zX4~pox8aC+rK4B8UF9DUXYOhOgz`5~2DgD@PKSBFx@r*!yjgBmaieP5JFDi5fs14l z%Z*DjIv2ZP*z?bXW@Gk)G#SRFcf%;|aKf{3-|r+mh!{C3K-qp9LU4)sbg1fwybkG; zMbtXm1yWh{sZd)SVUhYU`zy$k3i6ype6%6{FA?7y#P39WtRemfh;NaaTZ2>z zsp9piQ1f1-YYS4GK#Ihg6r)Jd9;8SkMRHAwd8Fv@Q)nB40T`({6E%F0ci0ZLC*1F< znya0vNu_R@9Pt@rC4!4K8DGhflpJ4D&8o#8Ma)VqzJ>9nKSPNTrwg~@*y=Zo^7oug z!ewqnyW;-XBVYK2X>&n#7jZE-+p`iwYP0+-=CoI}p(L|BT32?54w2Z8l#TER08r#wOEq%QsN%BlSm=DHc%Kz=`sR{|{~~4m zjF7Wsb*pNxl0fUwb->m6fyhk*WK~3Ufi#o6k3zuVLa2y7X}@f$O^y6>F8VTmg!d4N zYg;k=D}YB()fGG!($LVXvHk%bc);0PX*5ExA0&>=_pfiyGO}A-UX=8T*PZ4k0euWlE(D0ym15VkD#1eYfWpY=SLh2N_IFe zFc?zT&KIj|7aD{Q__ia$mk2srhrT1d9dEh5h7cuV_tLxBDs4jAOUaYP= zYjwGiTzRTcaATmp=fP5K*daW$1wq~c#|+nPUkzZ`eVTCu*lfH*Bx?0K32V^tOUUwK zgADQ4`9fKXzuxP&2^jL>mkdCH><#VaTDTLxIxzQ)pd2@iMlgqqim4|Ya2b{s{4pb% z0gT%!6v2hA-Nk$a!LRh2Xocj8s?vSh=b@g@*+merxH|`Lu+o#h3C5nKHd||R+Jr(A62rbh?@1bhi(10?NSqrx330ixp_7nH zo1f3b&mNx~IWu;AG}AgU@&JOfet;X9ICbXiq?_`>wa*$oGxh+OE;_Avq9@OsJ25)s zMudUwS|=Wz9CD*zER&dd8|!}$jknMs$`9HnUz~9++dofFQdpjveG|W`hoJ0QbOE0x zT3m;^5r57kF6D3vklE`-HCx(^7Rp($%7HuQL49(>L05c&d4*N;A-Fm@@VtNnatu+B zE=Y?-jW(Da;a zB~67DSR1m&gO-Rc?vgdBaEYT4MTQVs-|_XQ4vdeiv$bQKAobwM-0} z#NQ+!5;kU_Nzw)aAsA5-K|+2Dnb!l7?xrt~;6^pK*Ntk{pS^;#0kdyuDpDML&DC_;7q|%WXtk)4ciP#(?BL{{~@cBI{(P87<;f5 zDvfA^WKTnZi);&5E4E*}vg@U_BG`e*EUQXpkRq@zB=W-T%7ik19B#CgG2a}bbTrut$3l**>}NtfAyDteGq{rSHVRhu(+R9+i>YMj zV+e_p>O7{|5Q&EM{R86_lMP^sa95^-D;|tkcVB_EW(NqX{w*9h{IK3CFMF}ohU2v`Ra^4UyEkAt z97hqNB3Xy#1B75CAk?bDpok6fCvK9)vc?*32>iT)Surp0!HyMldllVgr`OlfG}Lxvibw1cZv#`$f2 z6GBG6G1&mdo<$lrj{Dy!GW7(0*?-KUtV{}UD~ppyB$YJKla2Qd7Rx?1%&csU)*3{S z>3WJ4w;(Bj8!w?+Ow;JLD!0F+ad3@OZlrv<1fj1qiokQbQgOyLE>)Ve(0!U*O4qnt zNqK%r>l*Vx0%ouuL|#GHT|>EezrF;vxgfcX%byTw5I+HcBB5t^XX0ctV1clYEL*T&OEc06=8yyKHgDJ_Mr@!~4oYasMGX0&(EQakVLD zB1T)}VV(yQ){bD4j0!Ly5E`FkR|E&dios#H0mHK{N5e=G1jsa!8;jR5>yrx_A+L{uf#;x; zMJs@x5_*j=SDAeP@dQ3AVPHZs_)o{dunh}vC%BIT*yG|3|6+XS19#kaUpF-~7X3|( zRl=`X8I^}g4MW9>1>kqX@eJ^qD(0TT))YVGdm3csNi1@87?=?xv;PAO1l9I|Z2TCm zuPzme`7Z>cVpNX2zy|OI{cC{DDI47un3a*`k(Y(f3Jj|&w~hjK&a#AS+03_be>c8!zX|EWSDQ>?dRabqWLN;d1?hW zPgeUrhSy*B$uad2gnqehQZ_&b^p^5RsJ427SwYGFjuq6Mih8i?&P2DRv6wHhUaqwe z=;g}J^@q7Ji%l#e*vahp#t{6)j*k|Zb-q8J#tu?n^+zFOZq$~>3=MmF<7T`7U~AQ# z3!3ozbxqjds9uxfxn%u#a4dg%kZu0|BxI8<`psZGjLN<1FAsejHNFL`Ezh4MaI^mk zqig>)jP*g=zxNvp(DsTSr?J6adNBxR{|y_l7Q)&8neFrNLjk=t0N1tNF!5&6JMab0 z?S1Ku{t1CQ0!aaPJK+Gh+X~d5;Lg(EPMO!km0g37EnQl4 z(nA+UhSQWefP5lErNLOH6cxl5A@Qivl`cX4%jru?5V4``;tYhYD&|0%5Av8qvvFf* zCWMFUty0&VUKBzU+C?DlAvi&R7~p+LzF3A7Er^($`g0Bop&F$YQeda{ZiwgAXA6LF zD{?Zsj7TpE(*i?aP63g=311dhxYxdM!&v?l9y^mY1$NXbuHF@xf;VwUL+uX;)*Hs- zZ=qZW;&FK^@e#&fv{rD9zYS93Rc%_d?n^2R+CkWEUpziWT?h4zVT`pW}+Gw zw*@o#fy7GU8ZWAws+LHYBv+bnJ-Zjzv#GhH4e3F-oNZohsU{TCyf5?tV9&giy?VF4 zip522vMaQbs-{$G&f@jC?$rve;?dIPDq3*SSYiH_YBTC=t+t>P>t&%8NXo9l$I_g( zRb2j7aS4tKY=$;76faVvxIjz^*%5U*s!^<-)La;~EIOU5U8=2`LW%7<2CfeF@B>jP zQQAz`mAmCi{3)j)1byCA4Ijg^ak#q0l~A4NMVIvAQ)*K+)g3BEogUWO6JmSoOE}M2 zWdHO`pyi&lZ!gC0Fvf4QTyJ+6$Y+Eq9c-`DS51)Zpk+Z6VqTlL5Ypo)O!MwB`&(Ej z8rt&wb|a@wjUFl6x6&P3D$W&4SBsSh?q6`vVy5?0lKpsb%&Uf@=^q&V*bDpd*r2?$ zxCl}i*Ds7o%b{qeQADLRJ&CKEQM~e^xFO2uK!%gpTJ>QE#& zL9`s{3!^0JlIxJ8X`A4+(tb=-AstQMuJj(huYZgEI>fk^lb@d#K|%<^=8AYL{CWi2 z|1S-0C4F@y><3}ch9P1k91AxNS$2I_0|B-fWF+!`X$ewG<$Qk5CN6@9R^{BZ-rE{U z{|y%Tc^bT;klQG`Lf2C?{(;6rF#20H3jbZWU8A6{eLg@>WD4)PG-F;wcqxPi$F)Uq zgcr&)nZyzw{t9d57g-=#vaZF4>26d@vaSU}U~=TtUlaI@A#Diax=CQAyNs=14yTOm z;GghDs0+Ll#E_!`Hvtrw$0qN7wpvNU#QhIV2wNfVc9XY6%!Q|;R46qJ@#gw>FaxYo zuIvKn)rqS4cuJtx&aj4F3NOvcPRD9CSIikQB^d&LPw=`_nO)$(sc;Wi23YHW4a?sl zd;>$?y6HnS7jzsT7lc5BrJpY2OwD-QuS6fg8dDl513IW$vx@s^lHp$ znoZ4_r4KoPHcktKVB*!d{f{W4RmD*1=T&?qQM43bozuo0xRPAn!FE)kWQ}b(2^kTz zqlr+gnyfY*3tjmZ_IHvn2`y+Y?v;`|L}16NMj<>ysk#=F(OHf0)c|fvT8I~{G&@bJ zU2OO4rj^!e9FXdWN*0q&H+mCOO&F~AR-!l^nh`$fY@@~rocX%k(CT)SjuS&| z#;9T~$$3CgAHaUr$a0Q_mM>Prn6t_H@?E>9;%{&J5B+AW&aO2E75Z92|)U_kl+5F zjI0N*I~eeM@G87cn>;RIddrz0hfQS{9@#p$QL+n*Y47-uw+`3v4y52~*2rtnV1Jzj zd=G{umEq{WMN{{}^7t79;1W|#Ap4#4q$VcMj*Oof9-bJQoY3I)e<9rdXBz)PL!hld z_FtvZ-ZDI*OqPxL&B zaK7Lm!0#4ufo`TVcA3dA#p=5O^5ZxNwgcpE4JQHiqeu_%AMP>+5E6&YL!-sqNdDa$ z@Zc!0&>SvLISP0t0ab(KyQpY@(h*1i5U7T5-wLD^{9%B8*=&+Zqpq3|khDNl0lIMO zN}|AL$D->{eRFE`IWB#zqA6;BA8t1yB#X_LCVH)LnB@5O>CW#mit}f;(O84hTiiP{ z99CisA)JwYJW=s)qqC41K*l|R)S&7n8~Q5xr)W4d4$zP$k@Cf+ zpt43=a2)&XjQcqnzd&P^#!VU@rtu*fzfI$JXuO`rS805M#-Gsm_b_l1f?Z3sMT;6S z`W41-4`qB27)ra?pJwo9m?1Jedgl0~{cB7T=3}KlXVm{g<3G~)OB#PmA^cN&6*#W}_@2T+J!KiUBmCENC$h%8SdSA4s*84tTT7K3@4?7K zHMKhhckqXWAb;i8!t&pPpTk5B)S>8tc?V z)qE(7F(FNa2gPO0KBzsjDOP}_hk^5!Vlvjrpf~Sb_L|VryZbVL(3SH2M1;RI88YG{3g^t=nbB>{WxW# zdqLYUM?58Qh|{Vgz@K6$R1;0jm)*GEB|)*)9_=x1V!V2MA7)Q8>QYpn#eeIgHirhh z9KrT7Q5ol6=AB$it#?P}osutjg9YA`k>xvbzP+N`5;u63aD!X-lU@VsOu$cj4Xm>a ze`0F@-Fw~|i0b287Q)*w33aQ1M1_BqM>Kow8i+V0tbkt$RzQ{!s-N!5RN(6V;Zs z^uqCiZx%HN>s?5uN9zTkEb+`Q*EMQg8BsP$zgPS*+w&zhBETlIvdB@$oXGi{Di|*dv7PRjpT9fHwe2-n!sC5F?$@#3IOAUo_H?rklyrxEe7@! za_T3aQ9SsJO0N!s$$-TvrNlr##e(Oa#cB+UDX^MqeU8^;uQlcUZZt=e7bod@4~_T2 zXb@%>DFvZ!Kgf7;EGZRF-2>~r@)YXjk2qS~JGIxHNzpja0?Kpa(FUUyFA6V) z8`Y|?1L(GXJdUfFP!{_MCXU4Gp!2!YDE}Ww{JT+14&bV0k?^Adf`R(TCnO2iOaWkI`Fxcj2|oUTwic#ra#E|!U||5Y7MDD^1osg4m|h4t&03?34#QRj zx0$hu*kHVJ+ZphkEn*|KR5IJn!JnvX}pjv(C*GvLGIcd2bVL z6?LJKbJZ2DbT)KjKyn2~CKmzMsw{#@I5?$XKF94bObjkrsr7Nyl?DlkB`bYQDG*gF?Tgy{^o6jcY-()QNANzneu%og-ny}=B`8P2wU8|E zV3oUZf3V_cvX+SziP$z^D`46gYnQyAya8DWdV5TI%Tw>BQEs7D9crxr+mxD{pagN@l9!0b2h~R4nk!t)Uv(|0V9dK_fltwf85fb-){K#i zV+V&Pi8LV$4>+Cxxs{H_Rlvp7Ff2_-EsJ0;W`om)ZW_yO4TGOE?7!pyly^B1t*nK& z=GgOmdd$J%?Kt5C@5j08jn%}>5O#jtTL|KpC1K!(-5Xrk;Z;6p*F((`In=}8Uf}s3)rfi*%zdM{QIw20yX#|aFAMzAJF45h zgS$r{ncN}BX6i?n8y`9|tl9McjJegf1)N;H{kY%kW_kte2~(0_Pj;x=gjaXDA|Nl= zDsnn&gg_8KLP#j`1n#!9=)jC3g3$bLeq6Yb+&7UmRdfr9l7R^J@s$et(@phzE$A)8*{fEWxgKIVn@6`jS$@-ZrjGw57!9u}p6&ESZRr4mGo)gANZ_z~w;0TZ~9N%sm^p&EZ7tP__FqGfsC!gqa)+l(V^kV z?AehAPEBT#XU|L?pB%~_y60dg^Ix>=eQ2`Knhn{IOY!(Lnz3Qk_jRI4f01ZkaKNb5u(?euQSIsqQWR>Gca zQ`r6}Zk$aO$78FIK<^fna9SznfD+nnS}PW$r!2?`grM#Nx8hRXK9tvq^8N|3Ke*(p zw4nV-Ds%P5)B)^04e^H|7;l=^iXC%`0kb#Ze$YS1|Q4Hx9y7 zZf`4hUB*pd+V>8md6SIPTIZ!;^!g!)*2L(itK2EsbmjZfcvv;hb5Q$zC6~S;Lj5|% z9uRKB^y2hlT`{fQ#Yd3we#29!0noW9lYI zfWD@(Xb%^9%me}-R!fWa38ork5lvLt3 z``0B&1Dp{ER7Vng8%gXTmM7;nX%;umK2UDcK8^@TQW0A9C**JgDZK0epq6c3TL^mK z#=J(jMn2Q5K^wK30;;(Nba&y-W9^Z64CS6D>^h4=NMG<)JZ|AJebj`I6h6#iw1g=h z700hj#H!jLWYuQ0B$GhMNrB)=z1bFqaFy8wfhuTD#0@)d-~su}%9ci)wBZ~Kz+NA! z4#3{CAXs^0Lk6P_Q5+541nmP=?O@a0#7iq|Eh3-{i82I!f;al(3K%?Tnpu3)5lG@$ z6%`-jpmB*pSq{!PO^}LHa)$Zr@Qg#45K?uz06wN|m5x*REAVhWDa5m8t z{V~*)bRWPB?cpK>C?L?)Dw>d3d$*Lq1A)FC)rJzGF9;%31X#A}0I&qwt2!nBQ>qJo zj4}nqP;czI0r4H}hG3br;MWljw^!q@L;NTXF;}T!wpVy^Cc)uOW4+VMG%vj@mRg-Fml<{$O+e%XHtR}IF!uFRS5V(^X*|D~g zYL^%KEeYMFLm@oKHtmKPn!SD6S|RCm>*_A(ZKu#S_X6#XX^Zm??P(VrNsIEW@^)tr z^T8d#_pE|&axi8?&TgPQAl_s~`>Wjj#M9dqP@k1e#T}AnPc4n=$J}nx>D6AiyO#g1 z+6f-{H&?o=t<_B!5$-e#9IX}# z{RBow(wms^l{UB;3zW}~Gtd`M$36pvjO&8&MIbA8oX1C@N>|J2)A*D{ zEj$8& zXq4a8D6OvJDjlAjdwQ|3oSz3zLgmLQsr~o@*H!T#BYcYm9d$GfmVd4PQvVF9!r!-F z3B+cxFmv|v+u!hCAGYpylVDJl=9kEtuv?J8`w*vmYZHnL_+djawR?2fK8e9E5HBha zFA{36a!X^Qc@+W7YzBOWiV%L4&3^lz7X^mI)D(0-mpI`dyY`|D@}XgccMV1%JB7z}La@V3iA4kLt$`pISn1%6BAI*lpPrxJ|py~+f)~fXEb#)<93aY z9v?e?HamD`Yb6Sm)yD7WgVs!h)Pn`itJOshfK@>kZbQYC?az<@#Vt8b9^vv0l zLuc!7OJVB#5?huWIeq+rq4OgrCr{z4hIEe(jXf}V%D#_tC=AKe#PQSPpvupjJq=kn z;W)j5<40zy+k9eVa$+3Rwxn@WLl;1QYtMuTDY%I<<3nDj1v~yH=DkMa6D%NgA&Y@I zGkQ*1n|id~*IJ9oo*NsPw27O$sk1}JPi99)PVj2L=9iT9bMzQp!rlVT09E3XBcou4 zi5M;NoH;Meq--se*5aLWa%6CD{OlPF&yX7*JcBVheSF*|#VyNS-ov`FMg7fao8M~g z@AJ5@0x>cPZhzVRnaDD?cP4U8tdwm3{IF>EfP$;Va#kdmGELO@obx;qE>9ucFm^cf zt>vzA``V{bRmNJz_RCn;XhIWPnGYgdFlUWxnaF(Z8Zh?}j$X_cv;8yrjH@C)DN2!` z$DN;K2A{<*cb4PR$gi+pj<8P=-T!ms4*_YXplh226d#{hYXQpM0Tv#Ay|`p(gOF?o z$brLA#F2#oR9}nMros@owW5?nlz&kW1blHpg|#FOI^>lFzv-AlNE*LA_-zljnJr;z z?&>h&%}H}BYX+l`0=rC?vO0{k*^69c9;QfAfT$2fxTXd2gTx8R6Eaw~qdwd%qK(ks zMaCn^4V2vmlBElTN~LSPog9D?3`31yb^@Ntk!!>pdDN)r zhDE3^OhTo1O=p7SxV#^G{?+g|(IK}(pBT7(C{IChUEumFxg>azXdj@I8o zaIH^^P=OAL`VSPzw8C1u8*9zPS{wHs$Mrg4p@w+{WAgJH)r8POSabDHK}540P6&EmtInQAKVAxg8;f-Bw>o)F<7iN4fv+N;eDo(0+8!?T%A z+%h&V4_BLkW#0$7su{O!po)Pxw;T&y>#8=-c2!$gGHq(Xz4A{OhfSag4f09&?@@$Z z!0&v>!6y$@voHbw)$*{@_sdkZqR|y@eeTdnOv~lkN(z~j0gzP~` z)JykqQ13~nA0c?a>ged%Lq=-J;T<652^0NZSVdT9Hz( zo*3H>8tT@bklN7)mrzCEvdCIGfbvNti63#D)lPLAXqvEn#5p*7h-<<*j5M8S3v7Ha zCh6RXI*wosArEMfq;nVIQ#Yb^926-=5iJedpQTIf1ZCERwbqH>zDK35IOA zOxNw8^TPJKoxAz5T`B%m3hy>&~ za*uXNIS(O!#NJWevU-N!Si{4%0noy|QqvAeF)k^NIS*FxiDfS)UfrTytQW9=vvB~k z(OW+o7!yMsL?0sdqB;c5Tbm!hvaPyp_2HWsb8sA*s+%AUx2@U@PStkjfz`8;?{IZH z>yI8i)Q zR|w`d9-tQ(CKM_hp-kMttpfGlR@#Yi(8cdxL2)f^q~#KM0_pgX@N$4toJB|`wG3?l zKKYnQU90!C)?)C%o`RE!mvI3FA^W_W02P?W?chQ_6NQFIzSc=hl@_nz2IR71^P8@X zBrCeY#@17ZazcC5Sb*M&7CE{JaehLVKpd8YPFHODm-}_`D6o&NT zk@OS!I=awTH&?s(Ebt23jqyX31?Spx3iVWaMvAyJDX6p;%3BrcYpC3{CP3?I2zVX* z9A0|&>|%aqcRf3!vUMW&1g}kSbqUkEw1KkWDUubH#0WnbB2y=~7eWMn6z!;K^Qv?X zmWsH3;&XWDkkqO1tzf}`K<erqzA@?z0Tqj}_LieLfEnaPDP$+0*rPsT(f=WuZ zNppTk(YtNHMDf;~-!63ui?|u-&$x++2htC}!9hrR8PBQqNEK%;H9-#LW4K64MDwW)>b2W_$5bD$1GPm>W(D2aNp|QcC z6QjomA3A>u^X0b5O+CVg&y5Yr5Je}>o!~1wu1q&U?ZMEPjTa4(smu7@NG9dYFqk4| zhx8@hVbq)1;;nRi8CP^UWT$ZFh(``&B#H(@{n(XqyZROEC+YeejXPPB#pk#B9?x4~ zZnNjmOh0>see9&sMI+8!kQ>0Bx2p)~zfIrjeV0Y0^$r$9aF+>#17~x8W!mLgZI;h^!6||Ug|b~ixEtneUPK;hf!6?O zqB%09G8Qf^%NhSeSbP;N`&~r1rT;rv5t#_~|IO|gW!t4kxF`Wdr%Ab=N78o@+@;|N z;nJ@UG&Y{j;wddYjmE1$C|Uz8kE=obks7`gZ2?6NUIInYkfZi533|T8=;c)+!u@Yr z)okzz0_8?G8PZ-J>$F4FNrl0>tK5b`3T zVJlf{2YirBW<2>AyP~uaf)+y{3AV1EQig14i`k77R)n=NMHk*&Qn-nES!0J>il)(5 zo1-;_aSHx;rreKT`5$4_B%75eSml$+Iv0F1&5(H(`DRKstES7*jD?TO@}njOq@cA- zb5v2D8S>AbJagQWXHIzX%t=q4xhbETZJsvN7PS?*TZpEM)UzPzkb1sV?V!}Nx=rnb z-Jxz*yI^;!-D(f)F4eF0!rr9rQ2StatNm&Kc8@xs4#MtLhty%%o7J7_2<$#}m%1DF z7Im+BnYsrxZdEVGxq8g)JT6bmaRv~PI8P15vaCI9Lm1&?dJEgQ(2gN2aIqDHsT{-k zU5L|2z!(nbXdda@i-Y);pMb$nmr&21&09wZGm3nYSsWH0G+QIgyw(fa7_!**VPzFf zioY-=u<$gnaEi9ztl&SUQov~$>xsAki(HKYd#?M8rC?mqF`L)(!;_Wp)jKX#!uB1P zcqxzeixyQViWR9MC{g0Zb}b6=Y7v9))1SBmebPmKEdVbOMZ`|)zJuDOqJ1YzS+gHc zA=g`g_y{V)2L#-M+(A&cggw!L6OqYUTK@x^OqCDzRX8fWJ{lFsihG~!>~GOpY~`@} zAP15smK&cK8hR)T^$KpUd=+l8BXQmN4PO%M6uxpKs@FSFk z@-W5A-2`T9NIv=r1~VWs@K#~#LD~b#d{9^!AD=HxmXHRR(lAP}KeEnr{vyKO&FS2Z z6x3lrsfi8%qp1Awa2p^-n4Lyt^Lo=NizYyJxhwdSUGX|NIHz`!qY9Tn>Frr9?nECH zXo22(j9^xBu zkfegbsO-OGEAf+g+h}C`#0?`8G?Zj88>+R<&6>TQFmG6|K>}=>YjFK35<%;4)s0o} zdSfMm#oVI&qs^g`VcH7^)O=uL0)UF_`K*a8$4x1pp3_f=FoY3b$T%u6&A!PYWV`CN z3ftqfrJRW`=F|zG(ORFd9u2v&_ymgo3l4<7Z~^X$ z8>C*~dzCHgO``|e8{Sj|>u7-E!9!Cs5C?{0nUaO92_mw>`qq#^o_n_^beQMbN(CmhW$~5{cUY>i6sL&Sa%Bt zr&+Kw8fJJB%~~GA+5`0Bfg!4F$X>;faudDkWe>yS>@SWLvatllVWoOU20pQ%!d)RJ zIveBaxIzhE?k@CO=2h^&TTu%p_mk|3%&_b@!gX1vZh|6^6QbR|ZrTUWo%L7xuOO)# zgZTd>$-gzD@o_|choix59s<5ZVQk!00>EzsF8rgsVVXHGvSGPWIFb4l5jrD)TpG?5 z=+Dgik!)>S82^2?g=+?2b={*~jT%^6>NiiQ!ZkznMWp;EHc#L=w!!*~CYX*Nzmc5xhDLtjB{!1GB!tHU zwMMRs_p*`12ZA}|`~?Ha+0t{k7IZnde?bhSBcZaAN-a!z6)_B(idlytTMChPK7!I5 zTv^VMvFH8;DsHtVv!<(d$-y_=scW^;S*LyVY7PghN*@8C&`*|Mg`>!KBUjS%`Ghy2kF5G8#bqpncgOU%rqCH&s1#>Zt0-3RrSV>;#Ks~%* zM|sdF-io(b#Kt;2Yz*Id5n)s=BaJ_p<1EzVF#+PaQ7QA=uxfc_v?CHgrILJCbsD zD3+Q*MI)r=XEk`+2jv#?;zX0Fx_Mq0+LSK;0x4Il5Ma|qpdG7WtO@ys{VX+r8N0&no8e z(Y`!{oQZ)$3fso}<>HK7Zpu|`r4{-`aLuqR5WN05A3 z6kle9teo1#lHftV$A~0y%N>^e6?(aX0KSG9iXMjSuhIBA4Ot~Ix*CslYG)5Uz?l{v z8_|BuwWxpw2PF>W&r~P?o*VdVm385EZIwd5C72etN8h$q1j8D*cTSkQdSOA|aW9eaCuciM&)xHnu zu3#mW*{FEKT}zI;}CcIVYDHS-H(FYl%s2b?}>Ci(#P(2goe^9Op-Fn&qlmt^;^C zq^FtR%!Bqwk%+=590}As-u`hVlMy2WYpP;UaH2^7)N`&Tg zB`JMAKzIME^csE#5|KYKgG-DV&5e2%b=bcF!)=`^%~M|n6%GyLE=}1y_W`oO%9Ajg zlvsx3`lY;Gwt0NpgqSXFBIzcjqJ^>v1l(8_pUc8y4iV&+kL$S!+e0;=yEeovDc#LT-(s&h(b2Q{iJww-Z8cj5wp)pP4%`|c} zF3}JfgDJY+PUC4BZ=mr;7?}iQ@K25mPM$fdZ{zcfxj`dKgE#n@Brn$|kK=pG6ZYE} z`X(B$qw#tgmtkaL{H6zbVL!#7pJC8ekuG>J3z7fhSx6Hc&+=Ly_u{$RX zIp4`nzlE+>)8LV3AEfbe8n2}BZW@0~<4zh&H2#prJ7|0ih8x2{An#!}vmqTL&(n;r zg?U$4g{*d2=v+vd=HR=jaskFm@wzas(oB1h#9y?T&LBwMw^CIV8dI=UPuzet+tC+tV74##ykBN``2YbX#8T! Plc7@l76P#rpl1IcpM6Pn diff --git a/PIL/__pycache__/TiffTags.cpython-37.pyc b/PIL/__pycache__/TiffTags.cpython-37.pyc deleted file mode 100644 index 0e61346aac1f03262c5e5d807c7c9cc81d2485ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9431 zcmdT}d6*nWb?>=$=iFPD5(CNRCKm}wfZwaG*&WIDmybU)`@LUP zy{fKy_3G8DSGALwOwz#b-gkec@`bw$<2f#Le{VtNK9D!jXBcEqsBSbuA`~)a3<^`^ zF@qv9L{W-e3}1|hF!fRYV}^)OTtq1$Vw4nploI`v7IDgm1PzEJ4T=;Ei8Kw142_5Z z8Wn>yCWdI6?5B7wLfd7ZN_Xh;PMz)o-$4CUT#vs5B`HN|%Fu4Q`ci)_O4q0w9%)jid7Tz?IzmZ`Vf7XK0?pXN9kkqary!JLHYze zOP{1q(GSrN(~r=P(vQ)P(@)S((x>S&^i%ZH^fUCc^mFv{^b7P^`bGL2{Sy5${R;gm z{Tlr`{RaIe{TBT;{SN&u{T}^3{Q>NL~C<7X}^ky-FbPzNIUpOj9FB&1kGQ=1-!yv95 z1#x*BXgg>JXeVeF=qk`|(AA)8K-Yq<17$(igZ6-K0PO|c2zm+VCeS|6IOt~3Euj6N zTR{gvw}Ea49Ry8)?f@ME9R}SAdMW6xm3?BH-1Zd9bLeUKc%47olOOKM-_n!c-;=+S z^XTL5va#=;kYQ}_VKN@-ByF=H$!|65vdXOPFQzlz&B#bYK=&fN%%@2I<3*@F4{F`zSG~b&)Uv8yNY8<{Wy(-A|UT7fNxwho(ioS z>!J1VdSpGi9&2v5jHkJy(ENC~6Z2Y4>2~@n6qB%)7JMFY= zGJVUjH(3)0?ml=*L37PtLB*_f`jlt+^46wVJ!>xG>r!#{wk4}p!%V#c%{74m!S+jeK(C3oyfBEp^B&{>ou3P z=MHSbAUB9tSN#f4`x=x25u)v(t_a=A@z}h}L(k98kN0=tkPOPJR65B@rQuMk&iQnu z@<_|9>l&!gt2;has3z!+@L(CO*Q%`7QL!n?c*xD5-erkgUf&%cPc3*T8Xkx!o`_ep zSnb_v39~#@mKQJ^tY4PrQH6b~AEybBQdeLvY%P8m6yY2}VHd-!wDEBJtH~^W_cTpj zX5U=CCtI|Axr|jtA&Y)bOE+lZO26gW-aT1JW5HCF7{MmkpPhCce7+*HOSzeH<=8}4 zwXka0rsH|m>AKvnI^nS#G;_~cp3I(Uc|IC6TXh(dy{x_uW@y?J%(BM)a-Rn_zc1EQ zLl)2SvbN)AU0HROZL2M5e|C@FK6|(_5Lr^T=3qXMjy0E5J*j0Kk7DBm0=q*{nbLPB z$}H@L2!_~NE44`2F^+S#)!d85fzc$~-Njjt zY;cgekz!z5-Cz?C1M~7+xplgRjkbi96{+4rve>{DI&P7_B2p?pt2VC4Oj^EIl5W{- zz!!;B-f1*l35`3p6}tdm)i2UV?W*QVYRB{W;?h#~AhlC7uG4B}@5oM@=evbNTo932 zaa=_2FHOyecnQ0g#}Kxk53 z9iInUiZr0vgR z`Nfb@U_p9S*J`p86VW;ItQ4_1hh$x(%a~$wp;q%Grkz@FEqtgZDh2~Jv%*W(d2YMt zoKx!OPf*RtDIroPdkUkax@ntk-mz=e za?4f2kB3DP3?B@q<%xJ%@}~7AFVeD9Q%jsEIdHl>r^Lz4Y--w-vOA#xF7(JaG~=3U z7`f@#o;+$>z8LQ1aL2nDv?unUA13&kegzTM}orC8apOsXs3C=&!G6pDjyY#F6qEcp^QoCcIDs2ZI$H zf6=s;CCt`zaVkM3-aaBdb>4SPZBei~wS%V}7lOi)uCN?1E;pS_SDQiKN#3nXCj2Z$ zsDtMjJGF_p+D-{q}1O;zllI&amA(*=<%=JQY#`&^NnDV4ca z@#jj@$E3?%6n?q8n(Tr-(LYz3vVC_=q?H>vS}e@6y{48NnBp`JQM4JHD-~_BRxLtY zfbYdX$+UYNNt(;6(yg1#$`R39IwpoDO-~-PFn>LSU601guyC2Pmm%x`x2eM+ z>O~uYv@mb8Ua-0i#X#=7PnDLEIRdikR4<% z>CQX8ESojyufZSn9ko5=MU**^9A@(%rfm6ZWe6k1PNk#!=WtSBhnqdyX5jLg@s*9Q zV_R>0g8_F8!wNBk86pgQ4E+poh6F>BA;U1hFvu{(Fw8K*u#I6m!w!a>47(VvV%W`a zHN!Ow*D_qkkY%`@VGqL%40{=FWZ1_r&TuQkL52y2moePS@N$M%FuaoCK875_BtxE| zz%a!y%P_|<&ro7`kYSOb%&^38l;Ie|s~9*gwn7YHh6qE9p^u@TA%n=L+gtf@rjz zL0(y$I+j&Y`FQ1aRLfcOG<)ZurE;~r+1n|62!Gb(^JlZb2T?n%yXTY56C)}%P`#^h zc+j!p{LCVPnd({TXW6_tFm8`3?sOf|>7rc5_Jbd3?=HHgH<{gZl4@dzcn~j~7elJ= zB}=Lek3PiqfWy%d0#`n{9Gm$gGtzlLt`#f@Rty%)3*bvy#F+N7C!z~e`Dq+STWwTux~mMYLZ(X# zEgvUzPqo;&h+w>dV2dPm$AmMK=W#;n&c$dqH;ZBX7Rj}>wdXV2_-#9~RyU_}Cpa!e z$E(4FE@R`c$Pu|XnA)RPv{n&CioHGjqw?lM-9Q807?&6vZNrLFY{&u_KHnk44vsqz z6yQL*EC3VRxq?TMq~q=&3>;L>tn9Shs$@eD!{wD0B3xJLGKl>$Io!!{fs#RSa8jL9 zHaZI!!(C-fTBc?V;mp6{D@^tbmaXg7MH;SEBA{4iixH_=KKlYWL<~0Q;kq#Gz!i5R z8U20Em8M8+`g4&w>PZBfylg%mByjx7su&4UR^q0%M#1xBm3dqG8dM`e6bR%`U2Lva-a4{BA-LVYS)&2$$i zu;z?1dMIAvxr0QK1=pHSl&jJXZgELmT}mdK0wRe#uDecSQN5wS%r^a+TD!E0VfSY^+Vy^!nJMIED|1szxk7F!CsL|7 zzrck~Y{qOf%=V6js$|b^pK(rSd!%pgrr3o<-%q)*- zo(>G`;0y331ok<#)XgtA_zpggGa)iL_+)3fyA3iquZ(AhdD-HV3bm@JcFKv9L8Q!4 zaCc|oIYh_B^A6sZ#BjH`W$%NN=9+Y8a0j-_Fb-dg>URb0KW424n0iW=*|9QOb$=KN z?vs=C7M>%>!d-kg2W!gJ;koey5WLI`z&>!*TZLy+N5b|V{S@o0NghTLlzE-<{F;qz|*s7UY=90Weg@JWU}91iYfxQSsO!|ePVV&WP3{Nn; zjp0cK<0(LhAyB@8z)>|+>bxS8P=hW!k; zG8|yIjp25NgA5Z4hZqFIs~BDls2chgMcN0-gS<0<^W@_d|7oLOJapnz_)+6gyysJB zmwK+g7Z29!p^Ny>)!DFHI=>e+kzL)^V`v?IG_oG%hwb%9Eqt%>$X&+`Ke~?pw5*5T z8-6SPQL=7;n>>#H_v5iUI`87%WVqKcTniYFx%}^hP7F_$4bR=h`AA*b>KPbs!=baC z&}t{_odvC4`4XI{=$C7`f?hp-$u&YF;dCe++8!DTyDvrAJ-~1q;KlE=>K1#&Wp(SG zx^?lp;>NmlS>3vhsvD-dYpR>$a~Ck~)`j!ST>K(~x>A0LbN55^;6|wKhUz}6?uP0* zn&H|IuH*CLJ36TzO zqm#2!B7(S3t)N;urSVQ|>11iDEYh>Z$))1-bS1yAIMwNMWy4vOJxi$m1rz)u=-!6< zPtGgGFca?y%q$(*o{8^_hF;_^5)bLWa5#j&06B-hc=Y)^U9|8A$g3Pv61!%QxlZ7{R{m-sEt<3(%%Hj<8}Q+?6s)Qh+H RmTSV%P&@)hqMS)O^i4N9biDuo diff --git a/PIL/__pycache__/WalImageFile.cpython-37.pyc b/PIL/__pycache__/WalImageFile.cpython-37.pyc deleted file mode 100644 index f442b6ea5cfa821b5e315d3ee93a79073fb6a77c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2560 zcmZ`)&2QVt73Wa0D3f7GkgO<*`WStSvP9X69mT44)y)C{76^iDv%oF{16oR?EH;v; zl5|`L@+sSM?=1@0$NmF7^iScnryPskdg>d>n_vrc06q@i%$xV|`_1EXo@Xf-qd)&^ z`j=l()IZ6`&x3}^Z{P_|LDuYnda<_BOcFeiA?pgkP>ArJ<-nUoQTW8vzK7aFi`odi~(-)q< zwn8&lhU*n;ZEU=>z@_7WJ0}Ri@wFQ+v4t1TH4d!xmiPj@057~N*nJhan@fD@d6z54 zWLeY18!vQ*Ll(n`6IsL#@Z8$K3Y?6stIz|Nki%+q19{H9%Z>Zqu{${M;vDy>$0tDg z#L9OrT?od9aNsy_>g>ZBZf}N*tId4)z`bRg>_@05 zfaegNui*)XAP5zHqHa-0?SKLwXg{|@JL&^^Lxt#$23_)={u6skgO(=RZ>ir>KT!4o zkRoOE2`NZDUwW1eu>2vs^7n{CUNNBkIK59RBn39Mcz%OzXJK8f!p`TtK?pcozKyrm z$_YbIbgvn0NS~whuubf)~oB|43`p9c!~TbHBGt z{*JS`5e2J{Z2o^&Zx40{{@-^8JF@FB>`DR|gjXMJ$lxO;qDDjuM1)@ZgnB+{L6Zbf z{r%$yUVOJ_%fDl0MoCiHkI#tR55(?p1ItsQG#*7sa_^!9FgZ#Fj`P+hES_jn8*b=& z>pMXJEoVCO*0U)vW&U<@NSe;<2KvN={fu+O|DN=i{sZh$YTp1NY5#`fg1PT*$+e0O zg6+x;qoli8ct$Fs7uzVcj2j<>06if}d5cBhgcI6b`;Q@~*=mkf9(1+fOLK4P3t$z|{_K^J zh!|+BaLfECJ-c#OA&@mn5+hhj6Lu36`~n#GDiI{jy&%5*G6)P$5dVMpbe2VF`Z0?2 z0qHjgA&%oDNm5l+*Y#qtSgBMRjfP-GEnv$M0oU@#mGN25`#C|B|l)}>NT zENG&x3b~AsRd`kAGZL?eoGfr6&k7vNa}38a)oPp~T@==Cw{vZEH$Pl^YqcCJSYWFNs`UU^Sl2aE!z< z0)t322(^r7jpoyO+h~*F(BYDK>=OR8+swZl-o2?qzF&XFM z@yU4H9*^;Otc*v}_*@vDapOKS?xHW+=+_N&UPglgI?bVe2K6M=6;PW)O$JpFDj=jH zBqH<$LYg)nlT^l;4Dbp_#f{AN(ZUuyGhM)2Z#vr&FI? zl!%J^7bs`$#`16cBq)862y&NviHOgaES`~@7NtjP&%RnYUuNMezHUi6O+P}95^3|l D-|02M$$@hLr!}*)k8IBI5Vzp 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 diff --git a/PIL/__pycache__/WmfImagePlugin.cpython-37.pyc b/PIL/__pycache__/WmfImagePlugin.cpython-37.pyc deleted file mode 100644 index 63784119ac77fc5d9d5ecfb9a85b897736369e39..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3473 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 O#rzn3YJ1-DoxcH@qFi|Z diff --git a/PIL/__pycache__/XbmImagePlugin.cpython-37.pyc b/PIL/__pycache__/XbmImagePlugin.cpython-37.pyc deleted file mode 100644 index 8055fc58a5b47708e247bf06eb2c78a12b611a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2047 zcmZ`)&2JM&6rYd%^2QFqMNO%qXhkJd2N9BTK(r~KAgGXN8i@;9JFGT4V|x?tt~_61QTzf+5rPrSN-q-}w(zWKzysw!z^M3DnyV39od|SW#75z{n zF(qA3VJFct11g+8rGA(tLe*qTMJ? z5;?3cV`K~np$Z|H;PTCf@;flf6(Ev?RFIGf8gjuxOK@QUx&VK0M@QG+oPjZi{PFhJ zBmeQ{X0V-BSv)*@G7EM>fSV`#85R|p&@nk+6E5f}{GQP%8MDCc4Im#kWc%lZn+A@J%d`wl>>cRQZf*^1W zeA*@YG;Z-?E)|ma-oHo3M~YRrkk1{?`JKh5C(>{>e>TQ)R(c)b{1DjU$gE| zTM7j{%`0v9RB;57H18JL$_gR19hK=wYRga#sSd3Q-mqnXNDjK1W}$tI%FsT+$-rbv zpmjj7Q8ASHby${7AcQrU#TMxz^XVn#P@j#O^SN0!<~xuwFN*RwlToDoD1uOq2Dq+A z(YHtOV5V`pg@TLd=5&sPEE9k&f>5o(VROMCdKE^b7J#h7C>T z1_i&v0&)V)=8&tEiVDmg`IQL%ioc-G0S^-#dOIBiVDqBw`AE)!_L21VFf&HhVhXYh1> zN1cP)jhacE=S3AfRZyA%W<40WL0kq{Cg*2OAxN`n&kPKhH1)L|mr0tAnsXLYNCpaP zQ!V1=^Zup-2JeVWj|<9=!L+QPdn7^9j};z<{j9wgd>MT2t0hp+L%GCMJ^R9M)zn9@ z((X5p?kQC$C=I-W!tJyp^91e^E=*@-K+SuyQkY-_cKjXSIAm$2K0t}r1z;nxOyqOe zF|b(!lY21A4}lPXZ{{YnV3IzZF diff --git a/PIL/__pycache__/XpmImagePlugin.cpython-37.pyc b/PIL/__pycache__/XpmImagePlugin.cpython-37.pyc deleted file mode 100644 index 70b6c46c5422a92fdc5dfd60b328ecb113f50f2c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2234 zcmZ`4O>YxNbUt?N^=E)bmpifDyI0g^M`j`T& zacw{9crB@OW_jQTQWp(c_X3$DvPL!QeimN?EKeO|2!!`py`1&}9LIf*I)#vpm)uol+2ppJ+l-%}v$^nT1|A>2^Z`4({rMylR zeT+Bm1~L>o=|6E*^8B@nn>I)oEO^pM7j z37m6Cf1O!6DU3f;4Y|4g?u+YLW4oP)Lw^>RW zxnoWSIRk!7WesJeTsUnj{w1}9)#mDTk{3BVMdVvlICErRzoNY>Ng;)^?~_+_b8e71 z?UyJBVxGL%W=f|JD^WmtK*LKwm8Q~+dTXSmi4<@Pw6d_;lO4k%-n92;QV`{&l!C9q zKIHew=4&{SrWr`9nKpYxRTU{=EfCo6q>h+1-0#vX_*E8X)=2mRaLd9nepQV0cepjg z=h&OGhiu>^Gr&3f6%liH2t*C3b0^dSF|?5^kkn4IVAVN^O&#K}SB0n_$7=77XGF|H zq-T>e!-`lCi^H=i#D9d*pA+ZB1@P<~*ui(69}#hJ+iFpeEeHbHb7@^=AtCxRVK=FI zp{bK?NTdGDmg=_UJBGr{924|Ex0dTzeh($Cgn@{ zF`!2Z>-P_NaTNH8=Fls&<%io{g|(%vP8V7Sc4UR6uC3j! zAL?v0>3G^Q=Bz{pfomlY>RJwXGT7EM*0ketP;~iL6seDKH}y4bx?Huk-Zd8?XTv1QLrw*;>8T1TZYx&1(Z2G}w?s z>d_P$&4MY}p_Q@`O|8^kBYT%2h1t+fp@o>vZE{Ur0OPfcx&e#&5Wyt`9{|vHu)7~8 z>Lb8GW5uwx4iXu=b`Qhr+6TC(Rorn4!L->=VwVfLo@ihKv_Tr1j}>B+hj?9M{rUIq zKUH0?Wwq02gkDEB8am%-z(el`h!-1;y?rk@mSi9kAdhrqvNnW_o63*y7g3*}GoQZi zk?{>(P(=V&VaCXEm_;q-+%w$1wG2tx&-wVBt^it_(M(BA6xNu+A~Golzs!~&dg@@3 zi`izk6G4utDk|V_W30I)C0l-+NM#;ZeE|ZuGUdr$BEuNmJ*C(2JMvT%r#@?EZ4!nr WD`3R@#SWXJMV{x5Q+YAV%IrV?W*sm9 diff --git a/PIL/__pycache__/__init__.cpython-37.pyc b/PIL/__pycache__/__init__.cpython-37.pyc deleted file mode 100644 index b0e68a0869eea572ffdd844cf8f2607a8c9fa6b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3919 zcmcInUvt~W5eGm}f+&i#B*$^$B!-hFHrt5$lfP0t9b2;Hu$5#^=-3`a(+h|_lCVGk zIe@mQ@l)+-p85sa=}hyO?~u>X4}jM``LVBg>h6)OaIz-RjHck=xVO05{q3JyEH>xn zN*Z3*|MnmDQ(4pgO_RyBgv1TJlYij=nxlaZMxZ;o{5Ko}3Sb6>zUi2{#?41XrwB!u zdZ9T}Tz@nT(+5Sd2^P#C#|kgr(VzsgFEp6tGtUc7iI;fsx$ewP561Vg*o*s(jbzdf{X2K=eL6}UKaL$J4^ zFcp4#kVYb@mu$RxX&NUR%gbFq?G4&>FX}JHQr}W6p)8M-Ea$b6a1M4yM184jwZ2;a ztd1*C@fgg>mvBz8_eiSlBMx!SX!Pqh5C%F2HrCRAF=8U%Y5}mBo^vs&<^N2mUib!nX zot(!Z)gEDDr3PSH{k5QD!eN-qy+aT6?%aLA?%)2Z)wsJyCIgQJ_uLe{LT-M7uCv?R z7Q7!lMxGx|Ag$Zi)>hWmmR44mR@Q2Do6N|Y;D<@dU8uh-AOM6}N>bN52>4?j)C!sP z#1$dtK$4k6Wec~)deQy|qenk#Vg|R$;pabXZR|Hi)D>>u-u45Y>~98`BV5?q5xU<^ zao_(~YxVWjeL0L0U>_50Kk-w(6e9$;i@VYAWybu_PZ_Jn!|VbRuAlIUE7=&{CGwz! zgQlChVHmoYMY?7P6aQXLtP7q}p?QnCdN!0+1H|u0i3M zhNJlpJfnZsWiX0+Sw#)Tq1BII5ODkI;rXj}&rR$wvfXr)^vL~LzgjaToNPAd_pEYr zvgWoBk-+p|q1)$-VGK;7j=U($ U<4j3s0` zxhLU42mfan^8z+XGyMll ziz7_pHC!+b2&QWvQ5oWO;uQ|~u%?TPNarxUfzyxiKEibQWK0;~k-W3unqrK9cLb>z zVM!OSf}%6?xdQ6VlR=TNGvWy;uSYHtZ=udt(Y%e^>!(3OqRxn>i^b%Z(Y%95Zkz@U zi8>>i;8)RHMkKdRgN8(%0gWKDf6*}+=2jO2@a1XH(89BzA+vuKO@K;vPJ@OP*2-cY z*JdTgMn#*ktjySV12-7eURgZ^9alleLr_*quLuGoY#OfMkjQpv^nA$Af3WR7dHnT(MktxWzp6^DDzw1Q*{oB zGQS-w^TlmHO3ynw|!*!LaRviK!*J~_^;HoQ;) zSZR1sUesKppPyD5{WL$XHsaJ%7=MU)H_w>~t73MKiK*(}TRyO7mExnxOdXT+@H*s$Ok|iY1k1d`v^4YG`$pFwVDPAKNblL~9T# z^Lt%4Kd;{NI|{1m1Kw`tS5zMKl?9cDZ57l*739Lh`}cZ-em;qnUWIzH8o|l0W)N*~6xdYK3^0hWBuw4g?}Ef7)}e`1f(eU+|W%c&lI< zf;hFRpjIs_B*R2d*O_U8It)>zfqK-eJo%dNL;RYcHV#*(LY4g`k0-ISM<28ZwV-N=hn1BoiATAaI5-AKRj5!Rsj8Tk?45^IG42%pZOu-DA z%r6;%lA4US*b6dqGV{{%{WO_waipatmXsEy78ikxSjkYt0;IsiuQ+F`n1G`E^rFOE z1-Hzc)Z!SYoYcIO)FK79{L;LX#FEVXJh+gNo~2<7m?)?$$pA|DWG2NFXO^Vu79=KT pC#C~+2YCAE$H(U;X6D7m>lIYq;;_lhPbtkwwF5b;7-T&U69C4kJ8A#` diff --git a/PIL/__pycache__/_binary.cpython-37.pyc b/PIL/__pycache__/_binary.cpython-37.pyc deleted file mode 100644 index 1aa63755d79dc5708096f0d394ef4ee596f39904..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2460 zcmd5;&2AGh5Vm*o-=+;vXv?obLLvu>nj!>MR8_51QB)PA9*{!OYO~`6L$Vur9i&vb zwNJqdAb6x)IrYeu3(PnKEo}t}m*U8tvAv!de>0xRMzL66*s34CdOXY67n+Qki_ALq z_y`AJH3l4<7H>N>r|s5U&cKD#5v!#j4H=|qxDHv!9r0QQZa^Li$YtRsOu;mAIk*Ky zm_aTN0%oCvTmf#w1-OXZ6kLKilrasL;R@0s%)KY^>?shtnHbUcEg)&|`MuS<|8KgRX@NO{G4T*XU9kl~aTiA#?*f+7qS8(XF zx6JT&IX%;7dpHBWh_vkNYWfs~*xq^I)$LW6 zI=z9T9$zLq$zaBH9>?DEKWv9>+D(k~|Qt zim1_ur9pD)L)7t8oIP^jRG$uA$~ECuc60{GfJY}mNvq{YEqN0+hqz?*Eb6+|KeqPTxim2rP7j>1Tq&UMdnn* z{1KURjTkj9EEq9_OErPZ#R+lQJ#f~}dbVdqC_UV|-1?=C>r4NjZX&PO<+FskIZ~Ib zG?Zv;{-kO<%%6vjP0o~#%3M>DMKX=#+)qn{QN}X$FROGUnRsZAis-OwpDu!QW|7E5266edIoD$H!#*2wl>&GtEn2= z)UPSeX?oI{;@3u%CSPmvh$h@L-AS5YBE=6QjNP0DCQHiz0$jL@E}Fr4-F61eP>AZMWI{u-Ss~>Rb2*zEVzt zCy!n|Ijz=#{l3}RnQwM>2ko|Rq4i(C_&f5)X0tOJof}-$1%j|bOAtX72??^TXl92F zv7iM+I4@KmgR|OOxuKWup@%H!qt$6WpR=LN1xt#olnMmP3b9tel+06^FPJG7CVMUimc*i~IM?q9m5 zC=gPUHtsU6Vq>7IY*?&w5gS?L|Dm()Yx15VgG@*``f_f`o)P^tuOv;7|!vp{hkiNL3Vx+Y-sztewWp8^~5agNo-g;U7r zB4vcqDb+DV`A!;0VCi<1d9Ac8Y^~?0(u%tSegU=~SknoZc?=*)Mg_^3pn`dE8j(T~ zK@G9n7jh)EmVyJ;y72u#7|v+E2V`5&1>qofQ#o}^eoC1OjVwp{4xHbvHsM@V%5si} zH>G}lxXspG-PxkWzwnQiT#+x(zzwaZN}0wl;sROP+qAo!kEPA6)tnz}FhBZ_d3~*y zMh>d2@`>c!wK<>EVpgKR$N9%uUN$HC9;DOv5%7y`0IH++0nkhckkBOXJ87)(@mve# kE!EKfRIj>5+5DZ2Og^y}J2`Huc!jTFa4VsEK@uh5Uuj#ztpET3 diff --git a/PIL/__pycache__/_version.cpython-37.pyc b/PIL/__pycache__/_version.cpython-37.pyc deleted file mode 100644 index 17224fa3e4f5302e52b6807660657a855cdf400c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmZ?b<>g`k0-ISMu2MfvGPiMa}HnK`M&F-|$Dc`2zy3U2wOc`1n{ zKrL_~BRxyQ7%)*#S&{*i@X1VyDb6fO)h$R&&Q44R>JISq(T7>3S5SG2!zMRBr8Fni L4rJwLAZ7png%CF< diff --git a/PIL/__pycache__/aaaaaaaaaaaaa b/PIL/__pycache__/aaaaaaaaaaaaa deleted file mode 100644 index 8b13789..0000000 --- a/PIL/__pycache__/aaaaaaaaaaaaa +++ /dev/null @@ -1 +0,0 @@ - diff --git a/PIL/__pycache__/features.cpython-37.pyc b/PIL/__pycache__/features.cpython-37.pyc deleted file mode 100644 index 1852114880def7749e77649a1a138f6b91dc8884..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8479 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 diff --git a/PIL/_binary.py b/PIL/_binary.py deleted file mode 100644 index 5564f45..0000000 --- a/PIL/_binary.py +++ /dev/null @@ -1,92 +0,0 @@ -# -# The Python Imaging Library. -# $Id$ -# -# Binary input/output support routines. -# -# Copyright (c) 1997-2003 by Secret Labs AB -# Copyright (c) 1995-2003 by Fredrik Lundh -# Copyright (c) 2012 by Brian Crowell -# -# See the README file for information on usage and redistribution. -# - - -"""Binary input/output support routines.""" - - -from struct import pack, unpack_from - - -def i8(c): - return c if c.__class__ is int else c[0] - - -def o8(i): - return bytes((i & 255,)) - - -# Input, le = little endian, be = big endian -def i16le(c, o=0): - """ - Converts a 2-bytes (16 bits) string to an unsigned integer. - - :param c: string containing bytes to convert - :param o: offset of bytes to convert in string - """ - return unpack_from("H", c, o)[0] - - -def i32be(c, o=0): - return unpack_from(">I", c, o)[0] - - -# Output, le = little endian, be = big endian -def o16le(i): - return pack("H", i) - - -def o32be(i): - return pack(">I", i) diff --git a/PIL/_imaging.cp37-win_amd64.pyd b/PIL/_imaging.cp37-win_amd64.pyd deleted file mode 100644 index 0afa3ce1b433e02bc516c0a77dfa4029dd99a4ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2667520 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

gDyM)Rfhu4xx!oGkr7wFw*?fd1OtSEMpM+I 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

f!{`J#4qJn`)Q zR~-N4p&nG+=}t@(LcQr-i8bQhJLO3*V(Js9R^`#mPF?JnY20_0o%KiXc$QO{lM3i# zOtK}`6lS&L!jYvuL;kZ8C(mlkb1oZ~8k;ydjx)i(h!h7Bw}s`GL#cu&oZWTSqtN~N z-N|3{!QC2@dpTI_A~flm37P%4e=yxii)&9167WscHD#xK9XFJ^Wjy@|b*>zD;-K;S zp1zYQzv{ulK6J44Ik9y!ea~S1gfH(U>Fz4uTLgV*dxtqNih+qy43uR3mkUd{j(TJt ztPmAP1M|U6c@nNOu@e22>S`V*K`IA6Q$(HOy4ExB=0#a@F;cmEYRU1*4aF!Dt?&(# zjl^7`a<1ZCTp+Z81 zg>0zFc9k>LjwlZK;U2z-0m%NhtNIf&{fIeO#GCaa1IF! zqJ>k!>>q@>_H#E`_P}_Zm?M`+_-*!~ZK`o%Z8CQMU)**&7h`*{|7{<}mq~#0eSp&ia2{W^ zTe9Ah-7;DAtnXOqbD~T`1~|kNvQJr|E*CU~8PKHs_+^AhM0J11DNK~`od$2@#MI8@ z%3ee@%yhzEpKP?fs)c5jr^d{hXAq5)MCOI7a|CTsq?% zgWI`3b*|(8Lip*mKF9wdyhP!&?mV^rN%>~_Qxn5auR5FW`h#`nsnqyPF6&Oe`)E2Q zORqx&m(IbQSlyvX{yWu<@M&W$cxpX|eRhk}dHXh!w3Sh;Lc+E1K((2jFr2xup z6F4E2`8sJ+Amuf?W7U>;9nvuO2hoSsDE!OOmmKg`%7mEoTLz@3A-*3Nmdh;ZnIL3E z_ZmH_Q{ZgoNDr$6pn22qmsR*1FF=A~^@CY8(Hvnnl3DYDW=EXwWY+sUIp@I(J_@cl zA_irM><2j$t2Nf|#?W~ElWWJxjlFkl87E7OJrUuQ#JL#eAEV8^vhX6#W$B31kR5SW zP*>;XaI2%w zBdU9Fs5;Uwo0uwOEYv`KyVvT`>K9dz8Ll}|SLkKY!(}!3Te11bvDBMvEr$FrRBAel zvM1$O;7KctvC`~g5tOFRdLX^fSo(>`o{Q0D@4XETG8dWqw=!nP+>tECRHa~UV(D%&Z z&C|2V1|6|_-P#ItZL&DM+VnaduB|}V=6=_;v35t+mRY=RZH2lvS({#MdYKN_R;X)p zzw6pqq9bd|tX*AOY@)7>$}+XdqZDvQ%EFbAy5C2xTQi3_9$L1Oas;-w|AJQKet~*3 zoHm>`6qOP6j1@k;3UjFI(w1{oHtx)Zvz7(q_}`UPEJTo7f%AD}c}~33qi3?XMUa=} z+a>F|;7*qHoh)-%#In2(^Nl5oHOlEOS>m#Wi7tG)54HK}a$c7nlGQ9pb7kqTmH%1H z<)GBQRX;Vu?-Ul|4!a>&HaOs>}>DrI6mt1 z%X8q>va`uB#`|>E&?jH!6L+}jI>)=8+~n{(t2Ssz)qqj;j>_=!0uwsNCZ7*#T$CGe zZXOeHZWy~hy)qXss?_^1CIT2n~Te%n%o8peWyB^MZ0=dd9DRD<@7tQ;&m z1wR1ELPT~RC#6tTkCXBy7+f-j~!1s=I;ghjoD`S?fX;~QgznrTp90Opq&d1};*+^LEq&iri5 z28Sj@XRyLg3YamJ)e|CP2k-f|dsKxw)gnD7Pq|RnB&Z@=6DYlH-8u2Tx^?L}(d1KT zNoJGls`Rux>G%3fU+c6FNr(EE>bul-2tQEIkBR{*9 z>A7L?p}FJ!Q0d#RbcI$J7a!yHpN&Epa{#t%1n{%B{%hD+^$>yvpSM;u>OCg-*j*bg z-(Vr9dtG#qx0geZ_q!S7&5FHPFOSxtm8MbeF^zil$}iV!L#8H;xV^8srVQeCYm$vL zRFg)#$28h?Yhvrj+SlyPWg2OFUv*8A(E@1?)ikt=U?*fZ@;x&`ScQ?C1f_cGRTpdGH;Zu%&8bkCM6{j zz;ZzByUQY3Mtcu@rHbU0ML6?%m}fC7C?=>W!8GI;Yk^IF75@!lnvp_rij>vVeDBYL>x;O7uA8J~11uA`&2 z;9$EixtYp1ZF#^w*^wNFrCV4gY?980pXHDf&FLt7A8p;yp));DbV@Set%YgmI=Vm< zP_ZoSCl#aAZTzTn)RivC_v4o7kA#jfx)q_mR*4U`j&W5p#u|R-VqCFK%H37e!O!aP z>79w4r_-JCnP8c8sE1@T)JypVWD+gA*(w&<>sFs7j+%+R_z!NEqn`%p$@-n{0TOd5 zCOoDQ=~R~$gnC=PWN~hNo0L{hNU#!poT^eBzqxa-tyob}GrM<_3y5syXW%FNmnlgQ z23vorCum2dyz}x-X}Zw1Vz# z9AlG~QWvUSs@wHGi1sCAE+m=C-LA>;B3U;}*7L|lZN3gKqa@Oku@c&(AvKo(;BF7` zGjL~?%ze*F9Ai#w2+fi@mxG=v#33`(5%=}R`d-1rMar7t!R3B6m^zOr&V=LXh&e0q zH5iQcy+N$~11*JKU+9}&)6DWc(x1g2*y6$EBNu*_QQ4z9LtRsj6WO%#FclIQtBd9=wco--w?Q&W*T~qby7>THFIA~Z-6*0d%I2mMP z4g^me8sEdgb2a39u2I3|C@1}7tcKj4@(R_XSsk4}yxXWalz7(<@TKyIQL)=%n>299 zy})v=M-|0ZV$Fj_tJRJ_kp=U-Q7xiDH^Y0NTOY#eU_a(Smh3)?@XFDa&MQb~?uahd z0;-Drh~4$Row5gg9c7#|fTdTod<3?EDE}zUjEaMf|C`bx7mv*72|r>~97%o1smTuS zCY=Vd=sMxIanR`?#6-nmD9X4Qj{jT^3_j#cI~Q}?mJ8FJ`bKtV24ZE0-v8uI6{I_` zo~`HvJT-Ee3llP0P;Jwr<_YYJEC~H}6dr081p2xq)V|&p$et0{`50=>I4v3GN zI6crlm8kKk0zO7NiSP1EL`1QA-@>C6+P5XZFE*9n zwr&h7i2Bu&Y`z*mds&hjtFk1NW4VmkiDdIwDvy?WgvSyoO-a1q`vg5leVJg>Abij= zV+}(3 zZ*j-c)Hr$^ZugT9&L7eBJ#k*ppUY77u~}vuZs)ymbOXf_)rT4i%_YYrQ6E9Eu!|52 ziD2>|mnKW+1wo^)laAl+t}uo&R}Y8jkVx>d-2?jft|AGW$x6)U2mAVjFjy?&8isIg ztZwfNXCk!A?N^i#UFepHlSR`pABN}8=SuVSRlcWWq;YR^khF^8ACu4})x6BbeabB% zxoh=#UuJmVh^;)A<}>cZV1P#BUJ2Q)AiS%Ef_OMfflb(d@MJD<`vu1!Qvk#AS%Z+nxsy2%T?L0GiI*_3e3K0Kl0o=MFu8c0_VX$};^ILgqh^P!Fw4dm?Hh$##822P zn+{XCQZto5*Q`x)`Im%I>lY*JYejwE^4W;GLv|z}GS&C*=gA7;vJOXyM@@!llpyh} z(BgrkU>MUq?f&sJIwM@5KiO3*r;);`w&11meS_2oA1Q-&`E8ev)CVy_ z95mW1yQ?Tl24ln3)INNEDyyuY@XP4TnKoFR1+pdkNsOo|5x|D| zVqPTlx~Z-p>dJO2)WI;8gm%Gp)kr5=U*i9Dq}2#QxsgF}IfZM3wVE3h9x)S-!0*9% z@)1(r-TIu)-(DnaH8WZd2e~V;>ogZD@uKDtyyAeKbvVH;*ubfRNo69{>nw4ZF!({J znVzuQcoivN9lvy_hac_dIaKEFGJrDeQVXKIuzvZlb~|F6__}_ZFdS~1nMOP|P#Q{I z0MFyhfKALWcalm878CR4S4UELQKum-?4S6Q3d6lwS~}2jR-Bo-Tk5##1NpJP%>lZ_ zGfd!w_b`EUVg(HqFcZDBBYooWpfvfl4`@=@y75zXg5{+|>Vh*lKuL8+Cpm?~)zwKp z0HIxVJzi1LSvA-hVWxCNk#KS#j zHVc-Q-2_*7`iw?l0YznG0UIrd8WlSe=^QaWVz+vw;ML&CXj?ktl^4WXGt{z-C)@+q z*y-zlgOeS)Svs)(I8W>3Ngbm$*$FKZIV}ipcjmw(CL!pWK{UgADJ(2veRg=SjwzKpm7A6aP$8u0GWaKOwx*p~i`DSWDm@F5=eVwuOA>Ih*Ii)jY#4W;dQ2 z2_I{^$aJRTKHm|s{Toxq*EW|3=B*!LzU%0&T*KXGR@*il@>5iAZ*tAx9M9d7tqZ z4q*%*W%SOpkT8b7{C8oL-1aqZ=r#Okrbe=6s?5}>*aL+bE0o!uv-LvnWpKFE}(D4>EMIg7d?$`9|$u- zj$kq$&IuM|j-EaBMh2lEYUl|u+V;zQ>FITu1mWyN=;1tjh;InHd_&VEA}tQ=)okIO za(i227F){iQJ@@_1|p$PMnX$5ByjKHt5D5lfr`-7GEZYBOx{@4 zJ#a1!#)wsX41Yi9X1j(7_qxIhm8!>^KZgI%KX=fUsyr2{d<&VlvQv!@%^C!uR`w*i z(k;)>q6lPA80N4%x#tqm{aF}X>iZLo_WM~2!i#Ez0zR)6e7J!`7azveyb>=eJ!VWI zWi*4vJsxguQHiN8)WcCrVSJyHA>n}(>J&?;sN|YPTMaHhwtB3`gt2yIYJuE}#M>Ow zzs`%9csJYF@B&X(ct8#4poA5#5fSy6ga{cF%ea5$Bfd=!mhhWwmvMM{*8lWDC-NB+ z7lI?Q=Y7Spmls>=h%o`1Gt$LRtURBs(@#lT!Zw4YxIik%-R)tbbXt4uIT)430ndMY zSimz@t8Xi*R)Y09=btzvQp&@c{EO*tw~73;BYX@DrB&F?MGI1aOa_Uqv@iKWg{)x! z{1~uMw|^djVc?Yx0CJ7kZiI zB5Exl-%hj+AYEg&zRZ5pTF`xFVjozM%$qzSMcOSVs!7ZWIuj<8?@CTAXugAoUewwdy|4#@-2ufmyJ9Ibm-%lmVj zyx&CNxIZfE?+!6#L%i0e{iZmp?oN*X0#&_CePn1^Ji^3{%ZmM;xtrXoX$CScNHb<$ z=7q>?W`5=c3pukO^FruFvoQ05E1o$q^D=Q@gKjUUijimLPm}CzAwrguxJ5N<~$qQR#+T@%WX3@>;u1xHO;h0_$?!`O0d1VCh?K|O+@XH zm0KMN5rB6`^0#c$fm*U;_-4YV@B6B}?o0mRVp&eRlh^ahfdj`HE^AGedv%uGNz47j zJu zJYa^t7zurS1U9w=8~eEseHS>lkX4av3a8WTu*rg%&jl;AZj)N+f_ut>;i|^UC1B;r zBkVK(JNVh9?aBEU$*urdi)fyIW<%nz+Cj^Lv$x2&$hksr_K(mQEZh`VEg5{Rc0l#x z>UFtzu3eXK?{PHM7b9vZ@ru3<%6?tO9Z~OEp+P~{LCKsiyFd`QD|dspA3?xQ?*Kzi zrb?l?bE%J5WJNVRFOX-+?_!y=Db1e4*54;jYMZ5=<=X9VC;WRqNLXqobOSeSyk#jI z=U*Ju(em%368s|`Eax}*%R*To2Q?c0SwJT5_M*-5;mh*DbH2Ng53q|eJ8Xl+c^FDN zOSA3D0=se|7(QrYbZ_4pu$%Jv3EEdoj@w)=6n?d(fZC)NpiSex?!>d~qZC&Dd+k|- z=h#a0ZBTyuKJLYHrrsefiy|c1$NW>6=+8@v;>1G+CuP2|Y>!Qoo#BGcRA}7+W#Z+* zfi{rklr*s6&X!YXm>YSwz-`j$KViTu>Yrlp(Yrh%!@Zaz2SKC!Z(Uyn2jV1Qf{2iK zR+yafo-ARz;(dtrp8#l7s7YANkqaXBnGZw4k+`1uPoR_)>)tL$$$z5ttXSxXX4htV zhH$a&Zuv%BsM%f!*LbLZwo~9p!DuL{kAmW%BzKqw1gxXZWR8?X7KZV_7zG_`XbEa)wNOZ1scEzj8Z09YX-@6IY zv5V9n@%ux5H`_>j=FjCTzgze%;P+v-Xop?#mNK`=M}805)~ERPSKImxKmB&apfX>u zt@A*5uW*-63r*6iddP1Pj3*ceFzZ>$%vxqv%h7II8>w`g$G* zK3p4*+tzE%v-MpDOecsr2qTe=8sfrh< zx|LrHm#xlIF{$#=M0WsW9rqoRb-{8ozr zu&jPtnpswdrm}E^;gY+_H6*4Sk6=oy1}&AEl4iLz)&Yc@aGn$ZRH;Xu$SFLW{8j2H zy(XTV=}i0&0afe-x4-R^<l!MZ%=W zX$8HVY@r&wjY8e70Rc~J$F(IQ_6VsW`7TN0AGM2Qoe;DCT$zl-yWq-qNZOx#P&Q~7 zP1Z5akj&24eOCAgSPGTX5rSHtI6mbyOZA(H7eJZBN+Nu{hcB0%H;gYEVOs?=ZRTt8 zZ292f%c*=|yg~{PB`Wg>%kQCM@FTt^tHGVcq{vdSD<|7c0ee<~J!_)f6pY%pmPEp* z#l(Lb3*NYI`w-ULgMi_jzkN5J@7 zfBGU;PE%bVfE~ZYlQ8H1hrM?JkE%Ks{*%lA0|fU3qehJ-w&`i?U`qvC=wLfL%;*eE zBq&xWo=Oir)~cu2T<|Ullc>XT6s>L5wqM)t^z>%WhrL@Yel zGZw#1)U#|e{-y)n54QEe*!4vgyodw_A2lxGvzp8WNqV7dK)v5UG{Ra9!KdAIm1hg zx(oC~-b6}?ZIYTzRx~uHNi%|w3pb;llS!J+xqo@A*rFKYZy<&w%vM5ASBf7&##RP` z61^k>4aeHV6F(XRWLU65N-@WqA~8ef&UXc=`jDH3)#0$`&f=TLZo`91Lm_PLz07F{ zG=lAo_~ea!%UZ9HTEQm(YgBPN29>F0AqOy@uaQN_@j_xEpTik|6u+-jkWVK06>E+^ z4UL(^-w+X17c-!s`Ww+UazJrow?R+PzVshYGRbB~Hxj#G;>EupvZ6>kZoUiyF{ZO> z7RN%7SkVYR5FSDxyY0V`0c7mg(=L|V)rozEz?+=GKi~=y_R|@a+QvyGc{tyCI8yIv zSn$L*DR`Q8L8~?u$LeS*t{XX-qGx?qUWKdJc=Zitmst)$#Guy!SX}|{0ps4AWub*8 z6T^6-zY(;h>-q%|iU;RhiTGiXOH~&79gUGY+*zaxo`Wk{?tRsTW(pDEw5A!KM8O4& zd@sF}Xa6vsXMy#>oa%3c6@i2rh39!rXb{wGdOK)-4esZ(4DLrfiC}*SLG3E5-zE%@ zB_V_Xvi6s$a%*e`XhX=m^v>PF0O>@0e`r7b?!45PfB#7#KYeVcDWfCHF+nG0A`^Vi zpWtA`RcE%CpUu$zIy$HyHUgEnBuy&vd)A7tBJq1-`S;1*Sn@I1KluNRkUb(UmgE0* zR@*Y}WKmg9-2ak##Tteuj%Pu&RYbI75+gp%=jMnzBj(^4j=d+(9 zot%e)vb+b?E(zMcTZ<=FMYiupO1o03TN)>!QC{GdcsQx?J_8v;bPO4U%|D0{t$^c< zM9Xj)8X0OB&@xKpq(Rwi1qy=lk4|!l$8NEo!;y1PcWjc#jaq2abS#Tj7I;aKb4MX5 zIf{(HN`G`tNp#BSU~JGlNcmuN5{8P`6p!J^mrlys$IiI(9J=#8R@LwLscvV&uk}-7 z!4(>rGYKNmARpuy=rn6m+n&^~)0Fk-(Tqpm;nCP_k@ zamv=hS0huC7Ib@w2+i0p=}{wWXPsFY8M|J~ZE}GV&OPGN=Oq;PyBG%=rTc73#$H5C z$%uUot0?@RUca9WORry*pg6sLZYj0bZz831T~BoEjMv@VSuzA`9Zkm?7IM5Sq#qgN zB)6z(ya`z`*wN@61%`i}tfaMkpQABZ)6^2mg6zDI1tKl&+s1;gb7d`shELEzdAoP) zHcqsOX5>A+1WEgMwG=rB!4sOaF^!x!_EEMrA+e>=YrImiEj4ezD~$z%>g8bVTMaz7 z>;U%}^*@CtlN>J-ho(*ppbud{4Ye|~@-j1QlSI|0tdr>)>dSjhemR#`C7(~{xs<=@ z(&fKNmQS?bE2h4bl_#358V@FGoTF>VlPC3)HVMR%I-kU-vB*Yg;-(K@Pt@fmOfLQ8 zF;`oS?=*z5<8U;fWAp>}vs)8>Pr|P@Q^Tl}GgfaAiLevKAGHiGS2QLFUGbt*2Z)EE z{q58+%j3?oa!SnUz)LNf8!7X~@7xi2J-hnsnDdKxUZS5HMQoRa2>0_Bav#lCrONsJ z%VXodkNuGlK!;<_0N=?HZzWvoyoc}p90D*BMycH?_%T(Ud;+mq8SGXhp5ti67iW?q zzj0DDe*s?(BSqWF%8xcJhfn2)-M1UI&E3R{kq!jsEDt!G3(*WN2*;d%=EG1Un?U7{ z3&21wt zu=nM8pD!b-tN37*#fVAE^yM-nKTt7QxKg}rEk@GSdH{ks>a$qJouUnz%^X&pXLp@$ z%eZjBU1)lyFFa(;V<2`{XK2oD$l1FCtfPpnTN7|*dTR$g`=KNXf}ZyU6)}H$;u^_f zJ3TeurQ#V#(EGwo;pu3vHt%XR9k|ATHz-QWFvb)UU#UO|^y9P9KrQ zNy#J zCk@hyRgbo$oiFel*7rW%&{RzQwyFX;aNh0IN8T-cxrIxbYCluTZ_wqNr2J}KPN&vb zeN6looGZfOo9nk}eWGdE3mE>DWvY?II$uN_XVR)>`CVpIv+0_(d8^E`gBrgIMV2|i z|96i9E|T(Q+`X3Mnu-tpN4BsOkWI5;F^gz;QOzO<%fi{6{s`yVc z@&>{VQ689l0ql1VcDSw!oDWbz!fkNt%cc~kx0nxj3HQL&mi7RM+il;b2Yy*nxHkC zn@!Co5$)c%=XS=!E0-4WXWkgvys+aTBEpZVp`2Z7&!=j!rc+PWbUj&kMjhG2|Ful% z4!lFfZxlCCnsI)YKUG#GuKeHC)BIhkw8&HDd;awA!p$$Q_z_6YsJj7*H^A{E(`sTo zCoXA>FnyksX3Jdr*t0T0CN6dv5AkV<`Eu+>xY%`nMDQd17A|((AA!mBquid42HB5B z^n5hfeso&TM?>sKM%%q?P!@(Y5xkwGUl_h@N}s(xdWYF-@|WbA?4LJ>D%Z(+d=mw5 z_XUu-b?W`xWh>vq9M3J5^5wdmyPKqJey+R_{w|x^+RrlaO%*@ao4M`**0`6MFTJ40 zeCth}Im@~rb8dA(=8Wos%z4xWnX{)0Qgg<1;!g%pAI_e42c0Iq;oN!jd+vq*{-Eqg z&fC;@fD^_hnDk zOYE>rFi&sB>>dE0@vJ-OcYBnH1iC%SL=dk1|n2w?~=CBJ+`s+>+EESVm7} z>X2%BridXUQd$;{6-OcmUDbq)e=BVG-@#nxvmwtu*~duS{$+A3_s`VS{5;V`z%)K1 z&tbTOEk+(eIvrb3)m6V9j1itny`&C@BJJ7LO>J-S2JIm*3db(|_$>!IgNC0J8qP66 z&mO@6OL$Hs(j%xwbn6y=Rp***FRdA0Hrwmu!)1q153ue)oLg?P?7M5I#1ZSWcnh?e zOBa2U!OY@+kpCC+|D*gb;D0al6-rmc8e;t-nO%r&MEo~MEM(XE$Rz~cPR$9t1J@@9 z@uk@9kvGNkbao-O+Q3Pi+P|QNSQq_R`UHdF(^@e(wi9m>5J()Vq>=i4LYQn)Lc6?d zJhIdxOti2WH=XuNV}&nM3s>YxF7IJzuR0^V+aJrRRh*E%^*jz}1O*9vdZRT+UNyvJ25dCgb@UZU-@^rnt*uvwUPSFlIIr zEN2o`(()TLRrjtk9=8rQ37l5XWj<@ zk!lMa=i^g@5pa`AE$?!7n8d>Zg0BT*lZ(pK9`ccE7+l)+DlcJs5RQHPr*HC3BDm5YVPW)lGvw={vQaN+0G$qi-XD$$fUZdc zs2Lrsnmh3hbKVCp^}q+emNy0LZjUJ=hNy(pp76@ zNl(qC*DZSQ{=r!Z{=dZk7XB~e|1fz zsU{VeWalPoq_G&edhUIlSB~jy^4>AJVw1=yU)g_H%P2)`MR$l%R(RlWnz`r0N0C?l z>p35`yz>1Hh5%~#r{XO!^ zPwWQjy2~psIvecLU0$i-^Y4^b#^0vF4=S&`|GmRW4OhSN%4PIcq^!TDzQ`q~^P4HJ z{3*}1{L?B=$t&--->ahBl2@K%)kw)JZ_qVFUYVtzbd^_fvVV=_vv`eoTgbXb1UN*} z8*sIC%o}f%JP+^YFiP5u{O65){_a}D`NhfN_xiN?-GEo@6 zMCLUkvQ*9>@f(gu_B)LQqGh*l6HcrmIvYswMkE!ZWGQL4_8K#@`5$sZ1Y}dhwF%LY z7jjw;L%H0TF8c{gQeG(6ev&Uw-1ZZMH+i9a`$?fZ(Ith_H7z<>MBges0gt#e2OQ14 zd|g^V%o2BLV&av6cXj1Zx^p(=XDv~9OOTuy zrTdxau5TM9jXdBXs`}&;=}{@uC9h0o)HA3u6WNUZ>SShVMyX7qT;-MK@_oHli%eOo z|FIUQ>r!!NuasZmzfx<__tL*EolAb-8rO;GSxD%(@6ff%PY|(@rQ(aF`x!znv#6Kp zRavI9lC>JT_9+z`L+A!gF9`XJkvjPog>o1Jix^lE-bmV=vVukl$rAOZOylB5H8Y7?a z$Z{GHx>%DR>34w`!>&X|FNXA5=M#%iBCdnE4V8H zF>ej4cM#CIs!MgKF!dnhEPcpawaz#=?J40Oy7 z5E^)4AQsBD?6vV2t}I5P{j&5!6XePHH8DQHAS#-_kUACbfL~v(_`c|t(H+WXnTn#! zj`>v_AG_g^1H&p#_s2?ywvRw8JyiPyV-?hZnmm?UgU|u7P7p=ph3Ffxd3UxXH^B#e z|E_NDi#hF;Um|m(<Lg@qJZJ1Jf6EWTcHzI_iI zBcU?xFK(cY1)m`#&_x7kceK*{lN5^qaQTE%@~f0leUZ+;@|G%f8;eWxF${5r9S24K zE1D-+7`2>Gt2gc+A9BnePg0CzT9wVTq~$qeE-GM(F-f~-rH@HoiJ5^>_n$oWt1Ez! z(tK4>;8zue0ngP%0ncT{o(i|$Q-L|()G_A1cs2p_@iO2=^!GbSB}H$wF5XY5xP9@Q zszP~;{)CKgI|i3I!fbY|$4wMI=*&>!iu(-Qa_*VT#CSa428%DYXg%5JJRT#D5&mnJ zbj={&c(>(hC7crj>cpP)vV8GjyGS!1Ob(MF$;(RfC9=UGG2*snPN(9KDfBXX3zpiZ z+YQpr4{RfqxZFu(6?+Z*-gaZbZMx$@yB2maV<9c*Tm zAgPRhV;k^VsrpnnX6EYoFN@XaZ>r!S(-VBpvRhDDrpLEmn=^=y%eLfZr=9Nj&Xz|M zh1Hg@Y7Wi`<>Dsl@)KiI>|l&~eQawJm;_U)3KwE+0{b?S9G+$BT-*j*_xn992;L5p z_p83)?&)FAyFpn|QGivTqa--o!~kN8r2n95_Ny~V#ij~BYesXQ4aVjX`yvm z>OX?OenzJ&az8 znMBOIJ)3&tx%G*pND}OVvboK;;lIoe18S>D}5u-j2J!##^Yq|4ZJG zw+T0YCb&?ykV${BiV73jiD<&XPW#xhkHs!aZdZ1klP2|ceJr&ce2YXVB3!De8Z0zg`uxuaHIYu|s09RfIm*>ZIBr{X&`& z6))Bt99BX^rrRyHbK{B3OpqK)>K8(ZY}7l!W^I#!J5ic{LeJhr?nql_Dpb!`Bwcfa z^u#!NSKCK)-JI%gh81D$nCuZ0U`dK$_LdC!3HD`6Of{^NNVVc!W80T4!M+SV<;SoI zO?S3N<~GB=j8MhezKpJlMEMVGPq6&P1OKHV5$Tz|_AI;T@rx3sleNE>r@A|!?JO)2 zR&=yRc4QO4TCE45$c#;SDqCW*Z4$?x5C)s`k`>W;Iq>%gdRodnyQum+ z4h#!}9b5E~NY$8BmF+VlP4AiNG*)0tsTxhhemC35iuWGq3hF3h3EezhvSE&&9GiI2 z)Y!yNS?4cn{6zxpDMMp8@?m&Z0@jbEfq6N8H>|wgJt6P5JJ(4g5PFP8?<0E;n{z2OucC3&Mgb_+|->hH{asIJ^ zxL_7S2qE>%8TAt2E*!h2cs5zk#)s66zL2U6W~PHl9x;L+G!^ZWA>3T1wh)_h?gawy zGsf=I>R&1NmK*nE5s&Kd{A8r^lk(HJAh($GMRP}du3ALa7+_jKv2Sj>JYaF6Wq;hkRtsjRlWym=7B~Qmi#E7t@2Q8n!7cDd2?*^ zpY?jj@|R$L&w=WWjmug@+sJBtK9o;4?BV8h{;!uF-#Ky*Wf#d;Hd7Yg8$eezGU#}L zhx5yyl>W%o?5?P)KGLe+Zb7xj$Byu^ioZx;)7NxU+r`@7sQ-p0 zOz1k%0d@jM&~v9A^uc7anBdTFYFCq(9>>ya9PrA6C8tD;;cJd))z4@>e?H{otX!3Bk-30TQ8i3y@$t~s&+aR5s0Q5(!aZ6-P=1fiR zum&P9FOmszaAQgyu=$ganQyf?KRLQ)i=xI#${1A3VCk+8Mz818x)~H>oZWKu9f}1zXC_a-kj}6Y*Wn6IUN*H)HrSEA|ZDhXQmMXcwq$KzY{^S?SHjw># z#=R9JpNKhsDf`oz(*Xz8ZhmZ&oph?i#_})JV!c_ zKMIW*-@oNadWnt2{P}4}v${$r1uT|z8v(^F6iZ<075rk!UzF)VSkN8zb@)Ira`oESxZ&kEpY5K*fJ`6o=u6(XSoqqRx7A;*hiwpoO^)@ewDFif9PAg9@w z#JkKsLLA)^PmoUzTK`Qt=xL$_7xjv;LM)O-Tp`CM-6Fmnx-qJg#6}tsr>=}f5CIPQ zq;6z|bVELtY(#ouH-hD^CZ8weTa8@bwGrvb86UVOAEOb0KeA`Aj24#VO3XBERI9mE ziG6|ivstK^F-Sjg&%jx31|M3CDNK5iG`F+xgYPcw(}iu}2V2ttZl~)eH2tgh3Qr5< zU4Bb=;Sj&$)3wX(+I*&lC;4{GVrst6{kU|^aJr@sqhsWJcHJWC9^`&Zx^B>}tKuCJ zb2pa>C^TlZ{=g- z)3@3oA${wPG)aA5x+Gr*#+3;)qv3}OxcI(YNIWV(ndsxzSNXjCA61Y*o5SLn52%LOw5JgRa8}}Ru z+_?X6;KuETu+WGEZcMx{yFFHTnR(;>gKBUre-v9oBx2Y~Je>J?WHsqoC*DMQm2)#Y z=1xrwFFRyb2%?eueNxw0Gi9$1uVW?mVB4cG*aF7#n*!r!0b@W|fR-)mv_TdlMt$0M zw3vj@#KXvs$G(Q}rv-rZkxvjh%bUq3P_H(}rsZ^O^yA-zLd@}^dE@3IT;)D1^*x(q z;N1F&tDrV_Y~*q@H4gLZwreDhaf*U|&vv`k7-}7&C_mkfM8*z-UF;g;sPR5U1?d_B zzeMh_D~zYYLGBAREAQFN~ZiT ztk*(WbJ;y&CnG@oI60dRhhAZ+4+E zg^T7>?}iDIg|HfTJJ{(WA|D`RO!Fg>Ym-O->Pk)NClyfQtT`U-gJ_&IL+)4^#7Q@n zyDl8V`c3pt!Z4`ia6Ltdr)Npn!Yd1}VC!6#;noY-s zzMA}Zn&jZfR`~DkhS|M}DHLbz`v4^gSzE)e2;^=RE$YqC?B%B9K3KCxY!mWjIzW1^ zv>sffsYQBrif|7JsXZp4U$>IrF&zDzarHJuPQXpX_A?gTNyEf$*A^UN7hp;3((|R_ z4vY@m;xaI^K__URK^pr!L&_eIM^f5C66{t=MPr{X-Aw6LN=J1mZJ?AVd84#Zz>mEf zD~kzk+Ng*(ufHVz4Kr66UtUGMEmBY0dF;fpBQayPB-zXxf_@IQyr|}I-D9W0saOVw z%#BZGDaZsBnO~7zBlA*pbs4s2vLzax!7vHCn|K)sP(K!*cb(|W)ca+g)gjOO5`PtC zJyU^0HS4aaQ4t^%VlXmSnD2Z8Apo)vqzuTgM6e^m5fK=`mLm`_v@mP>&^?rFq+l9s z5S9Z&|lJD4LC# z-z`Ifcxp!$>G~KtAf)H<4ZJh@iLm!?w+sq-4^-Y9^sbewcPg)oYW!`jL~w5Y=+2V}US~MGUUeAM|X6X6{vg|T_4Ort}AY5r_70l z3l6~`4vUr_B0XgRE_?Vwt(WC2v1EV3kcxe#m`4ET=r}Qq*n&YVv92VjLVQO~;+pkh zVzCFGXEg45)ls+u8KPmI5sr<1R0I{X(HI$Zk7_VM0!8*w9PQZt6<1qZALDUXC-T$F zQFxQ}%8El~^*^M{J;;+WE)Eqb7k8UcnI!bpcCOykR|&56kOVy%d`}OenKVL`ANQ+` zm&cs{C*avg5VluB3N+^oEmsA^qyQ}Ph;@nDwTHEYaJHt_MAJSab46u00MC&(gGR}P z|Na%^I&kn8h#s=!;=$Z%O@vW$$>+HSh#iP{wNj#FP*6(5DB^oEjVR%|$fwRmlz`BB zwc-9K)=t_2?nPt9Qf;`l%$T_XS;BVXnw7?k*NkhLjl5w@V3FaTiL}FAZoT(!{A9i; z=48Vg>e z>m+>z=nEe&OXgG{MLlhnTie|B6&kZDG=uU&ECLTfve+2e}N1;Jjpn!E<1mU==BO9-|)3QZ`~S zScuCBV!IVa$qQJenMTP<4AhJn%Nd;$Bf}sZQ(W%#7Zf&^L zA*Zxl=#|EFKjq#%%h|m--8)MAZf}ayYS3kMkGgh?F5Mz>NF-t1$4hBHE!s`FfMYhX z?As@SUKX$N+MuTyy#H|6(^%$dX1xlft~);qsN#-2k~z72B9C0-CCidiyWO7J*Ywm1 zdSZOVEHh|BaLNCZBLNHnELfgXCD1nP9H1Ng5KPmC8b8?QeXHIHji66`17dH)Tp zkvS0QsNNe8dCjTw-a@0Ch%~L~z!`Z^>p^n3*h-c8etkNI z?9)*n`A_R3KVBx*n4e4?`Qp;n=aH}MBY$D~$p3+^uaA5ukGmZC`z!CXkNiEA75d0; z40{@SJ@PZ{A!K|KB1XnIfj@mB*S*H1VX#Q+HzzH1xD|@xM?X|H=5Aew9_q;qO;?&~yB8-j|xl3LUEg9!cOW=RW8ErG1|Nf(HvU31AWX zMMB4^wt#vE^OS(G_#J2gsESW%Vqj`hiWnd!k)=n34iv9yQlaBi4lOJ=wVVVxT7hwS zY~n98%Ds{`0?`tf<@++{oUv@^`_LS85(4gfVG>1wL^m3dyEGDQ4MukEF=mbU^wnUf z*kwh=)eS~TtI^n!ZA?F77ln|+_IZqZlN_sBZ7~xtnAO01`hIMc|DqQF))`NHNh3?i4+BYAfwrEIeOJ4}++*DYflZnY zf*5v^+b_f37ry2SIp=A4bVIZ>K}( zJ33QY$YWZZB`xSTU`QW?@8Ma+Uo_nnrMG2jJ-&xkx8OEbrj`*>FDX9{DQ5c$$RZzP zQFO9J740fh&xde%ZSLJ?=OUS6uoNOKGRgFZ;w=!58&w_0W#t)3h z9;RKbHisfPlJ6Xf15=eH7PWDU<`&i^3YJ@h#tcnp*z`yD-J+=t=nb_D(@-%sM9GX% z?gsSAn>jFle-)}Abj#!eC>iv1>n8X#HzR&!-ISwaE;-{u>t@EI+?=<^x|t0_NwCn8 zkK6aaH+L7l%Tt?f87Dfzi+>{pLbkjlUr*^v&gV$D2=vKMiBYo2D0zkBse%8kM#)-! zn)&~dF@uA5=HE0O@&;E+Wk;5*HDz6{BuX`h=jXrIwG?PHTZ*C5K2bRs`y$ib);^xqDp^pk62k>nyY0Ur|*V@ zY$}9Q)PzyZ6&e-D^@uvIVfN(ujM-cRp_e@J=tp$L^JYl_Pd+}`zPNCjeR1&^E-d2e zBB-&jMO@Jkv}QNrig^iX;tD*opv(B>;ID$dVjku|6m63Gn}j@CMiEN7lC|>NY?Qn# zzbzn*SD~s} zF+cs4^`e$Sp6c?B{l@98%$E=((z-DD4V3bT+$)71t^XJN6@MqSe{F!qfU~XaNaiouWElFkKgRtfDbFz}R zYq;N$dG8Yq?Uy(*#)GedYS5csEXoRwT^7W8zlaibP`$IHh>nC*A~tzP;y?aJjv_6- zI6E90bYv)HP4yDV0Elt@l4NETEBWY{ z=&ep-ul|_EMfhja9}@reeRY4G6idQK6|O6SY-;UX8Z)!CF(Q(#AM%j+#dS`p6>x0D zOU!y!8udGiMEQTq9|O^^xUfyBDj`D5k^<@_e)DHs+oG4cMfP$&o&QF<^RLSzSo;6R zFN4@fbyHoAkoL`3euyh4P9~?tcRI}ImmmxCL-e7g3I4YJGj@t>+OBJSwYQKv*sEf$B^6>VimH&TW4c_k`**P2xuRy{oDu zgu^T%_rMNrXh%TSLN++OjP86&q=_qV=-6HH?Qj%%@tTmj)E$^`oogO$W(~Q)Cf}hq zz_OA%ZZ^t2UxDep+*Of~I0^`6Wj$n*>Gffg$x?{yTNXPwc1_}%iCAOTE|cAW{WVmm zO;;p;w0u(U8J$rNOlivlc*<*bFgU=M4U|D>O{5NBhC{Mcb9*bzqSCF zJymMr2b`*pb~&$lov*RmdQ8(7ZFrK|I&&;B4c6hUl%04PCmcOXZ?vBmneWc3J}Wts ze$|+Gj;BqRxtR)x+}(_{C2Ndo)_Wj58IA9=fsHKgEv4lse$ zB)V-olQUZ|h3rVd6h3~n62#h+6Y{Eu`6rm9-XqOURy0pz5R(X6FX12kV|r*A9Yw$D z>M}nk41f69QIZ_^{Gghu7ky}A(K8^w=+}`VuTRu*%^)VwH*#OiiofRYURyA4id4p@ z;U1nQ(ac3t1V^qD964W#dHLt)(0KU}qfk@fHJAF~fTEWX3S}js1OIy2pseV%1`h6z`|B%=( z7+LNNcsnW{7LTHv>6s*gkRDnHN&4)c@O9U`b9+Zf-l?vNwxDVfd?c$b@TYe{FZgH; zwhX|fY^ZBRK_cLHQIH%SC`ZWr!wzxH`>1@z-tQ^&M}{MxMt|OEd@Ti*3egC@Uo?R1 zQLs(bNdE+%>+W2tgMx&CseU_EoA1HT_s~-z-`7!9iqydXsw!jge!n2EE#7BDG(Hcv z%cwZ4C5%6^-gfYt#7Mb`M&yBf_S)#PQaPxURkEte08###A_>I3BQOYOqIr(^+r$T& zn-jY`$5?#W`|Nu>orj;O+RjDd$)_@!|DD`KBl1ATAQ1Ljxwh)2n~v&65;c4vsC0GI zgs{5#_@T7vyH_>(w%r8HHPVDAw=m%jc3E^rBHN=%Z_-d&m{R03tSXNdx)hO0+*ng#@dET z)U7Vhc$@263GeO3PFL8&r>IFhlAxAH`X+H^DZKQlwlW>AnzlFBF~S zmf)jn%c65uCJt>Qe&;rMv4&b!Qqbz)62YOQTuxl_2U(Ra4@dabYl8Qre*3Vdn*IFB z@WZhY&#@yAH|W+AJ83zf0;qT%(LD)sYDwp`M_K_%sM%UcFUDy}C&oQI&8h0;X|AW# z=|B->h2SFsj$iqTRe6!$<16%(7bNmQNoK)n{GFEv~e zNtpOg!8z+hnqgdEQE?&l@MfNc=0IrJd0`xAmVa98Vt5cKW7r}0Ne^VYBe&)wk=@6Y z+N<-8{FqDZ)z}`@u}iZhDzVs#t9SeoyVY3S5mqnwW4GmSiHF};(UvTJLl8f9J%iEe z*W&mZC6c^z$Rw3pi|b}|GA1)tajA=PXMk8;sS>R*(u$(zBov`^P}5Z8XSf3fUo_bQ zoXO!P$76c;8WEusL_H^XPw?%EF6R%V5Ag))vlw<+JsBqKb-=r{;x+AEyteJLya|JG z#(l8#Ab&l45w%J~(z1xlaDSk?D`gg1^d!8f=ismY*tcX3I+zQY144{CFA}CPx0b(O zDJ!vLUKir9g%^ukJ4odOG0QTo2hO0x#p@-E?`3Y3{5O~I#?2+xV{7MIbjvra`oxpG%{!OcL!Q8pNwb_7st3F} zkBhVXvZhxAH&6X zxq!_K$fha^vP?5TuI@zZb`V8F)e{nwbw+?CWb58kjE_QCl5(A6dTxN4EhQP!53~(u z)XG2*sB5Ykh4*GJ$bECNsz&l3=}}4J_=Md~Nc2xZf?o{@s%JMd2EY2gU~$tLg!-MJ zc1gO(>RKo#a$wY*<3;HpI)2HHB7n+CPjF>&3L*hsyaM~|nA0uUBgftA-Bj_e#gkTS zZNJ{!_y#6B!f=-pkdap|K_0&Nl|@)xIs7XBUNrDn(LXk}(bH%Wu^E#zJ(nBztCbyF zBw|TuB_SIg1b0f#j#Uykr@i72dg?fa8l>aeAk-vVblC)UA^8VkAn4R95FJMSVQT1( zV{^mt^gf!A-&2I5=#0=MvcMZrf#Bxy%~wqwtRcyNVx?dbMK-bmZNXgUz1JDn;Zw6s z6iWQ=L>)Lk_g--EA?o#0K{fRM91Q@t(%o+*zxQ2Z!GC~A19Hkd2BksA0-jd_Si+De zBPkyd{g>rTOX4A|)_Ak+CMpX`{5N)?Xhc8$rN~Eg=-b&w$(u&Wd&Y{lvWyk`vLf5} z%)1ImjZH0zC!AuAu?M+A{B>tq-)zhpV$2GmEXp%x&4fk{q0(7_u-BNm2}>sImJ}AKlaCZU70>98RBIwdzA4(IuUel^28~fG z14N};ge}n!{!ewH$uefKh9at+i847)iZ4Sbmp9cZ6>@u2upUAxG@%zjulsxb(JVg7 zs_-#sTHNNfj!c@(yA0=M^h~d}ZIi7@ENowJPMsAKf6iL*oE1l7A6%XwiSnTGjnR8| zHuQiW?75Qp!35~OfZC+D@^@%Oy`tTiBCp{qzYa{%K%FvmM2?La7JR-f;QAYiCHAyD z4yc2G#gVYFcn4`Sa`bVVvWK`-0?sEgFBlPGYP z@w!Btnn64nba!QrLz37@=1)(IoG0Z0^q&h}M$FqLfky;9t|$=-l;uC;vo*j+$yQ^< zHVbKZs6q60A-p)U38VxDGwL*1c*I?C9hep|Ty2mn#9{BsTLxhZQaMe$!1pY&_A{V8 zYo)c5F)7I#X5XPA4u6wfcT7v;9c;Mr$M P26>u!)yj_sJuj+t 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%0AGkY@S=TnzH6g07OVe-PEwRx}K+I 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⋙UJR)9?w?lm@;F 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

^ZBjh_dR|)_ywRbGd|s= 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�GwOa_qb%p|Kl3b82YpcCX?) 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

#Z0jncCxM#(mbV+f-kxkc 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�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

_8D#%bfmZKR%L5 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 Sn6dop{CQYcAtV2J@}nwG~(B1G~pK=zeS2s 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 z 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