Image Processing in Python Processing raster images with the Pillow library Martin McBride Thisbookisforsaleathttp://leanpub.com/imageprocessinginpython Thisversionwaspublishedon2021-08-22 ThisisaLeanpubbook.LeanpubempowersauthorsandpublisherswiththeLeanPublishing process.LeanPublishingistheactofpublishinganin-progressebookusinglightweighttoolsand manyiterationstogetreaderfeedback,pivotuntilyouhavetherightbookandbuildtractiononce youdo. ©2021MartinMcBride Contents Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Whoisthisbookfor? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Abouttheauthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Keepintouch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . i Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii Examplesourcesongithub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii I Bitmap images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1. Introductiontobitmapimaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.1 Whatisabitmapimage? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Spatialsampling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.3 Colourrepresentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 1.4 Fileformats. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.5 Vectorimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Computercolour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1 Visiblelight . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1.1 Frequencyandwavelength. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Whatiscolour? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2.1 Non-spectralcolours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.3 Howweseecolour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.4 TheRGBcolourmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4.1 Displayingcolour . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.4.2 RepresentingRGBcoloursasapercentage . . . . . . . . . . . . . . . . . . 10 2.4.3 Floatingpointrepresentation . . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.4.4 Bytevaluerepresentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.5 Colourresolution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.6 Greyscalecolourmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.7 TheCMYKcolourmodel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 2.7.1 TheKcomponent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 2.8 HSL/HSBcolourmodels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 CONTENTS 2.9 HSLvariants . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.10 Perceptualcolourmodels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 2.10.1 CIEspaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.11 Colourmanagement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 2.11.1 Gamuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3. Bitmapimagedata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.1 Datalayout . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.2 8-bitperchannelimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.1 24-bitRGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.2 32-bitCMYK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.3 8-bitgreyscale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.4 32-bitRGBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3 Bitmapdatawithfewerlevels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.3.1 8-bitRGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 3.3.2 16-bitRGB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 3.3.3 Dithering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 3.4 Bilevelimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.5 Bitmapdatawithmorelevels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.6 Palettebasedimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.6.1 Imageswithmorethan256colours. . . . . . . . . . . . . . . . . . . . . . . 28 3.7 Handlingtransparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 3.7.1 Alphachannel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.7.2 Transparentpaletteentry. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.7.3 Transparentcolour. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.8 Interlacingandalternatepixelordering . . . . . . . . . . . . . . . . . . . . . . . . . . 30 4. Imagefileformats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.1 Whyaretheresomanyformats?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 4.2 Imagedataandmetadata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 4.3 Imagecompression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.3.1 Losslesscompression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 4.3.2 Lossycompression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.4 Somecommonfileformats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 4.4.1 PNGformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.4.2 JPEGformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 4.4.3 GIFformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.4.4 BMPformat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 4.5 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38 II Pillow library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 5. IntroductiontoPillow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 CONTENTS 5.1 PillowandPIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.2 InstallingPillow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 5.3 MainfeaturesofPillow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 6. Basicimaging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.1 TheImageclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.2 Creatinganddisplayinganimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 6.3 Savinganimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 6.4 Handlingcolours . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.4.1 Convertingstringstocolours . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.5 Creatingimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 6.6 Openinganimage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 6.7 Imageprocessing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.8 Rotatinganimage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 6.9 Creatingathumbnail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 6.10 Imagemodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 7. Imageclass . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 7.1 Examplecode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 7.2 Creatingimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 7.2.1 Image.new . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 7.2.2 Image.open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 7.2.3 copy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 7.2.4 Othermethods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.3 Savingimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.4 Imagegenerators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 7.5 Workingwithimagebands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7.5.1 getbands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7.5.2 split . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 7.5.3 merge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55 7.5.4 getchannel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 7.5.5 putalpha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 8. ImageOpsmodule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 8.1 Imageresizingfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 8.1.1 expand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58 8.1.2 crop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 8.1.3 scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 8.1.4 pad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 8.1.5 fit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64 8.2 Imagetransformationfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 8.2.1 flip . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 8.2.2 mirror . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 8.2.3 exif-transpose. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 CONTENTS 8.3 Coloureffects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.3.1 grayscale. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.3.2 colorize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 8.3.3 invert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 8.3.4 posterize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 8.3.5 solarize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 8.4 Imageadjustment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 8.4.1 autocontrast. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 8.4.2 equalize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 8.5 Deformingimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73 8.5.1 Howdeformworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 8.5.2 getmesh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75 8.5.3 Awavetransform . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76 8.5.4 Otherdeformations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 9. Imageattributesandstatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 9.1 Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78 9.1.1 Filesize . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 9.1.2 Filename . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 9.1.3 Fileformat. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 9.1.4 Modeandbands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 9.1.5 Palette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 9.1.6 Info . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 9.1.7 Animation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 9.1.8 EXIFtags . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 9.2 Imagestatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 9.2.1 Imagehistogram . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84 9.2.2 Masking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 9.2.3 OtherImagestatistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 9.2.4 ImageStatmodule . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 10. Enhancingandfilteringimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 10.1 ImageEnhance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 10.1.1 Brightness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 10.1.2 Contrast . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 10.1.3 Color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 10.1.4 Sharpness . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90 10.2 ImageFilter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 10.3 Predefinedfilters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 10.4 Parameterisedfilters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 10.4.1 Blurringfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93 10.4.2 Unsharpmasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 10.4.3 Rankingandaveragingfilters . . . . . . . . . . . . . . . . . . . . . . . . . . 97 CONTENTS 10.5 Definingyourownfilters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 11. Imagecompositing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 11.1 Simpleblending . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 11.1.1 Imagetransparency . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 11.1.2 ImageChopsblendfunction . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 11.1.3 ImageChopscompositefunction . . . . . . . . . . . . . . . . . . . . . . . . 102 11.2 Blendmodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 11.2.1 Addition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 11.2.2 Subtraction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 11.2.3 Lighteranddarker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 11.2.4 Multiplyandscreen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 11.2.5 Otherblendmodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 11.3 Logicalcombinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 12. Drawingonimages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 12.1 Coordinatesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 12.2 Drawingshapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 12.2.1 Drawingrectangles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 12.2.2 Drawingothershapes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 12.2.3 Points . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116 12.3 Handlingtext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 12.3.1 Drawingsimpletext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 12.3.2 Fontandtextmetrics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 12.3.3 Anchoring . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120 12.3.4 Drawingmultilinetext . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 12.4 Paths. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 12.4.1 Drawingapath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123 12.4.2 Transformingpaths . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 12.4.3 Mappingpoints. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126 13. Accessingpixeldata . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 13.1 Processinganimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 13.2 Creatinganimage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 13.3 Performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 14. IntegratingPillowwithotherlibraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 14.1 NumPyintegration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 14.1.1 ConvertingaPillowimagetoNumpy . . . . . . . . . . . . . . . . . . . . . 133 14.1.2 ImagedatainaNumPyarray . . . . . . . . . . . . . . . . . . . . . . . . . . 134 14.1.3 ModifyingtheNumPyimage . . . . . . . . . . . . . . . . . . . . . . . . . . 134 14.1.4 ConvertingaNumPyarraytoaPillowimage . . . . . . . . . . . . . . . . 135 CONTENTS III Reference . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .136 15. Pillowcolourrepresentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 15.1 Hexadecimalcolourspecifiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 15.2 RGBfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 15.3 HSLfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 15.4 HSVfunctions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 15.5 Namedcolours. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 15.6 Example. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 15.7 Imagemodes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Morebooksfromthisauthor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 NumpyRecipes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 ComputerGraphicsinPythonwithPycairo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143 FunctionalProgramminginPython. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Preface This book provides an introduction to the basics of image processing in Python, using the Pillow imaging library. After reading this book you should be able to create Python programs to read, writeandmanipulateimages. Who is this book for? ThisbookisaimedatanyonewishingtolearnaboutimageprocessinginPython.Itdoesn’trequire any prior knowledge of image processing, but it will also be useful if you already have experience workingwithimagedataandwouldliketolearnthespecificsofthePillowlibrary. It will be assumed that you have a basic working knowledge of Python, but all examples are fully explainedanddon’tuseanyadvancedlanguagefeatures. About the author MartinMcBrideisasoftwaredeveloper,specialisingincomputergraphics,sound,andmathematical programming. He has been writing code since the 1980s in a wide variety of languages from assembler through to C++, Java and Python. He writes for PythonInformer.com and is the author of several books on Python. He is interested in generative art and works on the generativepy open sourceproject. Keep in touch Ifyouhaveanycommentsorquestionsyoucangetintouchbyanyofthefollowingmethods: • JoiningthePythonInformerforumathttp://pythoninformer.boards.net/¹. • SigningupforthePythonInformernewsletteratpythoninformer.com • Following@pythoninformeronTwitter. • Contactingmedirectlybyemail([email protected]). ¹http://pythoninformer.boards.net/ Introduction ThisbookisaboutbitmapimaginginPython.Itisdividedintotwosections: • Bitmap images - introduces some important concepts of bitmap imaging, including colour representation,pixeldatamodels,imagecompression,fileformatsandmetadata. • Pillowlibrary-adetailedtutorialonthePythonPillowimaginglibrary,oneofthemostpopular Pythonimaginglibraries. There is also a Reference section, containing some useful information that you will probably need torefertoo,allgatheredinoneplace. Versions ThisbookusesPillowversion8.2.0and Pythonversion3.9. Theexampleswillworkwitholderversions(Pillowversion5orlater,Pythonversion3.6orlater). Thereisagoodchancetheexampleswillalsoworkwithnewerversions. Example sources on github Youcanfindexampleimagesandsourcefilesongithub,athttps://github.com/martinmcbride/python- imaging-book-examples