Django Heroku S3 Matplotlib 画像データを保存する
概要
Django, herokuのアプリ上で、matplotlibのグラフデータをs3に保存する。
参照サイト
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とかを入れてその環境上で動かさないとダメぽいので、再度環境を作り直してみます!