2009-09-08 8 views

risposta

31

Per scaricare:

import urllib2 
img = urllib2.urlopen("http://example.com/image.jpg").read() 

Per verificare può usare PIL

import StringIO 
from PIL import Image 
try: 
    im = Image.open(StringIO.StringIO(img)) 
    im.verify() 
except Exception, e: 
    # The image is not valid 

Se si desidera solo per verificare questo è un'immagine, anche se i dati dell'immagine non è valido: È possibile utilizzare imghdr

import imghdr 
imghdr.what('ignore', img) 

Il metodo controlla le intestazioni e determina il tipo di immagine. Restituirà None se l'immagine non è identificabile.

5

roba download

import urllib 
url = "http://example.com/image.jpg" 
fname = "image.jpg" 
urllib.urlretrieve(url, fname) 

verificando che sia un'immagine può essere fatto in molti modi. Il controllo più difficile è aprire il file con la libreria di immagini Python e vedere se genera un errore.

Se si desidera verificare il tipo di file prima del download, osservare il tipo mime fornito dal server remoto.

import urllib 
url = "http://example.com/image.jpg" 
fname = "image.jpg" 
opener = urllib.urlopen(url) 
if opener.headers.maintype == 'image': 
    # you get the idea 
    open(fname, 'wb').write(opener.read()) 
2

stessa cosa usando httplib2 ...

from PIL import Image 
from StringIO import StringIO 
from httplib2 import Http 

# retrieve image 
http = Http() 
request, content = http.request('http://www.server.com/path/to/image.jpg') 
im = Image.open(StringIO(content)) 

# is it valid? 
try: 
    im.verify() 
except Exception: 
    pass # not valid 
0

Per la parte della domanda rispetto al copia un'immagine remota, qui è una risposta ispirata this answer:

import urllib2 
import shutil 

url = 'http://dummyimage.com/100' # returns a dynamically generated PNG 
local_file_name = 'dummy100x100.png' 

remote_file = urllib2.urlopen(url) 
with open(local_file_name, 'wb') as local_file: 
    shutil.copyfileobj(remote_file, local_file) 

Si noti che questo approccio funzionerà per copiare un file remoto di qualsiasi tipo di supporto binario.