2.6 KiB
Сервис обработки изображений
Данный сервис принимает на вход изображения типа png
или jpeg
и необходимую ширину выходного
изображения в пикселях(Опционально. По умолчанию 250 пикселей),
изменяет размер изображения до указанной ширины сохраняя пропорции,
загружает итоговое изображение на сервер AWS S3 и возвращает ссылку на загруженный файл.
Установка
Перед началом использования стоит убедиться, что у вас имеется готовый
AWS S3
бакет.
Так же для работы Celery
потребуется сервер Redis
.
Он может быть поднят отдельно, либо сразу со всем сервисом в докере.
В корне проекта создаём .env
файл и заполняем в нём необходимые поля по примеру из .env_template
Далее устанавливаем всё необходимое.
pip install -r requirements.txt
---> 100%
В терминале пишем
celery -A app.tasks.celery:celery worker --loglevel=INFO
В другом терминале пишем
uvicorn app.main:app --reload
Теперь API
доступен на http://localhost:8000/api/upload_image
и документация на http://localhost:8000/docs
Установка в docker
Так же создаём .env
файл и заполняем его всем необходимым
В поле REDIS_HOST
указываем redis
В терминале пишем
docker compose build
docker compose up -d
API
будет доступен на порте 9000
Пример использования
import requests
def send_image(image_path: str, target_width: int) -> None:
with open(image_path, 'rb') as file:
file_data = file.read()
url = f'http://localhost:9000/api/upload_image/?target_width={target_width}'
response = requests.post(url, files={'file': file_data})
if response.status_code == 200:
link = response.json()["resized_image_link"]
print("Файл успешно отправлен!", link, sep="\n")
else:
print("Ошибка при отправке файла:", response.status_code, response.json()["detail"])
if __name__ == "__main__":
send_image("image.png", 300)