forked from mirrors/stickerpicker
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
This commit is contained in:
parent
3876e13d4d
commit
993b4af549
1 changed files with 16 additions and 1 deletions
17
import.py
17
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),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue