Ho bisogno di copiare un'immagine remota (ad esempio http://example.com/image.jpg
) sul mio server. È possibile?Come copiare un'immagine remota in python?
Come si verifica che si tratti effettivamente di un'immagine?
Ho bisogno di copiare un'immagine remota (ad esempio http://example.com/image.jpg
) sul mio server. È possibile?Come copiare un'immagine remota in python?
Come si verifica che si tratti effettivamente di un'immagine?
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.
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())
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
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.