質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3441閲覧

pythonで画像データをメモリに載せてブラウザに表示する方法

enigumalu

総合スコア192

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2019/11/27 10:09

PILで適当な入力情報の画像を作成し、そのファイルを一時ディレクトリに展開してブラウザに表示するといった事を考えていたのですが、
NamedTemporaryFileで一時ディレクトリを作成してそこにファイルを作成しHTMLのimgタグで指定すれば見れるかなと思ったのですが画像がなく表示されませんでした。
一時ディレクトリでなくてもサーバーサイドで作成した画像をメモリ上に保存してそれをブラウザで表示する方法はないでしょうか。
pythonは3.7で一応djangoを使う想定で, MEDIA_URL=/media/のように指定しています。

font_color = (0, 0, 0) im = Image.new('RGBA', (60,60), (0, 0, 0, 0)) draw = ImageDraw.Draw(im) draw.text((0,0),req.POST["req_string"],font_color) #物理的に存在するディレクトリ path = "/file/hoge/media/test.png" img.save(path) #途中で一時ディレクトリを試してみました with tempfile.NamedTemporaryFile(delete=False) as tf: temp_file_name = tf.name path = "/file/hoge/media/"+ temp_file_name +"test.png"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2019/11/27 17:57

回答はできないのですが、画像を作る場合、 ・いつまで保持しないといけないのか? ・URIの指定で一意に決まる固定画像なのか? ・ブラウザでキャッシュすべきものなのか? が重要な場合があります。分かる範囲でいいので、書いといた方がいいと思いますよ。
guest

回答2

0

ベストアンサー

サーバーサイドで作成した画像をメモリ上に保存してそれをブラウザで表示する方法はないでしょうか。

Data URIにエンコードして、HTML上に書き出してしまう、という方法も考えられます。

投稿2019/11/27 11:00

maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

fp – A filename (string), pathlib.Path object or file object.

ですので、第一引数にファイル名ではなく、ファイルオブジェクトも指定できます。

また、ioモジュールにメモリ上に読み書きできるファイルオブジェクト「BytesIOがあります。
これの複合技で、PILの保存をメモリ上で行うことができます。

python

1# coding: utf-8 2 3import sys, io 4from PIL import Image 5 6if __name__ == '__main__': 7 img = Image.new('RGB', (64, 64), (0, 255, 0)) 8 f = io.BytesIO() 9 img.save(f, 'png') 10 11 # 確認のため、ファイルに書き出してみる。 12 with open('hoge.png', 'wb') as out_f: 13 out_f.write(f.getvalue()) 14

djangoは知らないのでこの先はわかりませんが、

上記のような感じで画像を返すレスポンスを作っておき、imgタグのsrc属性にそのURLを指定しておけばいいんじゃないでしょうか。

投稿2019/11/27 12:50

katsuko

総合スコア3471

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問