diff --git a/app/main.py b/app/main.py index 12d2d69..ffa528a 100644 --- a/app/main.py +++ b/app/main.py @@ -4,12 +4,19 @@ import string import os from io import BytesIO +import numpy as np from PIL import Image from fastapi import FastAPI, UploadFile from fastapi.staticfiles import StaticFiles from fastapi.middleware.cors import CORSMiddleware +def find_average_hex_color(image: Image.Image): + np_image = np.array(image) + average_color = np.mean(np_image, axis=(0, 1)) + average_color_hex = '#{:02x}{:02x}{:02x}'.format(int(average_color[0]), int(average_color[1]), int(average_color[2])) + return average_color_hex + def generate_random_string(length=16): """Генерирует случайную строку заданной длины.""" @@ -47,11 +54,12 @@ async def upload_avatar(file: UploadFile): image = Image.open(BytesIO(content)) new_size = (512, 512) resized_image = image.resize(new_size) + average_color_hex = find_average_hex_color(resized_image) name = generate_random_string() image_url = f'static/images/avatars/{name}_avatar.png' with open('app/' + image_url, 'wb+') as file_object: resized_image.save(file_object, format="PNG") - return {'image_url': image_url} + return {'image_url': image_url, 'hex_color': average_color_hex} @app.post('/upload_image', response_model=dict[str, str]) diff --git a/requirements.txt b/requirements.txt index 9db9295..5c2798e 100644 --- a/requirements.txt +++ b/requirements.txt @@ -47,6 +47,7 @@ mccabe==0.7.0 multidict==6.0.4 mypy-extensions==1.0.0 nodeenv==1.8.0 +numpy==1.26.4 orjson==3.9.12 packaging==23.2 passlib==1.7.4 @@ -98,5 +99,3 @@ WTForms==3.1.2 yarl==1.9.4 zope.event==5.0 zope.interface==6.1 -pywin32==305; platform_system=="Windows" -bcrypt==4.1.2; platform_system=="Windows"