Pythonで生成した画像をウェブページに表示
Pythonで画像を生成するにはPillowを使うと簡単です。
これをウェブページに表示したいと思います。
調べると次のページが見つかりました。
pillowを使って生成した画像を、ファイルに保存せずにhtml表示【Django】 - Qiita(リンク切れ)
しかし、このままだとうまく動かない部分があり、またDjangoを使って説明している箇所がよく分かりませんでした。
少し修正したところ、うまくできたので、メモとして残しておきます。
macOS 10.14.6
Python 3.7
Google Chrome 77
#!/Library/Frameworks/Python.framework/Versions/3.7/bin/python3
import sys
import io
from PIL import Image, ImageDraw
import base64
def get_base64():
im = Image.new("RGB", (300, 200), "silver")
draw = ImageDraw.Draw(im)
draw.line((10, 10, 290, 190), fill="blue", width=2)
buffer = io.BytesIO()
im.save(buffer, format="PNG")
b64 = base64.b64encode(buffer.getvalue()).decode()
return b64
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
print("Content-Type: text/html; charset=utf-8")
print("")
print("<html>")
print("<body>")
b64 = get_base64()
print("<img src='data:image/png;base64," + b64 + "'>")
print("</body>")
print("</html>")
import sys
import io
from PIL import Image, ImageDraw
import base64
def get_base64():
im = Image.new("RGB", (300, 200), "silver")
draw = ImageDraw.Draw(im)
draw.line((10, 10, 290, 190), fill="blue", width=2)
buffer = io.BytesIO()
im.save(buffer, format="PNG")
b64 = base64.b64encode(buffer.getvalue()).decode()
return b64
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding="utf-8")
print("Content-Type: text/html; charset=utf-8")
print("")
print("<html>")
print("<body>")
b64 = get_base64()
print("<img src='data:image/png;base64," + b64 + "'>")
print("</body>")
print("</html>")
実行環境としてはMampを使っています。
ウェブページを表示する方法については「MampでPythonを使う方法 | You Look Too Cool」を参考にしてください。
画像を生成した後にBase64に変換しこれをimgタグにセットして表示します。
[ 2019年10月12日 | カテゴリー: Python, デジタル | タグ: Pillow ]
« 「object is not iterable」の原因 | Macの空き容量を増やす最も簡単な方法 »
コメントを残す