From 5cc8b56a7c1b76e5bd9aaa7bbbcfee255341a857 Mon Sep 17 00:00:00 2001 From: vision Date: Sun, 3 Sep 2023 16:29:19 +0800 Subject: [PATCH] Optimize image download and storage logic - Implement new compression logic for files larger than 10MB to improve storage efficiency. - Switch from JPEG to PNG to enhance image quality and compatibility. --- channel/wework/wework_channel.py | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/channel/wework/wework_channel.py b/channel/wework/wework_channel.py index 5182789..87a0016 100644 --- a/channel/wework/wework_channel.py +++ b/channel/wework/wework_channel.py @@ -16,6 +16,7 @@ from channel.wework.wework_message import WeworkMessage from common.singleton import singleton from common.log import logger from common.time_check import time_checker +from common.utils import compress_imgfile, fsize from config import conf from channel.wework.run import wework from channel.wework import run @@ -38,12 +39,25 @@ def download_and_compress_image(url, filename, quality=30): os.makedirs(directory) # 下载图片 - response = requests.get(url) - image = Image.open(io.BytesIO(response.content)) - - # 压缩图片 - image_path = os.path.join(directory, f"{filename}.jpg") - image.save(image_path, "JPEG", quality=quality) + pic_res = requests.get(url, stream=True) + image_storage = io.BytesIO() + for block in pic_res.iter_content(1024): + image_storage.write(block) + + # 检查图片大小并可能进行压缩 + sz = fsize(image_storage) + if sz >= 10 * 1024 * 1024: # 如果图片大于 10 MB + logger.info("[wework] image too large, ready to compress, sz={}".format(sz)) + image_storage = compress_imgfile(image_storage, 10 * 1024 * 1024 - 1) + logger.info("[wework] image compressed, sz={}".format(fsize(image_storage))) + + # 将内存缓冲区的指针重置到起始位置 + image_storage.seek(0) + + # 读取并保存图片 + image = Image.open(image_storage) + image_path = os.path.join(directory, f"{filename}.png") + image.save(image_path, "png") return image_path