PIL
¶
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))
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()
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()