mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-02-10 00:07:36 +08:00
Add image compression feature to WechatComAppChannel to compress images larger than 10MB before uploading to WeChat server. The compression is done using the `compress_imgfile` function in `utils.py`. The `fsize` function is also added to `utils.py` to calculate the size of a file or buffer.
35 lines
828 B
Python
35 lines
828 B
Python
import io
|
|
import os
|
|
|
|
from PIL import Image
|
|
|
|
|
|
def fsize(file):
|
|
if isinstance(file, io.BytesIO):
|
|
return file.getbuffer().nbytes
|
|
elif isinstance(file, str):
|
|
return os.path.getsize(file)
|
|
elif hasattr(file, "seek") and hasattr(file, "tell"):
|
|
pos = file.tell()
|
|
file.seek(0, os.SEEK_END)
|
|
size = file.tell()
|
|
file.seek(pos)
|
|
return size
|
|
else:
|
|
raise TypeError("Unsupported type")
|
|
|
|
|
|
def compress_imgfile(file, max_size):
|
|
if fsize(file) <= max_size:
|
|
return file
|
|
file.seek(0)
|
|
img = Image.open(file)
|
|
rgb_image = img.convert("RGB")
|
|
quality = 95
|
|
while True:
|
|
out_buf = io.BytesIO()
|
|
rgb_image.save(out_buf, "JPEG", quality=quality)
|
|
if fsize(out_buf) <= max_size:
|
|
return out_buf
|
|
quality -= 5
|