ユーザーがイメージをアップロードし、PILを使用してサイズを変更すると、PIL Image objectが表示されます。PIL Imageオブジェクトをテンプレートに表示するにはどうすればよいですか?
PIL Image
ファイルをテンプレートに保存してからデータベースに保存するにはどうすればよいですか?イメージとして渡されレンダリングされることもできますか?
ユーザーがイメージをアップロードし、PILを使用してサイズを変更すると、PIL Image objectが表示されます。PIL Imageオブジェクトをテンプレートに表示するにはどうすればよいですか?
PIL Image
ファイルをテンプレートに保存してからデータベースに保存するにはどうすればよいですか?イメージとして渡されレンダリングされることもできますか?
限られたブラウザセットでは、画像をbase64でエンコードしてインライン画像を使用できます。 Embedding Base64 Imagesを参照してください。
すべてのブラウザで機能する解決策は、view that returns the imageを参照する画像タグです。
[更新]
Iが望むすべては、元画像を送信するユーザのためのものであり、その後の左側にリサイズ画像と(画像のキャプション入力に別の形態によって促されキャプションフィールド)。次に、ユーザーが画像を「送信」し、キャプションがモデルインスタンスに保存されます。それが動作しない理由を
<img src="foo">
を使用する場合はまあ...、fooが常にGETによって取得され
は、おそらくそれは - request.FILESは、GET要求で使用できなくなります。 FirebugまたはChromeデバッグツールバーを開くと、ネットワークタブに、アップロードされた画像とそれに続いて画像を取得するGETリクエストが含まれたPOSTリクエストが表示されます。
両方のステップの間にイメージを保存する必要があります。
他にどのように保存できますか?一時的であることが大好きです。これを行うには本当に簡単な方法があると思いますか、それともそれらのオプションを調べるべきですか?
人気のある選択肢は、redisとmemcachedです。あなたはそれらを有効期限付きの巨大な共有python dictと考えることができます。アバターのように画像が小さい場合は、画像データをセッション変数に保存することもできます。
base64でエンコードされた画像をタグに埋め込むことができます。したがって、PILイメージをbase64に変換して表示することができます。 example outputへ
<img src="data:image/png;base64,' + contents + ' />
ルック:
from PIL import Image
import StringIO
x = Image.new('RGB',(400,400))
output = StringIO.StringIO()
x.save(output, "PNG")
contents = output.getvalue().encode("base64")
output.close()
contents = contents.split('\n')[0]
は、その後に表示されます。
私はこの行を削除した後、私のために働いた:contents = contents.split( '\ n')[0] – Yerke
はい、いいえ。
はい、生のBase64データとして画像を配置できます。これをテストするために使用できる小さなスクリプトがあります:
import Image
import base64
import StringIO
output = StringIO.StringIO()
im = Image.open("test.png") # Your image here!
im.save(output, format='PNG')
output.seek(0)
output_s = output.read()
b64 = base64.b64encode(output_s)
open("test.html","w+").write('<img src="data:image/png;base64,{0}"/>'.format(b64))
しかし、これは本当に悪い考えです。複数のサムネイルを使用すると、1つのHTMLページが10MB以上になることがあります。
本当にすべきことは、別々のDjangoビューを使用して、PNGオブジェクトからPNGファイルとしてイメージを返し、ページのimg
href
という属性のビューを参照することです。
Djangoプロセスから直接画像を提供してもよろしいですか?それは貴重なメモリを消費するだけでなく、スレッドやプロセスを束ねることになります –
(確かな証拠はありません)イメージを保存してフロントエンドのWebサーバーにバイトシャッフルをさせる方がはるかに良いと思います。 X-Sendfile(Apache)またはX-Accel-Redirect(Nginx)を見てください。 –