Closed7

画像に枠線をつけてくれるWEBアプリを作る

not75743not75743

Flask

ChatGPTと協力して作成

コード群

ディレクトリ構成

.
├── app
│   ├── app.py
│   └── templates
│       └── index.html
├── docker-compose.yaml
├── Dockerfile
└── requirements.txt

app.py

from flask import Flask, render_template, request, send_file
from PIL import Image, ImageOps
import os

app = Flask(__name__)

@app.route('/', methods=['GET'])
def index():
    return render_template('index.html')

@app.route('/process_image', methods=['POST'])
def process_image():
  image_file = request.files['image']
  if image_file:

    image = Image.open(image_file.stream)
    bordered_image = ImageOps.expand(image, border=1, fill='black')
    
    temp_file = "temp_image.png"
    bordered_image.save(temp_file)

    response = send_file(temp_file, as_attachment=True, download_name=f"bordered_{image_file.filename}")
    os.remove(temp_file)

    return response

if __name__ == '__main__':
    app.run(debug=True)
<!DOCTYPE html>
<html>
<head>
    <title>Wakusen App</title>
</head>
<body>
    <h1>Wakusen App</h1>
    <form action="/process_image" method="post" enctype="multipart/form-data">
        <input type="file" name="image" accept="image/*" required>
        <input type="submit" value="Upload and Process Image">
    </form>
</body>
</html>
not75743not75743

コンテナ化

Dockerfile

Dockerfile
FROM python:3.11.4-slim-bookworm

ENV FLASK_APP=app
ENV FLASK_RUN_HOST=0.0.0.0

WORKDIR /app

COPY requirements.txt requirements.txt
RUN pip install --upgrade pip && \
    pip install -r requirements.txt

requirements.txt

requirements.txt
Flask==2.3.2
Pillow==10.0.0

docker-compose.yaml

docker-compose.yaml
version: '3'

services:
  web:
    build: .
    command: flask run
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app
not75743not75743

動作確認

http://localhost:5000へアクセス

枠線をつけたいファイルを選択し、「Upload and Process Image」をクリック

このような枠線つき画像がダウンロードできる

枠線がついてるのでヨシ

このスクラップは2023/08/07にクローズされました