[Image-SIG] Re: How to open image file via HTTP and save locally?

Anastasios Hatzis ahatzis at ithcorp.com
Thu Apr 22 08:48:46 EDT 2004


On Wed, 2004-04-21 at 13:08, Fredrik Lundh wrote:
> Anastasios Hatzis wrote:
> 
> > I want my Python script to read a remote image file on a web server
> > (e.g. JPG) and then save it locally.
> >
> > I imported PIL 1.1.4 on my Python 2.3.2 (Windows XP) and everything
> > works fine while I read locally stored image files, using the PIL.
> >
> > But I can't find an example or description, how to open an image file,
> > if it is not local but on a remote Web server ...
> > - neither in PIL handbook, Python website, nor in various mailing
> > archives.
> 
> if you want PIL to open the file from the web:
> 
>     import urllib
>     import Image
> 
>     im = Image.open(urllib.urlopen(URL))
> 
> if you just want to download the file to a local directory:
> 
>     import urllib
>     urllib.urlretrieve(URL, FILENAME)
> 
> see also:
> 
>     http://www.python.org/doc/current/lib/module-urllib.html
>     http://effbot.org/zone/pil-image-size.htm
> 
> </F>
> 

Thank you for your help. Example 2 worked as described. And on 
your recommended effbot-link I found the information how to check 
size before downloading the image.

An error occured at example 1 (see below), that I could solve
with a suggestion of Steve Holden on 
http://mail.python.org/pipermail/python-list/2001-October/067726.html

I attached the error message and the solution below, 
so other users may find it on this list, if they got same problem.

Anastasios

===

Error of Example 2:
Traceback (most recent call last):
  File "F:\PYfiles\example1.py", line 4, in -toplevel-
    im = Image.open(urllib.urlopen('http://freegee.sourceforge.net/FG_EN/src/teasers_en/t_gee-power_en.gif'))
  File "F:\Python23\lib\site-packages\PIL\Image.py", line 1555, in open
    fp.seek(0)
AttributeError: addinfourl instance has no attribute 'seek'

===

Example Solution:

#example2.py
import cStringIO # *much* faster than StringIO
import urllib
import Image


file = urllib.urlopen('http://freegee.sourceforge.net/FG_EN/src/teasers_en/t_gee-power_en.gif')
im = cStringIO.StringIO(file.read()) # constructs a StringIO holding the image
img = Image.open(im)

# now use PIL
print img.format, img.size, img.mode
img.save('my_copy.gif')

# delete img if you need to save space and work on large images
del img




More information about the Image-SIG mailing list