び1
import os
from flask import Flask, request, render_template, send_from_directory
from flask_uploads import UploadSet, configure_uploads, IMAGES
from PIL import Image, ImageEnhance
import boto3
import numpy as np
from io import BytesIO
app = Flask(__name__)
# 画像のアップロードセットの設定
photos = UploadSet('photos', IMAGES)
app.config['UPLOADED_PHOTOS_DEST'] = 'uploads'
configure_uploads(app, photos)
# S3クライアントの設定
s3 = boto3.client('s3')
bucket_name = 'your-bucket-name' # ここにあなたのS3バケット名を設定してください
@app.route('/', methods=['GET', 'POST'])
def upload_file():
if request.method == 'POST' and 'photo' in request.files:
filename = photos.save(request.files['photo'])
return render_template('index.html', filename=filename)
return render_template('index.html')
@app.route('/uploads/<filename>')
def send_file(filename):
return send_from_directory(app.config['UPLOADED_PHOTOS_DEST'], filename)
@app.route('/process', methods=['POST'])
def process_image():
mode = request.form.get('mode')
r = int(request.form.get('r', 255))
g = int(request.form.get('g', 255))
b = int(request.form.get('b', 255))
filename = request.form.get('filename')
image_path = os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename)
image = Image.open(image_path)
if mode == 'Grayscale':
image = image.convert('L')
else:
rgb_image = np.array(image)
rgb_image = rgb_image * [r/255.0, g/255.0, b/255.0]
image = Image.fromarray(np.uint8(rgb_image))
processed_image_path = os.path.join(app.config['UPLOADED_PHOTOS_DEST'], 'processed_' + filename)
image.save(processed_image_path)
return send_from_directory(app.config['UPLOADED_PHOTOS_DEST'], 'processed_' + filename)
@app.route('/save', methods=['POST'])
def save_image():
filename = request.form.get('filename')
image_path = os.path.join(app.config['UPLOADED_PHOTOS_DEST'], filename)
with open(image_path, 'rb') as f:
s3.upload_fileobj(f, bucket_name, 'saved_' + filename)
return "Image saved to S3."
if __name__ == '__main__':
app.run(debug=True)
この記事が気に入ったらサポートをしてみませんか?