MS

Mateus Silva19/10/2024 17:16
Compartilhe

Redimensionamento de Imagens com uma API Flask e AWS S3

  • #AWS
  • #Flask
  • #Python

Introdução

No mundo digital de hoje, as imagens desempenham um papel crucial na comunicação visual. No entanto, imagens muito grandes podem causar lentidão no carregamento de páginas e desperdiçar espaço de armazenamento. Para solucionar esses problemas, desenvolvemos uma API utilizando Flask que permite redimensionar e otimizar imagens armazenadas no AWS S3. Este artigo descreve o processo de criação dessa API, suas funcionalidades e como utilizá-la.

Tecnologias Utilizadas

A API foi construída utilizando as seguintes tecnologias:

  • Python 3.x: A linguagem de programação utilizada para desenvolver a API.
  • Flask: Um microframework para Python que facilita a criação de APIs e aplicativos web.
  • Boto3: A biblioteca oficial da AWS para Python, utilizada para interagir com o serviço S3.
  • Pillow: Uma biblioteca de manipulação de imagens que permite redimensionar e otimizar imagens.

A seguir, temos o código completo da API:

from flask import Flask, request, jsonify
import boto3
from PIL import Image
from io import BytesIO


app = Flask(__name__)
s3 = boto3.client('s3')


def download_image_from_s3(bucket_name, image_key):
  obj = s3.get_object(Bucket=bucket_name, Key=image_key)
  return obj['Body'].read()


def resize_image(image_data, max_size=(800, 600)):
  image = Image.open(BytesIO(image_data))
  image.thumbnail(max_size)
  buffer = BytesIO()
  image.save(buffer, format="JPEG")
  buffer.seek(0)
  return buffer


def upload_image_to_s3(bucket_name, image_key, image_data):
  s3.put_object(Bucket=bucket_name, Key=image_key, Body=image_data, ContentType='image/jpeg')


@app.route('/reduce-image-size', methods=['POST'])
def reduce_image_size():
  data = request.get_json()
  bucket_name = data['bucket_name']
  image_key = data['image_key']
  new_image_key = data['new_image_key']
  max_size = tuple(data.get('max_size', (800, 600)))


  original_image = download_image_from_s3(bucket_name, image_key)
  resized_image = resize_image(original_image, max_size)
  upload_image_to_s3(bucket_name, new_image_key, resized_image)


  return jsonify({'message': 'Image resized and uploaded successfully!'}), 200


if __name__ == '__main__':
  app.run(debug=True)


  1. download_image_from_s3: Faz o download da imagem do S3.
  2. resize_image: Redimensiona a imagem utilizando a biblioteca Pillow.
  3. upload_image_to_s3: Faz o upload da imagem redimensionada de volta ao S3.
Compartilhe
Comentários (1)
Belisnalva Jesus
Belisnalva Jesus - 20/10/2024 11:01

Excelente, parabéns!