Uzak bir resmi (örneğin http://example.com/image.jpg
) sunucuma kopyalamam gerekir. Mümkün mü?Uzak bir resmi python'a nasıl kopyalarım?
Bunun gerçekten bir görüntü olduğunu nasıl doğrularsınız?
Uzak bir resmi (örneğin http://example.com/image.jpg
) sunucuma kopyalamam gerekir. Mümkün mü?Uzak bir resmi python'a nasıl kopyalarım?
Bunun gerçekten bir görüntü olduğunu nasıl doğrularsınız?
indirmek için: Resim verileri geçerli olmasa bile sadece bu bir görüntü doğrulamak isterseniz doğrulamak için
import urllib2
img = urllib2.urlopen("http://example.com/image.jpg").read()
import StringIO
from PIL import Image
try:
im = Image.open(StringIO.StringIO(img))
im.verify()
except Exception, e:
# The image is not valid
kullanabilirsiniz:imghdr
'yi kullanabilirsiniz.Yöntem, başlıkları kontrol eder ve görüntü türünü belirler. Resim tanımlanamazsa Hiçbiri dönmez.
İndirilmesi şeyler
import urllib
url = "http://example.com/image.jpg"
fname = "image.jpg"
urllib.urlretrieve(url, fname)
birçok yönden yapılabilir bir görüntü olduğunu doğrulanıyor. En zor kontrol, dosyayı Python Image Library ile açıyor ve bir hata atıp atmadığını görüyor.
Dosya türünü indirmeden önce kontrol etmek isterseniz, uzak sunucunun verdiği mime türüne bakın.
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())
Aynı şey httplib2 ... kopyalama uzak görüntü açısından söz eden kısmı için
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
, burada this answer esinlenerek bir cevap değil kullanılarak:
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)
Not o Bu yaklaşım, herhangi bir ikili ortam türünün uzak bir kopyasını kopyalamak için çalışacaktır.