2

I'm downloading an image from the web using urllib2. Once I have downloaded it I want to do some stuff with it using an image module called PIL. I don't want to save the file to disk then reopen but rather pass it from memory using StringIO

from PIL import Image

image_buff = urllib2.urlopen(url)
image = Image.open(StringIO.StringIO(image_buff))

However when I do this I get the following error

IOError: cannot identify image file <StringIO.StringIO instance at 0x101afa2d8

I think this is because I'm not passing a string but rather a urllib2 object/instance. Would anyone know how I can pass a string to PIL correctly.

DavidJB
  • 2,272
  • 12
  • 30
  • 37

2 Answers2

1

You need to .read() your urllib2.urlopen object:

import StringIO
from PIL import Image

image_buff = urllib2.urlopen(url).read()
image = Image.open(StringIO.StringIO(image_buff))
MattDMo
  • 100,794
  • 21
  • 241
  • 231
0

Try this:

from PIL import image
from StringIO import StringIO

f = urllib2.urlopen("http://www.example.com/some.jpg")
data = f.read()

im = Image.open(StringIO(data))
armandino
  • 17,625
  • 17
  • 69
  • 81