DEV Community

Cover image for Optimization of images with FastAPI
Nelson Hernández
Nelson Hernández

Posted on • Edited on

11 5

Optimization of images with FastAPI

In this example we will see how to upload images and use background tasks to generate resolutions for different
devices

Dependencies

pip3 install fastapi uvicorn Pillow
Enter fullscreen mode Exit fullscreen mode

Background Tasks

You can define background tasks to be run after returning a response.

from fastapi import FastAPI, UploadFile, File, BackgroundTasks
from fastapi.responses import JSONResponse
from os import getcwd
from PIL import Image

app = FastAPI()

PATH_FILES = getcwd() + "/"


# RESIZE IMAGES FOR DIFFERENT DEVICES

def resize_image(filename: str):
    sizes = [{
        "width": 1280,
        "height": 720
    }, {
        "width": 640,
        "height": 480
    }]

    for size in sizes:
        size_defined = size['width'], size['height']

        image = Image.open(PATH_FILES + filename, mode="r")
        image.thumbnail(size_defined)
        image.save(PATH_FILES + str(size['height']) + "_" + filename)
    print("success")


@app.post("/upload/file")
async def upload_file(background_tasks: BackgroundTasks, file: UploadFile = File(...)):

    # SAVE FILE ORIGINAL
    with open(PATH_FILES + file.filename, "wb") as myfile:
        content = await file.read()
        myfile.write(content)
        myfile.close()

    # RESIZE IMAGES
    background_tasks.add_task(resize_image, filename=file.filename)
    return JSONResponse(content={"message": "success"})
Enter fullscreen mode Exit fullscreen mode

Output

dogs.jpg # Original Image

720_dogs.jpg # Resolution 1280 x 720

480_dogs.jpg # Resolution 640 x 480
Enter fullscreen mode Exit fullscreen mode

Example in GitHub Gist

https://gist.github.com/nelsoncode019/35910eff9c09ca015cfb4748be345133

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up