From 993b4af5497339b1976441299da3c5a91d9c5d07 Mon Sep 17 00:00:00 2001 From: Tulir Asokan Date: Sat, 5 Sep 2020 15:44:04 +0300 Subject: [PATCH] Set fake width instead of actually resizing image The image quality shouldn't be reduced, but it should be shown smaller in clients. Also add compatibility hack for broken clients like Element iOS that require a thumbnail_url --- import.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/import.py b/import.py index d1b892f..27fd4ac 100644 --- a/import.py +++ b/import.py @@ -85,7 +85,6 @@ class MatrixStickerInfo(TypedDict, total=False): def convert_image(data: bytes) -> (bytes, int, int): image: Image.Image = Image.open(BytesIO(data)).convert("RGBA") - image.thumbnail((256, 256), Image.ANTIALIAS) new_file = BytesIO() image.save(new_file, "png") w, h = image.size @@ -100,6 +99,14 @@ async def reupload_document(client: TelegramClient, document: Document) -> Matri print(".", end="", flush=True) mxc = await upload(data, "image/png", f"{document.id}.png") print(".", flush=True) + if width > 256 or height > 256: + # Set the width and height to lower values so clients wouldn't show them as huge images + if width > height: + height = int(height / (width / 256)) + width = 256 + else: + width = int(width / (height / 256)) + height = 256 return { "body": "", "url": mxc, @@ -108,6 +115,14 @@ async def reupload_document(client: TelegramClient, document: Document) -> Matri "h": height, "size": len(data), "mimetype": "image/png", + + # Element iOS compatibility hack + "thumbnail_url": mxc, + "thumbnail_info": { + "w": width, + "h": height, + "size": len(data), + }, }, }