2009-09-08 21 views

Respuesta

31

Para descargar:

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

Para verificar puede utilizar PIL

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

Si lo que desea para verificar esta es una imagen, incluso si los datos de imagen no es válido: Puede usar imghdr

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

El método comprueba los encabezados y determina el tipo de imagen. Devolverá None si la imagen no fue identificable.

5

cosas Descarga

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

Comprobación de que se trata de una imagen que se puede hacer de muchas maneras. La comprobación más difícil es abrir el archivo con la biblioteca de imágenes de Python y ver si arroja un error.

Si desea comprobar el tipo de archivo antes de descargarlo, observe el tipo de mime que proporciona el servidor 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

lo mismo 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

Para la parte de la pregunta con respecto a la copia una imagen remota, aquí es una respuesta inspirada por 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) 

Tenga en cuenta que este enfoque funcionará para copiar un archivo remoto de cualquier tipo de medio binario.

Cuestiones relacionadas