Python Imaging Library
Library for the Python programming language
- 3 min read
- 3 chapters
Related on Lably
Through Free and open-source software, Library (computing) and Python (programming language)
Development of the original project, known as PIL, was discontinued in 2011. Subsequently, a successor project named Pillow forked the PIL repository and added Python 3.x support. This fork has been adopted as a replacement for the original PIL in Linux distributions including Debian and Ubuntu (since 13.04).
Capabilities
PIL offers several standard procedures for image manipulation. These include:
- per-pixel manipulations,
- masking and transparency handling,
- image filtering, such as blurring, contouring, smoothing, or edge finding,
- image enhancing, such as sharpening, adjusting brightness, contrast or color,
- adding text
Sign in to keep reading
2 more chapters are free with a Lably account.
File formats
Supported file formats include PPM, PNG, JPEG, GIF, TIFF, and BMP. PIL is extensible, allowing users to create custom decoders for any file format.
Programming examples
<span id="mwaw"></span><span class="kn" id="mwbA">import</span><span class="w" id="mwbQ"> </span><span class="nn" id="mwbg">os</span> <span class="kn" id="mwbw">from</span><span class="w" id="mwcA"> </span><span class="nn" id="mwcQ">PIL</span><span class="w" id="mwcg"> </span><span class="kn" id="mwcw">import</span> <span class="n" id="mwdA">Image</span> <span class="k" id="mwdQ">def</span><span class="w" id="mwdg"> </span><span class="nf" id="mwdw">convert_jpegs_to_pngs</span><span class="p" id="mweA">(</span><span class="n" id="mweQ">folder_path</span><span class="p" id="mweg">):</span> <span class="c1" id="mwew"># Checks if the provided path is a folder</span> <span class="k" id="mwfA">if</span> <span class="ow" id="mwfQ">not</span> <span class="n" id="mwfg">os</span><span class="o" id="mwfw">.</span><span class="n" id="mwgA">path</span><span class="o" id="mwgQ">.</span><span class="n" id="mwgg">isdir</span><span class="p" id="mwgw">(</span><span class="n" id="mwhA">folder_path</span><span class="p" id="mwhQ">):</span> <span class="nb" id="mwhg">print</span><span class="p" id="mwhw">(</span><span class="sa" id="mwiA">f</span><span class="s2" id="mwiQ">"Error: </span><span class="si" id="mwig">{</span><span class="n" id="mwiw">folder_path</span><span class="si" id="mwjA">}</span><span class="s2" id="mwjQ"> is not a valid folder."</span><span class="p" id="mwjg">)</span> <span class="k" id="mwjw">return</span> <span class="c1" id="mwkA"># Iterates over all files in the folder</span> <span class="k" id="mwkQ">for</span> <span class="n" id="mwkg">filename</span> <span class="ow" id="mwkw">in</span> <span class="n" id="mwlA">os</span><span class="o" id="mwlQ">.</span><span class="n" id="mwlg">listdir</span><span class="p" id="mwlw">(</span><span class="n" id="mwmA">folder_path</span><span class="p" id="mwmQ">):</span> <span class="c1" id="mwmg"># Checks if the file has a .jpg or .jpeg extension</span> <span class="k" id="mwmw">if</span> <span class="n" id="mwnA">filename</span><span class="o" id="mwnQ">.</span><span class="n" id="mwng">lower</span><span class="p" id="mwnw">()</span><span class="o" id="mwoA">.</span><span class="n" id="mwoQ">endswith</span><span class="p" id="mwog">(</span><span class="s2" id="mwow">".jpg"</span><span class="p" id="mwpA">)</span> <span class="ow" id="mwpQ">or</span> <span class="n" id="mwpg">filename</span><span class="o" id="mwpw">.</span><span class="n" id="mwqA">lower</span><span class="p" id="mwqQ">()</span><span class="o" id="mwqg">.</span><span class="n" id="mwqw">endswith</span><span class="p" id="mwrA">(</span><span class="s2" id="mwrQ">".jpeg"</span><span class="p" id="mwrg">):</span> <span class="c1" id="mwrw"># Full path of the file</span> <span class="n" id="mwsA">jpeg_path</span> <span class="o" id="mwsQ">=</span> <span class="n" id="mwsg">os</span><span class="o" id="mwsw">.</span><span class="n" id="mwtA">path</span><span class="o" id="mwtQ">.</span><span class="n" id="mwtg">join</span><span class="p" id="mwtw">(</span><span class="n" id="mwuA">folder_path</span><span class="p" id="mwuQ">,</span> <span class="n" id="mwug">filename</span><span class="p" id="mwuw">)</span> <span class="c1" id="mwvA"># Path for the converted file</span> <span class="n" id="mwvQ">png_path</span> <span class="o" id="mwvg">=</span> <span class="n" id="mwvw">os</span><span class="o" id="mwwA">.</span><span class="n" id="mwwQ">path</span><span class="o" id="mwwg">.</span><span class="n" id="mwww">join</span><span class="p" id="mwxA">(</span><span class="n" id="mwxQ">folder_path</span><span class="p" id="mwxg">,</span> <span class="n" id="mwxw">os</span><span class="o" id="mwyA">.</span><span class="n" id="mwyQ">path</span><span class="o" id="mwyg">.</span><span class="n" id="mwyw">splitext</span><span class="p" id="mwzA">(</span><span class="n" id="mwzQ">filename</span><span class="p" id="mwzg">)[</span><span class="mi" id="mwzw">0</span><span class="p" id="mw0A">]</span> <span class="o" id="mw0Q">+</span> <span class="s2" id="mw0g">".png"</span><span class="p" id="mw0w">)</span> <span class="k" id="mw1A">try</span><span class="p" id="mw1Q">:</span> <span class="c1" id="mw1g"># Opens the JPEG image</span> <span class="k" id="mw1w">with</span> <span class="n" id="mw2A">Image</span><span class="o" id="mw2Q">.</span><span class="n" id="mw2g">open</span><span class="p" id="mw2w">(</span><span class="n" id="mw3A">jpeg_path</span><span class="p" id="mw3Q">)</span> <span class="k" id="mw3g">as</span> <span class="n" id="mw3w">img</span><span class="p" id="mw4A">:</span> <span class="c1" id="mw4Q"># Converts and saves as PNG</span> <span class="n" id="mw4g">img</span><span class="o" id="mw4w">.</span><span class="n" id="mw5A">save</span><span class="p" id="mw5Q">(</span><span class="n" id="mw5g">png_path</span><span class="p" id="mw5w">,</span> <span class="s2" id="mw6A">"PNG"</span><span class="p" id="mw6Q">)</span> <span class="nb" id="mw6g">print</span><span class="p" id="mw6w">(</span><span class="sa" id="mw7A">f</span><span class="s2" id="mw7Q">"Converted </span><span class="si" id="mw7g">{</span><span class="n" id="mw7w">jpeg_path</span><span class="si" id="mw8A">}</span><span class="s2" id="mw8Q"> to </span><span class="si" id="mw8g">{</span><span class="n" id="mw8w">png_path</span><span class="si" id="mw9A">}</span><span class="s2" id="mw9Q">"</span><span class="p" id="mw9g">)</span> <span class="k" id="mw9w">except</span> <span class="ne" id="mw-A">Exception</span> <span class="k" id="mw-Q">as</span> <span class="n" id="mw-g">e</span><span class="p" id="mw-w">:</span> <span class="nb" id="mw_A">print</span><span class="p" id="mw_Q">(</span><span class="sa" id="mw_g">f</span><span class="s2" id="mw_w">"Error converting </span><span class="si" id="mwAQA">{</span><span class="n" id="mwAQE">jpeg_path</span><span class="si" id="mwAQI">}</span><span class="s2" id="mwAQM">: </span><span class="si" id="mwAQQ">{</span><span class="n" id="mwAQU">e</span><span class="si" id="mwAQY">}</span><span class="s2" id="mwAQc">"</span><span class="p" id="mwAQg">)</span>
