From 993b4af5497339b1976441299da3c5a91d9c5d07 Mon Sep 17 00:00:00 2001
From: Tulir Asokan <tulir@maunium.net>
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),
+            },
         },
     }