PIL

Start in JupyterHub

PIL/pillow is a library for image processing, something you would not want to do manually using the binary representation of an image.

from PIL import Image
from IPython.display import Image as I
from IPython.display import display
import numpy as np
from io import BytesIO
# Helper method
def display_pil_image(im, width=200):
   """Displayhook function for PIL Images, rendered as PNG."""

   b = BytesIO()
   im.save(b, format='png')
   data = b.getvalue()

   display(I(data=data, format='png', embed=True, width=width))
def generate_noise():
    Image.fromarray(np.random.randint(0, (1 << 32) - 1, (1024, 1024), dtype=np.uint32), 'RGB').save("images/noise.png")

generate_noise()
display(I(filename='images/noise.png', width=200))
../_images/PIL_5_0.png
def downsample():
    files = ["44954f97-1f0e-463a-88ac-b75835cbb98a", "b5e81b02-cf71-4459-aba5-0395183fc319"]
    for file in files:
        im = Image.open(f"images/{file}.jpg")
        size = 1024
        display_pil_image(im, width=200)
        while size > 4:
            size >>= 1
            im = im.resize((size, size), Image.BILINEAR)
            tmp = im.resize((1024, 1024), Image.NEAREST)
            tmp.save(f"images/{file}-{size:03}.jpg")
            display_pil_image(tmp, width=200)
            
downsample()
../_images/PIL_6_0.png ../_images/PIL_6_1.png ../_images/PIL_6_2.png ../_images/PIL_6_3.png ../_images/PIL_6_4.png ../_images/PIL_6_5.png ../_images/PIL_6_6.png ../_images/PIL_6_7.png ../_images/PIL_6_8.png ../_images/PIL_6_9.png ../_images/PIL_6_10.png ../_images/PIL_6_11.png ../_images/PIL_6_12.png ../_images/PIL_6_13.png ../_images/PIL_6_14.png ../_images/PIL_6_15.png ../_images/PIL_6_16.png ../_images/PIL_6_17.png
def blend():
    zero_image = Image.open(f"images/44954f97-1f0e-463a-88ac-b75835cbb98a-016.jpg")
    one_image = Image.open(f"images/44954f97-1f0e-463a-88ac-b75835cbb98a-128.jpg")
    steps = 8

    for step in range(steps):
        alpha = step / (steps - 1)
        im = Image.blend(zero_image, one_image, alpha)#.save(f"images/cat-gold-blend-{step}.png")
        display_pil_image(im, width=200)
        

blend()
../_images/PIL_7_0.png ../_images/PIL_7_1.png ../_images/PIL_7_2.png ../_images/PIL_7_3.png ../_images/PIL_7_4.png ../_images/PIL_7_5.png ../_images/PIL_7_6.png ../_images/PIL_7_7.png

Take-Home Assignment PIL1