Necesito copiar una imagen remota (por ejemplo http://example.com/image.jpg
) a mi servidor. es posible?¿Cómo copio una imagen remota en python?
¿Cómo se verifica que se trata de una imagen?
Necesito copiar una imagen remota (por ejemplo http://example.com/image.jpg
) a mi servidor. es posible?¿Cómo copio una imagen remota en python?
¿Cómo se verifica que se trata de una imagen?
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.
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())
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
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.