Hoy os comparto una pequeña función que permite reescalar imágenes usando nearest neighbor y directamente desde el servidor.

Con esto reduciremos el coste computacional del front a la hora de reescalar imágenes.
Recomiendo usarlo para estilo pixel art. Aunque es posible que funcione con otras imágenes o tengas que cambiar el algoritmo de reescalado.
Primero instalamos pillow:
pip install pillow
Y ahora creamos un endpoint que se encarga de devolver la imagen reescalada:
from fastapi import Query from PIL import Image from io import BytesIO from fastapi.responses import Response @user.get("/image/{nombre_imagen:path}", status_code=status.HTTP_200_OK) def get_imagen_accesorios(nombre_imagen: str, w: int = Query(None), h: int = Query(None)): imagen_folder = "images/public" imagen_png = os.path.join(imagen_folder, nombre_imagen + ".png") imagen_jpg = os.path.join(imagen_folder, nombre_imagen + ".jpg") if os.path.isfile(imagen_png): imagen_path = imagen_png media_type = "image/png" elif os.path.isfile(imagen_jpg): imagen_path = imagen_jpg media_type = "image/jpeg" else: raise HTTPException(status_code=404, detail="Error, no existe la imagen.") img = Image.open(imagen_path) # Si se solicitan dimensiones, aplicar escalado nearest neighbor if w and h: img = img.resize((w, h), Image.NEAREST) buf = BytesIO() img.save(buf, format="PNG") buf.seek(0) return Response(content=buf.getvalue(), media_type=media_type, headers={ "Cache-Control": "public, max-age=31536000" })
En este caso como puedes ver, necesitas guardar tus imagenes en formato .jpg o .png en el directorio images/public
Por parámetro le pasarás el path de la imagen sin la extensión y además el tamaño deseado.
GET /image-accesorios/cortina?w=256&h=256

Ingeniero en Informática, Investigador, me encanta crear cosas o arreglarlas y darles una nueva vida. Escritor y poeta. Más de 20 APPs publicadas y un libro en Amazon.