前提・実現したいこと
flaskで画像の明るさを変換して、そのままユーザーがダウンロードできるようにしたい
参考URL
Flask サーバに保存せずにファイルをアップロード・ダウンロードする
発生している問題・エラーメッセージ
AttributeError: 'SpooledTemporaryFile' object has no attribute 'point'
下記コードのf.pointが使えないようです。
該当のソースコード
python
1from flask import Flask, request, render_template, send_file 2from PIL import Image 3from io import BytesIO 4from werkzeug.datastructures import FileStorage 5from skimage import io 6 7app = Flask(__name__) 8 9@app.route('/', methods=["GET", "POST"]) 10def index(): 11 title = 'This is Fix Image App!!' 12 13 if request.method == 'GET': 14 return render_template('index.html', title=title) 15 else: 16 f = request.files['file'] 17 img_bright = f.point(lambda x:x*1.8) 18 19 return send_file(img_bright, 20 attachment_filename=f.filename, 21 as_attachment=True) 22 23if __name__ == '__main__': 24 app.run(debug=True)
html
1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8</head> 9<body> 10 <h1>{{title}}</h1> 11 <img src="/static/images/original_yakiniku.jpg" alt="original"> 12 → 13 <img src="/static/images/fix_yakiniku.jpg" alt=""> 14 15 <form action="/", method="POST", enctype=multipart/form-data> 16 <input type="file", name="file"> 17 <input type="submit"> 18 </form> 19 20</body> 21</html>
試したこと
jupyter上で下記のようなコードを書いてフォルダ内の画像全てを明るくするという処理をしたのですが、これをflaskに転用できないかとそのままコードを使っています。
jupyter
1original_photos = os.listdir("photos") 2count = 1 3 4for p in original_photos: 5 img = Image.open("photos/{}".format(p)) 6 img_bright = img.point(lambda x:x*1.8) 7 ftitle, fext = os.path.splitext(p) 8 img_bright.save("bright/{}.jpg".format(count)) 9 count = count + 1
そして、参考URLのように画像の処理を何も入れずに実装をしてみたのですが、ダウンロードはできるものの、中身が空となってしまいます。
また、
f = request.files['file']
で受け取ったものはimageファイルそのままなのかなと思ってprintしてみたところ、<FileStorage: '1.jpg' ('image/jpeg')>となっていたので違うのかなと思いました。FileStorageとは何でしょうか。ここから画像を明るくする、pointを使えるようにするにはどうしたら良いでしょうか。
補足情報(FW/ツールのバージョンなど)
python 3.6

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/04 14:26