From cac4c2897c4524dd301a6ce1be276c25aa9b8540 Mon Sep 17 00:00:00 2001 From: urec56 Date: Fri, 14 Jun 2024 17:51:34 +0500 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BB=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D1=81=20?= =?UTF-8?q?=D0=B3=D0=B8=D1=84=D0=BA=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/main.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/app/main.py b/app/main.py index 258ee7a..431454c 100644 --- a/app/main.py +++ b/app/main.py @@ -27,10 +27,29 @@ async def upload_avatar(file: UploadFile): image = Image.open(BytesIO(content)) new_size = (512, 512) - resized_image = image.resize(new_size) - image_url = f"static/images/avatars/{name}_avatar.{image.format.lower()}" - resized_image.save(image_url, save_all=True) if image.format.lower() in {"gif"} else resized_image.save(image_url) + if image.format.lower() == "gif": + frames = [] + try: + while True: + frames.append(image.copy()) + image.seek(image.tell() + 1) + except EOFError: + pass + resized_frames = [frame.resize(new_size) for frame in frames] + resized_gif = resized_frames[0] + resized_gif.save( + image_url, + save_all=True, + append_images=resized_frames[1:], + optimize=True, + duration=image.info["duration"], + loop=image.info["loop"] + ) + else: + resized_image = image.resize(new_size) + + resized_image.save(image_url) return {"image_url": image_url}