17

リモート イメージ (たとえばhttp://example.com/image.jpg) をサーバーにコピーする必要があります。これは可能ですか?

これが実際に画像であることをどのように確認しますか?

4

4 に答える 4

33

ダウンロードする:

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

確認するには、PILを使用できます

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

画像データが有効でない場合でも、これが画像であることを確認したい場合:imghdrを使用できます

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

このメソッドはヘッダーをチェックし、画像タイプを判別します。画像が識別できなかった場合は、Noneが返されます。

于 2009-09-08T15:45:41.047 に答える
5

ダウンロード中

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

画像であることの確認は、さまざまな方法で行うことができます。最も難しいチェックは、Python イメージ ライブラリでファイルを開き、エラーが発生するかどうかを確認することです。

ダウンロードする前にファイルの種類を確認したい場合は、リモート サーバーが提供する mime-type を確認してください。

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() )
于 2009-09-08T15:43:14.267 に答える
2

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
于 2009-10-29T19:21:04.670 に答える
1

リモートイメージのコピーに関する質問の部分については、この回答に触発された回答を次に示します。

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)

この方法は、任意のバイナリ メディア タイプのリモート ファイルをコピーする場合に有効です。

于 2015-02-03T19:13:43.140 に答える