1
0

More than 3 years have passed since last update.

Djangoでformから読み込んだPIL形式の画像をbase64形式に変換する

Posted at

はじめに

メモ程度なので、Djangoの細かい設定は省きます。
プロジェクトはimage_pred, アプリ名はmyappとしています。
設定は公式ページの最初の部分にあるような基本的なところしかやっておりません。

プログラム

index.htmlから、フォームを使って画像を送ります。

index.html
{% load static %}
<!doctype html>
<html lang="ja">
<head>
 <meta charset="utf-8">
 <title>title</title>
</head>
<body>
   <div id = "input_form">
      <form action="{% url 'index' %}" method="POST" enctype="multipart/form-data">
         {% csrf_token %}
         {{ form }}
         <input type="submit" value="送信" />
      </form>
   </div>
   <!--<div id = "prevent"><img src="{{question_id}}"></div>-->
   <div id = "predict">{{urls}}</div>
</body>
</html>
forms.py
from django import forms

class PhotoForm(forms.Form):
    image = forms.ImageField(label='画像を選択してください')
views.py
from django.shortcuts import render, redirect
from django.http import HttpResponse
from django.views.generic import TemplateView
from .forms import PhotoForm

class MyappView(TemplateView):
    def __init__(self):
        self.params={'form': PhotoForm()}

    def get(self, req):
        return render(req, 'index.html', self.params)

    def post(self, req):
        form = PhotoForm(req.POST, req.FILES)
        if not form.is_valid():
            raise ValueError('invalid form')

        image = form.cleaned_data['image']
        self.url_get(req, image)
        return render(req, 'index.html', self.params)

    def url_get(self, req, url):
        from PIL import Image
        import base64
        import io
        from io import BytesIO

        img = Image.open(url)
        with io.BytesIO() as output:
            img.save(output,format="JPEG")
            contents = output.getvalue()
            data = base64.b64encode(contents)
            #print('data:image/jpeg;base64,' + str(data)[2:-1])
            self.params['urls'] = 'data:image/jpeg;base64,' + str(data)[2:-1]

結果

最初の画像です。ファイルを選択して、認識をクリックします。
キャプチャ.PNG

このような結果が表示されると思うので、これを元に画像を表示することができます。
キャプチャ3.PNG

参考文献

プロジェクトの作成などは、この資料に基づいているので、プログラムも同一の部分は多くあります。
https://trafalbad.hatenadiary.jp/entry/2018/09/11/105500

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0