Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Django Heroku S3 Matplotlib 画像データを保存する

概要

Django, herokuのアプリ上で、matplotlibのグラフデータをs3に保存する。

参照サイト

sites.google.com

Python 3.5 対応画像処理ライブラリ Pillow (PIL) の使い方 - Librabuch

手順

とりあえずlocalに保存してみる。

def matplotlib_image(media_path, instance, owner_slug):
    filename = os.path.basename(media_path)
    basename, file_extension = filename.split(".")
    upper_file_extension = get_file_extension(file_extension)
    tmp = Image.open(storage.open(media_path))
    im = array(tmp) # 画像データをarrayに変更
    imshow(im) # imをmatplotlibに貼り付ける。
    temp_loc = "%smat/%s/" %(settings.MEDIA_URL, owner_slug) # 一時的なファイルの保存場所を指定する。
    if not os.path.exists(temp_loc):
        os.makedirs(temp_loc)
    temp_file_path = os.path.join(temp_loc, "test.jpg")#filenameをtest.jpgに設定する。
    savefig(temp_file_path) #pathと、ファイル名を指定する。

これはうまくいった。

modelを経由して、S3にアップしてみる。

    process_data = open(temp_file_path, "rb")

    process_file = File(process_data)
    instance.image.save(filename, process_file)
    instance.save()

とりあえず、model classには保存できた!

heroku上で動かす

heroku に, git push heroku masterしてみる。。。以下のようなエラーが発生

import _tkinter # If this fails your Python may not be configured for Tk
remote:        ImportError: No module named '_tkinter'

tkinterは、localでしか動かないため、今の実力だと、これは解決できそうにないな。。。

多分、condaのbuildpackとかを入れてその環境上で動かさないとダメぽいので、再度環境を作り直してみます!