urllib
ドキュメントには、によって返されたオブジェクトが操作urlopen
をサポートしていないことが記載されていseek
ます。
このモジュールは、ワールド ワイド ウェブ全体でデータを取得するための高レベル インターフェイスを提供します。特に、urlopen() 関数は組み込み関数 open() に似ていますが、ファイル名の代わりに Universal Resource Locator (URL) を受け入れます。いくつかの制限が適用されます — 読み取り用に URL を開くことしかできず、シーク操作は使用できません。
ただし、PIL.open
関数は明示的にそれを必要とします。
開いた
Image.open(infile) => 画像
Image.open(ファイル内、モード) => 画像
指定された画像ファイルを開いて識別します。これは遅延操作です。実際の画像データは、データを処理しようとするまでファイルから読み取られません (load メソッドを呼び出して強制的に読み込みます)。モード引数を指定する場合、それは "r" でなければなりません。
文字列 (ファイル名を表す) またはファイル オブジェクトのいずれかを使用できます。後者の場合、ファイル オブジェクトは read、seek、および tell メソッドを実装し、バイナリ モードで開く必要があります。
cStringIO
文字列をファイルのようなオブジェクトに変換するモジュールを使用してみてください。
from PIL import Image
import urllib2 as urllib
import cStringIO
fd = urllib.urlopen("http://a/b/c")
image_file = cStringIO.StringIO(fd.read())
im = Image.open(image_file)
im.size