In [13]:
%pylab inline


Populating the interactive namespace from numpy and matplotlib
WARNING: pylab import has clobbered these variables: ['display', 'draw']
`%pylab --no-import-all` prevents importing * from pylab and numpy

In [14]:
from PIL import Image
im = Image.new('L', (2,2))
im.putdata([[1,20],[100,200]])
im


Out[14]:
<PIL.Image.Image image mode=L size=2x2 at 0x68E23C8>

In [15]:
from io import BytesIO

from IPython.core import display
from PIL import Image


def display_pil_image(im):
   """Displayhook function for PIL Images, rendered as PNG."""

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

   ip_img = display.Image(data=data, format='png', embed=True)
   return ip_img._repr_png_()


# register display func with PNG formatter:
png_formatter = get_ipython().display_formatter.formatters['image/png']
dpi = png_formatter.for_type(Image.Image, display_pil_image)

In [16]:
from PIL import Image
from PIL.ImageDraw import Draw
img = Image.new("RGBA", (100, 100))
draw = Draw(img)
draw.rectangle(((0,0), (100, 100)), fill=(255, 100, 0))
# img.save("foo.png")
img


Out[16]:
<PIL.Image.Image image mode=RGBA size=100x100 at 0x69A6630>

In [ ]: