2009-06-16 9 views
3

チャートやグラフなど、動的に作成された画像をユーザーに送信したいと思います。これらの画像は「スローアウェイ」画像で、1人のユーザーにのみ送信されます。破壊されたため、「ファイルは含まれていません」。WSGIでファイルを作成せずに動的画像を作成する

ファイルシステムに保存せずに直接画像をユーザーに送信したいと思います。

編集:PHPでこれのようなPHPスクリプトにHTMLファイルに画像をリンクすることによって達成することができSO飲み込ま私のイメージタグを:

スクリプトは、正しいヘッダを送信し
<img src="someScript.php?param1=xyz"> 

(ファイルタイプ= > jpegなど)をブラウザーに送信し、一時的にファイルシステムに保存することなく、イメージをクライアントに直接書き戻しました。

WSGIアプリケーションでこれをどうすればできますか?現在、私はPythonの内部SimpleWSGIサーバを使用しています。私は、このサーバは主にデモ用であり、実際の使用ではないことを認識しています。マルチスレッド機能が不足しているため、これを私に指摘しないでください。私はそれを認識しています。 )

URLをイメージタグに入れてWSGIでリクエストを処理するのと同じくらい簡単ですか、それとも良い方法がありますか?

は(なし32ビットのものください)誰もがこれでどんな経験を持っていたし、私にいくつかのポインタを与えることができる

おかげで、

トム

答えて

8

WSGIやPHPなどの特定のWebテクノロジーとは関係ありません。serveImageを指しているすべてのURLが有効なイメージを返します。ここで

from wsgiref.simple_server import make_server 

def serveImage(environ, start_response): 
    status = '200 OK' 
    headers = [('Content-type', 'image/png')] 
    start_response(status, headers) 

    return open("about.png", "rb").read() 

httpd = make_server('', 8000, serveImage) 
httpd.serve_forever() 

:URL someScript.php?param1=xyzサーバは、画像の種類のデータを返す必要があり、それが

この例を考えてみましょううまくいくために、一般的に

<img src="someScript.php?param1=xyz"> 

を考えます任意のimgタグ、または画像を使用できる他のタグの場所で使用できます。 CSSまたは背景画像

画像データは、多くのサードパーティライブラリを使用してオンザフライで生成することができます。 PILなど 例えば、この技術を使用空想例えばPythonのイメージングライブラリ

http://lost-theory.org/python/dynamicimg.html
2

YESを持っています。ページにURLを入れるのと同じくらい簡単です。

<img src="url_to_my_application"> 

あなたのアプリケーションは、PHPなどと同じように正しいmimetypeで返す必要があります。できるだけ簡単な例:あなたは、フレームワーク/ヘルパーライブラリを使用する場合

def application(environ, start_response): 
    data = open('test.jpg', 'rb').read() # simulate entire image on memory 
    start_response('200 OK', [('content-type': 'image/jpeg'), 
           ('content-length', str(len(data)))]) 
    return [data] 

もちろん、それはあなたのためにそれが容易になりますヘルパー関数を持っているかもしれません。

私は、マルチスレッド機能がWebサーバー上で本質的ではないという側面のコメントを追加したいと思います。正しく実行された場合、パフォーマンスの良いスレッドは必要ありません。

さまざまな要求を切り替えて、スレッドレスのやり方でリクエスト処理コードを書く(できるだけ頻繁に制御をサーバーに戻す)ことができます。より速く実行してオーバーヘッドを追加するものではないため、スレッドを使用するよりパフォーマンスが良いです。

スレッドを使用しない優れたPython Webサーバーの実装については、twisted.webを参照してください。

+0

あなたの偉大な答えに感謝しています。また、スレッディングに関する良い情報もありがとうございました。私は最初の答えを正しいものとして設定しました。なぜなら、彼はあなたよりも少し速かったからです。実際の答えはほぼ同じです。しかし、あなたの答えも正しいものと考えてください。私は2つの正しいものを設定できれば、あなたのものもそれらの1つになります:) – Tom

+0

@Tom:実際には私は速かった(私の答えは今 "44分前に答えた" 「42分前に答えた」と言っていますが、後で私の答えを編集したので、リストに載っていたと思います。また、私はより小さく、明確な答えでより多くの情報を持っているようです。しかし、それはあなたの呼び出しです。 – nosklo

0

を使用して動的画像を生成する例を参照して、 the BNF railroad diagram WHIFF mini-demoを参照してください。 WHIFF wsgiツールキットのダウンロードからソースを入手できます。

0

ETagヘッダーの使用と注意を考慮する必要があります。これはWSGIではなくCGIスクリプトですが、そのアイデアは翻訳可能です:sparklines source - 常に同じパラメータの同じイメージを返すので、極端なキャッシングが実行されます。

関連する問題