|
- 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
|