При загрузке аватарки ещё возвращается средний hex изображения

This commit is contained in:
urec56 2024-03-10 13:23:15 +03:00
parent d2db021c95
commit ba4050d65e
2 changed files with 10 additions and 3 deletions

View file

@ -4,12 +4,19 @@ import string
import os import os
from io import BytesIO from io import BytesIO
import numpy as np
from PIL import Image from PIL import Image
from fastapi import FastAPI, UploadFile from fastapi import FastAPI, UploadFile
from fastapi.staticfiles import StaticFiles from fastapi.staticfiles import StaticFiles
from fastapi.middleware.cors import CORSMiddleware 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): def generate_random_string(length=16):
"""Генерирует случайную строку заданной длины.""" """Генерирует случайную строку заданной длины."""
@ -47,11 +54,12 @@ async def upload_avatar(file: UploadFile):
image = Image.open(BytesIO(content)) image = Image.open(BytesIO(content))
new_size = (512, 512) new_size = (512, 512)
resized_image = image.resize(new_size) resized_image = image.resize(new_size)
average_color_hex = find_average_hex_color(resized_image)
name = generate_random_string() name = generate_random_string()
image_url = f'static/images/avatars/{name}_avatar.png' image_url = f'static/images/avatars/{name}_avatar.png'
with open('app/' + image_url, 'wb+') as file_object: with open('app/' + image_url, 'wb+') as file_object:
resized_image.save(file_object, format="PNG") 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]) @app.post('/upload_image', response_model=dict[str, str])

View file

@ -47,6 +47,7 @@ mccabe==0.7.0
multidict==6.0.4 multidict==6.0.4
mypy-extensions==1.0.0 mypy-extensions==1.0.0
nodeenv==1.8.0 nodeenv==1.8.0
numpy==1.26.4
orjson==3.9.12 orjson==3.9.12
packaging==23.2 packaging==23.2
passlib==1.7.4 passlib==1.7.4
@ -98,5 +99,3 @@ WTForms==3.1.2
yarl==1.9.4 yarl==1.9.4
zope.event==5.0 zope.event==5.0
zope.interface==6.1 zope.interface==6.1
pywin32==305; platform_system=="Windows"
bcrypt==4.1.2; platform_system=="Windows"